引言
在采样二指夹爪与mesh网格的抓取点时使用的点接触模型,抽象二指夹爪为一个线段,那么寻找夹爪与物体的接触点就抽象为直线与mesh网格的交点问题,而在mesh中物体表面是以空间三角形保存的,在进一步的问题及变成如何计算三维坐标下三角形与直线的交点问题。
当然最简单方法是遍历每一个三角形,计算三角形所在平面与直线的交点,然后判断该交点是否在线段上并且在三角形内。
但是以上方法中计算交点消耗大量计算资源,对mesh网格中的成千上万的三角形计算下来效率低下。
所以我打算采用先判断直线与三角形是否有交点的问题,最后再计算交点。
下面计算两种判断直线与网格中的三角形是否有交点的方法,其中第一种是我自己想的,第二种是参考网上资料的。
方法1:在二维平面上判断点是否在三角形内
第一步:判断直线是否与三角形平面平行或在三角形平面内,这一步只需做直线方向向量与三角形法向量的点积即可,不详细叙述。
第二步:把三角形投影到二维平面上,我们可以想象一下把空间中的三角形投影到以已知直线作为法线的平面上,那么直线在平面内的投影就只是一个点,而三角形在该平面上还是一个三角形,要判断直线是否与三角形有交点只需判断投影点与投影三角形之间的关系即可。为了方便起见,在这一步我直接把整个mesh旋转到以所求直线为z轴的坐标上,那么只需求解三角形在xOy平面上的投影与原点之间的关系即可。
第三步:判断平面上点与三角形位置关系,这里我参考了https://www.cnblogs.com/TenosDoIt/p/4024413.html。