线段和圆/球的相交性检测
来源:互联网 发布:什么是淘宝pc端客户 编辑:程序博客网 时间:2024/05/22 03:04
本文讨论2D中线段和圆的相交性检测,检测的方法也适用于3D中线段和球之间的相交性测试,这是因为可以在包含线段和球心的平面进行检测,从而将3D问题转化为2D问题。(如果线段包含在穿过球心的直线上,那么这个平面就不是唯一的,但这并不是问题,在这种情况下我们能使用任意包含射线和球心的平面来进行计算。)
如下图用圆心c和半径r来定义球,线段的定义为:p(t)=p0+td,这里d为单位向量,t从0变化到l,l为线段长度。所要求的是交点处t的值:
t = a - f;
a的计算方法如下,设e为从p0直线圆心c的向量:
e = c - p0;
将e投影到d上,这个向量的的长度为a,它的计算式为:
a = e.d(点乘) (此式看不明白的请参考向量投影相关知识)
现在的任务就是计算f。首先,根据勾股定理,可以很清楚地得到:
f2+b2=r2
在较大的三角形中用勾股定理求得b2:
a2+b2=e2
b2 = e2-a2
e是从线段起点到圆心之间的距离,也就是向量e的长度,因此,e2:
e2 = e.e
代入并化简得:
f = sqrt(r2-e2+a2)
最后求得t:
t = a - f
这里考虑开根号出来的正负两种情况,从而得到两个交点。
这里注意为负,那么射线与圆不相交。
代码实现如下:
程序输出:
交点
7.01444 4.29396
65536 65536
Press any key to continue
- 线段和圆/球的相交性检测
- 线段和圆/球的相交性检测
- 射线与球的相交性检测
- 矩形和圆的相交检测 算法分析与实现
- 矩形和圆的相交检测 算法分析与实现
- 线段相交的判断
- 线段相交的应用
- 射线和平面的相交性检测
- UVALive 6092 Catching Shade in Flatland 线段被多个不相交圆截取的长度和
- 3D模型下的鼠标拣选和碰撞检测-射线与圆的相交算法
- 射线和三角形相交检测
- poj2653 线段相交的判断
- 判断线段相交的实现
- 判断线段相交的方法
- 射线和圆的相交
- 判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)
- 判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)
- 线段与圆是否相交
- 在ASP.NET页面中冻结DataGrid的列或头部
- 基于XML的DI容器配置元数据
- 从容淡定显随意
- 获取一个模糊查询
- 学会慢下来
- 线段和圆/球的相交性检测
- SQL SERVER孤立用户问题--解决方法
- 最简单的JSF程序
- ECMAScript的本地对象
- Android Cmd 命令(不断补充....)
- 脚踏实地
- js日期控件
- 晚上我就回北京了
- 常用命令