其他分享
首页 > 其他分享> > 计算几何全家桶(一)

计算几何全家桶(一)

作者:互联网

计算几何全家桶(一)

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

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