1. 程式人生 > 其它 >1515: 距離計算

1515: 距離計算

技術標籤:c語言部分acm練習題演算法c語言

1515: 距離計算

1.描述

給定一個線段,兩端點分別是(x1,y1),(x2,y2),求某點至該線段的最短和最長距離,該點的座標是(x0,y0), 保證線段上的兩端點不互相重合。
輸入
依次給出x0,y0,x1,y1,x2,y2的座標,依照題目描述求出最短和最長距離
輸出
輸出保留兩位小數
樣例輸入
1.0 2.0 1.0 2.0 3.0 2.0
1.0 2.0 3.0 0.0 5.0 0.0
1.0 2.0 0.0 0.0 3.0 0.0
樣例輸出
0.00 2.00
2.83 4.47
2.00 2.83
提示

三角形面積公式:S=1/2fabs((x1y0+x0y2+x2y1-x1y2-x0y1-x2*y0));

2.程式碼

#include<stdio.h>
#include<math.h>
int main()
{
    double x,y,x1,y1,x2,y2,h,max,min,s;
    double n1,n2,n3;
    while(~scanf("%lf %lf %lf %lf %lf %lf",&x,&y,&x1,&y1,&x2,&y2))
    {
            n1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
         n2=sqrt
((x-x2)*(x-x2)+(y-y2)*(y-y2)); n3=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); if(n1*n1+n3*n3<n2*n2) { min=n1; max=n2; } else if(n2*n2+n3*n3<n1*n1) { min=n2; max=n1; } else { s=
fabs(x1*y+x*y2+x2*y1-x1*y2-x*y1-x2*y); min=s/n3; max=n2>n1?n2:n1; } printf("%.2lf %.2lf\n",min,max); } return 0; }