最近在做一个游戏需求中用到了和几何计算有关的知识,需要去计算射线和一个平面的交点,计算方法在这里记录一下。
首先定义一条射线:起始点p0和方向d,那么射线上任意一点p=p0 + td。
平面的定义则通过一个法向n和一个顶点来实现,对于平面上的所有点p,p·n = d,d是一个常数。
那么要计算它们之间的相交就不难了,若射线和平面相交,则必有:
(p0 + td)·n = d
p0·n + td·n = d
最终可得:
t=(d - p0·n)/(d·n)。
如果射线和平面互相平行,则d·n = 0,它们之间没有交点。d的计算则通过找平面上的一个点p,取p·n = d来实现。