说明
上一篇中,我们已经得到了点到平面的距离,要求投影点坐标,可以利用已经得到的距离。
几何
按照前面的过程,我们已经得到了向量 AC 在平面法线上的投影长,即向量 AD 的长度。那么求投影点坐标,只需要将 C 点沿着某个方向移动一定长度就可以了,移动长度等于 C 到平面的距离,方向等于平面法线 AB 方向。
代码
static func projectionOnPlane(from point:simd_float3, to plane:Plane) -> simd_float3 {
// 这里还需要用到 vector 变更,所以将`projectionOnPlane(from point:simd_float3, to plane:Plane)`中的代码直接重写一遍
let vector = point - plane.position
let normalizedNormal = normalize(plane.normal)
let dotValue = dot(vector, normalizedNormal)
let tarPoint = point - dotValue * normalizedNormal
return tarPoint
}
这里用到了点到平面距离的方向性,即正负号代表了点在法线的正方向还是负方向。这里需要注意:当点在平面背面时,应该沿法线移动;当点在平面正方向时,应沿法线反方向移动。