圆与线段碰撞检测

来源:互联网 发布:淘宝店铺注册流程 编辑:程序博客网 时间:2024/03/29 02:23

圆与线段的碰撞检测算法利用了一个向量在另一个向量的投影的原理。

假设向量p1p为v1, 向量p1p2为v2,p0为v1在v2上的投影点,则p1p0为v1在v2上的投影。

两个向量点乘v1.dot(v2) = v1.length() * v2.length() * cos(theta) = x1 * x2 + y1 * y2,当v2经过单位化后,点乘的结果就变成的投影向量p1p0的长度,设为u。

当p位于p1左侧时,theta角度大于90度,cos值为负,所以u <= 0;当p位于p2右侧时,u >= v2.length()。

依此可以算出到圆心p到线段上距离最近的点,如果到该点距离小于圆半径r,则圆与线段相交。


圆与线段碰撞检测的算法实现:


原文出处:点击打开链接

0 0
原创粉丝点击