线段和圆/球的相交性检测

来源:互联网 发布:什么是淘宝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

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小班健康教案生病了怎么办 被蜜蜂蛰了怎么办教案 走丢了怎么办大班反思 小孩吃了硬物怎么办 小孩吞了硬物怎么办 小学二年级孩子成绩不好怎么办 二年级孩子成绩不好怎么办 一年级学的不好二年级怎么办 17个月宝宝夜奶怎么办 小孩吃积食了吐怎么办 11个宝宝不会爬怎么办 5岁宝宝严重挑食怎么办 孩子吃菜口味重怎么办? 孩子挑食不吃菜不吃肉怎么办 微信新的朋友回复频繁怎么办 忘了闺蜜生日怎么办 把闺蜜生日忘了怎么办 忘了闺蜜的生日怎么办 一岁宝宝不吃菜怎么办 幼儿园教案虫子爬进耳朵怎么办 鼻子出血怎么办幼儿说课 英语记不住发音不准怎么办 幼儿园孩子拼音记不住怎么办 孩子总是记不住东西怎么办 走丢了怎么办小班教案 走丢了怎么办小班社会 数学加减个十分不清怎么办 孩子b和d分不清怎么办 小孩b和d分不清怎么办 高一的数学不会怎么办 农村小孩到市里上学怎么办 和外国人打官司输了怎么办 碰见爱说你的领导怎么办 小孩脾气爆一句话就生气怎么办 小孩眼睛哭肿了怎么办 大人吵架吓到宝宝了怎么办 小孩晚上睡觉不踏实怎么办 二宝美籍大宝怎么办 小孩一洗澡就哭怎么办 孩子去外地上学学籍怎么办 非婚生子父亲想要孩子怎么办