你的球体和矩形相交 IIF
圆心和矩形的一个顶点之间的距离小于球体的半径
或
圆心和矩形的一个边缘之间的距离小于球体的半径 ([point-line distance ])
或
圆心在矩形内
点对点距离:
P1 = [x1,y1]
P2 = [x2,y2]
距离 = sqrt(abs(x1 - x2)+abs(y1-y2))
点线距离:
L1 = [x1,y1],L2 = [x2,y2] (你的线的两个点,即顶点)
P1 = [px,py] 某个点
距离 d = abs( (x2-x1)(y1-py)-(x1-px)(y2-y1) ) / 距离(L1,L2)
矩形内的圆心:
采用分离轴方法:如果存在将矩形与点分开的直线上的投影,则它们不相交
您将点投影在与矩形边平行的线上,然后可以轻松确定它们是否相交。如果它们不在所有 4 个投影上相交,则它们(点和矩形)不能相交。
您只需要内积 ( x= [x1,x2] , y = [y1,y2] , x*y = x1*y1 + x2*y2 )
你的测试应该是这样的:
//矩形边:TL(左上)、TR(右上)、BL(左下)、BR(右下)
//指向测试:POI
分开=假
for egde in { {TL,TR}, {BL,BR}, {TL,BL},{TR-BR} }: // 边缘
D = 边缘[0] - 边缘[1]
innerProd = D * POI
Interval_min = min(D*edge[0],D*edge[1])
Interval_max = max(D*edge[0],D*edge[1])
如果不是(Interval_min ≤ innerProd ≤ Interval_max)
分开=真
break // 结束 for 循环
万一
结束
如果(分隔为真)
返回“没有交集”
别的
返回“路口”
万一
这并不假定一个轴对齐的矩形,并且可以轻松扩展以测试凸集之间的交集。