女赛--Can't be easier

题意:给出斜率k,三个点abc的位置,求斜率为k,过点c的直线上的任一点p,到点a和点b的距离的最小
思路:运用高中知识点解题,推公式就可以了、再就是判断一下ab点是否在直线的同侧、

感想:好水的数学题。。。
代码:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f;
#define mod 1000000007
double AA(double a,double b,double c,double d)
{
    return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
int main()
{
    int t;
    double x1,x2,x3,y1,y2,y3,x,y,ans,k;
    scanf("%d",&t);
   while(t--)
   {
       scanf("%lf",&k);
       scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
       if((k*x1-y1-k*x3+y3)*(k*x2-y2-k*x3+y3)>0)
       {
           y=(2*x2*k+y2*k*k-y2-2*k*x3+2*y3)/(k*k+1);
           x=x2-(y-y2)*k;
           ans=AA(x1,y1,x,y);
       }
       else
       {
           ans=AA(x1,y1,x2,y2);
       }
       printf("%.2lf\n",ans);
   }
}

猜你喜欢

转载自blog.csdn.net/qq_37868325/article/details/80329195
今日推荐