写了个取两正方形上的点之间最短距离,取垂直平分线的方法,但WA,有没有大佬给看看
查看原帖
写了个取两正方形上的点之间最短距离,取垂直平分线的方法,但WA,有没有大佬给看看
567570
xiaoshi_dada楼主2022/11/23 21:11
#include<bits/stdc++.h>
using namespace std;

const int MAXN=10000005;

struct node{
	double x;
	double y;
}a[5],b[5];

node aa,bb,cc;

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		for(int i=1;i<=4;i++)
		{
			cin>>a[i].x>>a[i].y;	//读入正方形A四个顶点
		}
		for(int i=1;i<=4;i++)
		{
			cin>>b[i].x>>b[i].y;	//读入正方形B四个顶点
		}
		double minn=0x7fffffff;		//最小值赋值为2147483647
		for(int i=1;i<=4;i++)
		{
			for(int j=1;j<=4;j++)	//枚举找距离两正方形最近两点
			{
				if(minn>sqrt(pow((a[i].x-b[j].x),2)+pow((a[i].y-b[j].y),2)))
				{
					minn=sqrt(pow((a[i].x-b[j].x),2)+pow((a[i].y-b[j].y),2));	//距离等于根号下横坐标差的平方+纵坐标差的平方
					aa.x=a[i].x;	//最近两点中A正方形的点的横坐标
					aa.y=a[i].y;	//最近两点中A正方形的点的纵坐标
					bb.x=b[j].x;	//最近两点中B正方形的点的横坐标
					bb.y=b[j].y;	//最近两点中B正方形的点的纵坐标
				}
			}
		}

		cc.x=(aa.x+bb.x)/2;		//取两点横坐标中点
		cc.y=(aa.y+bb.y)/2;		//取两点纵坐标中点
		
		double k;	//斜率
		
		if(aa.y>=bb.y)
		{
			k=(aa.y-bb.y)/(aa.x-bb.x);	//斜率=纵坐标差除以横坐标差
		}
		else
		{
			k=(bb.y-aa.y)/(bb.x-aa.x);	//斜率=纵坐标差除以横坐标差
		}
		k=0-(1/k);	//垂直平分线斜率 = -1/k
		double b=k*cc.x-cc.y;	//待定系数法求b
		cout<<k<<" "<<-1<<" "<<0-b<<endl;	//输出ax+by=c中的a,b,c
	}
	return 0;
}
2022/11/23 21:11
加载中...