题意:给定两点,及它们各自的运功方向,求最小距离。
分析:初中数学。。。把直线参数方程求出,再套两点距离公式,二次函数求最值问题。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main(void)
{
int x1,y1,x2,y2;
int v1x,v1y,v2x,v2y;
while(scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&v1x,&v1y,&v2x,&v2y)==8)
{
double dx=x1-x2;
double dy=y1-y2;
double dvx=v1x-v2x;
double dvy=v1y-v2y;
double a=dvx*dvx+dvy*dvy;
double b=dvx*dx+dvy*dy;
double c=dx*dx+dy*dy;
double t=b/a;
if(a==0)
{
printf("%.15lf\n",sqrt(c));
continue;
}
if(t>=0)
printf("%.15lf\n",sqrt(c));
else
printf("%.15lf\n",sqrt(a*t*t-2*b*t+c));
}
return 0;
}