牛客网 牛客小白月赛2 B.小马过河-简单的计算几何

B.小马过河

链接:https://www.nowcoder.com/acm/contest/86/B

这个题是一个简单的几何题???套个板子就过了,就是直线上两点确定的这条直线和直线外一点的垂足的坐标。

板子题,但是板子具体的操作没仔细看(嘤嘤嘤???(怕是要被锤死。。。))

板子来源:传送门

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdlib>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<stack>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e5+10;
13 const double eps=1e-7;
14 // 二维空间点到直线的垂足
15 struct Point
16 {
17 double x,y;
18 };
19 Point GetFootOfPerpendicular(const Point &pt,const Point &begin,const Point &end){
20     Point retVal;
21     double dx = begin.x - end.x;
22     double dy = begin.y - end.y;
23     if(abs(dx) < 0.0000000001 && abs(dy) < 0.0000000001 ){
24         retVal = begin;
25         return retVal;
26     }
27     double u = (pt.x - begin.x)*(begin.x - end.x) + (pt.y - begin.y)*(begin.y - end.y);
28     u = u/((dx*dx)+(dy*dy));
29     retVal.x = begin.x + u*dx;
30     retVal.y = begin.y + u*dy;
31     return retVal;
32 }
33 int main(){
34     int t;
35     cin>>t;
36     while(t--){
37         Point pt,begin,end;
38         cin>>pt.x>>pt.y>>begin.x>>begin.y>>end.x>>end.y;
39         Point retVal=GetFootOfPerpendicular(pt,begin,end);
40         printf("%.7f %.7f
",retVal.x,retVal.y);
41     }
42 }
原文地址:https://www.cnblogs.com/ZERO-/p/9729048.html