牛客小白月赛2-B小马过河(求点到直线的垂足)
生活随笔
收集整理的這篇文章主要介紹了
牛客小白月赛2-B小马过河(求点到直线的垂足)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接
求點到直線的垂足分為 空間 、平面
原理:
空間:
#include<iostream> #include<cmath> using namespace std; const double eps = 1e-6; struct ac{double x, y, z; }; ac get(ac p, ac a, ac b){double dx, dy, dz, k;ac ans;dx = b.x - a.x;dy = b.y - a.y;dz = b.z - a.z;if(dx < eps && dy < eps && dz < eps)return a;k = (a.x - p.x) * dx + (a.y - p.y) * dy + (a.z - p.z) * dz;k /= dx * dx + dy * dy + dz * dz;k *= -1;ans.x = k * dx + a.x;ans.y = k * dy + a.y;ans.z = k * dz + a.z;return ans; } int main(){int t;cin >> t;ac p, a, b;ac ans = get(p, a, b);cout << ans.x << ans.y << ans.z << endl; }平面:將Z軸去掉
ac代碼:
#include<iostream> #include<cmath> using namespace std; const double eps = 1e-6; struct ac{double x, y, z; }; ac get(ac p, ac a, ac b){double dx, dy, dz, k;ac ans;dx = b.x - a.x;dy = b.y - a.y;if(abs(dx) < eps && abs(dy) < eps)return a;k = (a.x - p.x) * dx + (a.y - p.y) * dy;k /= dx * dx + dy * dy;k *= -1;ans.x = k * dx + a.x;ans.y = k * dy + a.y;return ans; } int main(){int t;cin >> t;ac p, a, b;while(t--){cin >> p.x >> p.y >> a.x >> a.y >> b.x >> b.y;ac ans = get(p, a, b);printf("%.5lf %.5lf\n", ans.x, ans.y); } }總結(jié)
以上是生活随笔為你收集整理的牛客小白月赛2-B小马过河(求点到直线的垂足)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zzuli 2269:minval
- 下一篇: zzuli-1726:迷宫(语文功底题。