我想知道一条线(x1,y1,x2和y2)是否与一个物体碰撞(如果该线的任何部分正在接触或在该物体内)。对象可以是矩形(带有x,y,宽度和高度)或圆形(带有x,y和半径)。
我想要两个JavaScript代码示例,每个示例都是一个函数,一个用于行矩形碰撞(lineX1,lineY1,lineX2,lineY2,rectangleX,rectangleY,rectangeWidth,rectangleHeight)
,另一个用于行圆碰撞(lineX1,lineY1,lineX2,lineY2,circleX,circleY,circleRadius)
。
非常感谢最有效的方式。
答案 0 :(得分:1)
线段具有参数方程
X = X0 + t (X1 - X0)
Y = Y0 + t (Y1 - Y0)
并且圆圈具有隐式方程式
(X - Xc)² + (Y - Yc)² = R²
替换最后一个中的第一个表达式,可以得到t
中的二次方程式
t
;您需要检查此区间与[0, 1]
的交点,以查看该区段是否有一部分。对于轴对齐矩形的线段,您可以编写不等式系统
Xa <= X0 + t (X1 - X0) <= Xb
Ya <= Y0 + t (Y1 - Y0) <= Yb
如果系数t
为负数,您可以交换X0
&lt; =&gt; X1
和Xa
&lt; =&gt; Xb
(同样为Y
)使其成为正面。
然后不公平变为
(Xa - X0) / (X1 - X0) <= t <= (Xb - X0) / (X1 - X0)
(Ya - Y0) / (Y1 - Y0) <= t <= (Yb - Y0) / (Y1 - Y0)
您要添加细分的限制
0 <= t <= 1.
检查这些支架是否兼容是一件容易的事。
对于圆形和矩形,您可以从直接边界框测试开始。