ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算几何全家桶(一)

2022-03-19 11:36:45  阅读:187  来源: 互联网

标签:直线 AB return 线段 全家 PA 计算 几何 jd


计算几何全家桶(一)

【一】:图形之间的位置关系

1.点与线段

  • 判断点是否在线段上

给定点 \(P\),线段的端点 \(A,B\),如果点 \(P\) 在线段 \(AB\) 上,则需满足 \(PA\) 与 \(PB\) 共线,且 \(P\) 在 \(AB\) 之间。

bool check_xd(d p,d a,d b){//判断点 p 是否在线段 AB 上 
    return !jd(cj(p-a,b-a))&&jd(dj(p-a,p-b))<=0;
//用 len(p-a)+len(p-b)==len(a-b) 判断更为直观,但精度损失大
}//向量pa与pb共线且p在a,b之间 
  • 求点到线段的距离

给定点 \(P\),线段的端点 \(A,B\),点到线段距离情况分三种。
第一种: 最近距离是线段 \(PA\) 的长度
第二种: 最近距离是线段 \(BP\) 的长度
第三种: 最近距离是点 \(P\) 到线段 \(AB\) 的垂直距离

dd dis_xd(d p,d a,d b){//点 P 到线段 AB 的距离 
    if(a==b)return len(p-a);//特判线段两端点重合的情况
    d x=p-a,y=p-b,z=b-a;//x:PA y:PB z:BA
    if(jd(dj(x,z))<0)return len(x);
    if(jd(dj(y,z))>0)return len(y);
    return ABS(cj(x,z)/len(z));//用叉积计算面积除底边长就是点到线段垂直距离 
}

1.点与直线

  • 判断点是否在直线上

给定点 \(P\),直线上的两点 \(A,B\),则只需判断直线 \(AP\) 与直线 \(BP\) 共线即可。

bool check_zx(d p,d a,d b){//判断点 P 是否在直线 AB 上
    return !jd(cj(p-a,p-b));//PA,PB 共线
}

标签:直线,AB,return,线段,全家,PA,计算,几何,jd
来源: https://www.cnblogs.com/AIskeleton/p/16025783.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有