当前位置: 首页 > news >正文

C/C++ 二维平面求点到直线的距离

链接:点到直线距离_牛客题霸_牛客网

描述

你需要实现一个函数,给定平面上的点 (a,b)(a,b),以及一条由另外两个点 (x1,y1)(x1​,y1​) 和 (x2,y2)(x2​,y2​) 确定的直线 LL,求点 (a,b)(a,b) 到直线 LL 的距离。

输入描述:

共 22 行。
第一行是两个空格隔开的整数 a,ba,b。
第二行是四个空格隔开的整数 x1,y1,x2,y2x1​,y1​,x2​,y2​。

输出描述:

共一行,一个实数,表示点 (a,b)(a,b) 到直线 LL 的距离,保留两位小数。

示例1

输入:

0 0 -1 1 1 1

输出:

1.00

备注:

1≤a,b,x1,y1,x2,y2<2311≤a,b,x1​,y1​,x2​,y2​<231。

//法1:点线距离 = 三角形面积的2倍 / 底边 #include <bits/stdc++.h> using namespace std; typedef long long ll; //const ll N = 2e5 + 10; struct point { double x, y; point(double A, double B) { x = A, y = B; } point() = default; }; struct line { point point_A, point_B; line(point A, point B) { point_A = A, point_B = B; } line() = default; }; double getDistance(point P, line L) { // TODO: 计算点P到直线L的距离 double PP1x = L.point_A.x - P.x; double PP1y = L.point_A.y - P.y; double PP2x = L.point_B.x - P.x; double PP2y = L.point_B.y - P.y; double S = abs(PP1x*PP2y - PP1y*PP2x); double line_p1p2 = sqrtl(pow(L.point_A.x - L.point_B.x, 2) + pow(L.point_A.y - L.point_B.y, 2)); double res = S / line_p1p2; return res; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); double a, b, x1, y1, x2, y2; cin >> a >> b >> x1 >> y1 >> x2 >> y2; point P(a, b), P1(x1, y1), P2(x2, y2); line L(P1, P2); cout << getDistance(P, L); return 0; }
//法2:直接用直线的一般式公式(更简洁) #include <bits/stdc++.h> using namespace std; typedef long long ll; struct point { double x, y; point(double A = 0, double B = 0) : x(A), y(B) {} }; struct line { point a, b; line(point A = {}, point B = {}) : a(A), b(B) {} }; double getDistance(point p, line l) { // Step 1: 求直线一般式 Ax + By + C = 0 的系数 // A = y2 - y1 (法向量的x分量) // 几何意义:直线在y方向的变化率 double A = l.b.y - l.a.y; // B = x1 - x2 (法向量的y分量) // 注意不是 x2-x1,这样(A,B)才构成法向量 double B = l.a.x - l.b.x; // C = -(A*x1 + B*y1) = x2*y1 - x1*y2 // 确保直线过点(x1,y1): A*x1 + B*y1 + C = 0 double C = l.b.x * l.a.y - l.a.x * l.b.y; // Step 2: 套点到直线距离公式 // 分子 |A*x0 + B*y0 + C| :点代入直线方程的绝对值 // 分母 sqrt(A²+B²) :法向量的模长(归一化) return fabs(A * p.x + B * p.y + C) / sqrtl(A * A + B * B); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout << fixed << setprecision(10); double a, b, x1, y1, x2, y2; cin >> a >> b >> x1 >> y1 >> x2 >> y2; cout << getDistance(point(a, b), line(point(x1, y1), point(x2, y2))); return 0; }
http://www.jsqmd.com/news/453552/

相关文章:

  • 2026宁波高端红茶批发指南:口碑厂家,养生必备,有机认证高端红茶/生态红茶/特色高端精品红茶,高端红茶加工厂选哪家 - 品牌推荐师
  • 生产环境日志分析:用NLP-StructBERT聚类相似错误日志
  • StructBERT零样本分类-中文-base实际作品集:电商评论‘好评/中评/差评/物流问题’四分类效果
  • 2026年Kimi写的论文AI率太高?这几款降AIGC率工具实测有效
  • 封神博弈入门✅蒋文华《博弈论基础及其应用》,浙大出版社出品,解锁人生决策密码
  • 2026年常州干燥机设备正规厂商排名,十大厂家有哪些 - mypinpai
  • 手把手教你用 cephadm 在 Ubuntu 22.04 上部署生产级 Ceph 集群(Quincy/Reef 版本通用)
  • Qwen3-0.6B-FP8应用开发:Python源码分析工具
  • 天津普通装修哪家公司口碑好?2026最新FAQ解答 - 速递信息
  • C 语言测验
  • AI智能体在设备预测性维护的场景应用|从被动抢修到主动预测,构建智能工厂新范式
  • 2026年太原清水混凝土装饰公司口碑排名,有实力的品牌企业汇总 - 工业品牌热点
  • 提升开发效率:coze-loop AI代码优化器从入门到精通实战
  • 多无人机动态避障路径优化:基于阿尔法进化(Alpha Evolution,AE)算法的多个无人机动态避障路径规划(MATLAB代码
  • 2026年盘点贵阳老牌的新能源汽修培训,口碑好的是哪家 - 工业品网
  • Allegro PCB整体旋转
  • call间接调用
  • PAT 乙级 1111
  • 亲测推荐:氢气压缩机厂家实战案例
  • F.动态规划-入门DP-打家劫舍:2140. 解决智力问题
  • Vue3重新登录后Store内容未清理解释
  • OpenClaw MAC Mini 配置
  • 揭秘 PyTorch 底层黑魔法:Stride 机制与“零拷贝”的艺术
  • AI写真不求人:ComfyUI Qwen人脸生成图像实战教程
  • Spring的xml方式声明式事务控制
  • 2026年江苏宇灿智能装备有限公司产品好用吗,宇灿智能装备可信度高吗排名 - myqiye
  • RetinaFace在Linux系统上的部署教程:从零开始搭建人脸检测环境
  • Gemma-3-12B-IT在STM32嵌入式开发中的边缘计算应用
  • Python字符串strip函数作用
  • MouseEngine 进一步美化你的光标