题意:甲和乙两条狗分别沿着不同的折线奔跑,速度未知,但是他们同时出发,同时到达,并且匀速奔跑
求甲和乙在奔跑过程中的最远距离与最近距离之差
因为运动是相对的,所以将甲看做不动
将运动分解为方向向量sa、sb和位移向量va、vb
那么乙相对于甲的运动为sb+vb-va
#include#include #include using namespace std;struct Point { double x,y; Point(double x=0,double y=0) : x(x),y(y) { } void input() { scanf("%lf%lf",&x,&y); }};typedef Point Vector;const double eps=1e-10;int dcmp(double p) { if(fabs(p) 0) return length(v3); return fabs(Cross(v1,v2)/length(v1)); } };Geometry Two_dimensional;Point pa[51],pb[51];double minn,maxn;void update(Point P,Point A,Point B){ minn=min(minn,Two_dimensional.DistanceToSegment(P,A,B)); maxn=max(maxn,Two_dimensional.length(P-A)); maxn=max(maxn,Two_dimensional.length(P-B));}int main(){ int T,suma,sumb,nowa,nowb; double lena,lenb; Point sa,sb; scanf("%d",&T); for(int t=1;t<=T;t++) { lena=lenb=0; minn=2e9; maxn=0; scanf("%d%d",&suma,&sumb); for(int i=1;i<=suma;i++) pa[i].input(); for(int i=1;i<=sumb;i++) pb[i].input(); for(int i=1;i