当前位置:
首页 >
牛客小白月赛2-B小马过河(求点到直线的垂足)
发布时间:2024/4/18
60
豆豆
生活随笔
收集整理的这篇文章主要介绍了
牛客小白月赛2-B小马过河(求点到直线的垂足)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目链接
求点到直线的垂足分为 空间 、平面
原理:
空间:
#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); } }总结
以上是生活随笔为你收集整理的牛客小白月赛2-B小马过河(求点到直线的垂足)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: zzuli 2269:minval
- 下一篇: zzuli-1726:迷宫(语文功底题。