使用两个点计算模型中的压痕深度?

时间:2019-01-08 01:17:54

标签: c# unity3d math vector

通过光线投射可以选择GameObjects Collider上的一个点。在简短的视觉中,用小球体表示两个点,表示用户选择。期望计算模型压痕中任何斑点的深度。当前的想法是使用一种系统,在该系统中,用户选择压痕深度内的一个点,然后选择压痕深度外的一个点,而不是使用矢量数学来计算深度。

截至目前,我们可获得的信息是空间中的两个点(向量)及其之间的距离。我们如何使用上述数据来计算与深度中的点垂直的点?认为如果此点比深度可计算,则为那两个点之间的距离。如何解决这个问题,这是否可行?

视觉: visual_clip

1 个答案:

答案 0 :(得分:0)

我认为2分是不够的。您可以看到整个场景,知道两个点都位于其中的平面,因此您可以看到最短距离(垂直)线段的方向。但是仅两点就有无限多其他有效平面经过它们。您唯一可以说的是深度受这两点之间的距离的限制。

考虑以下示例:一个点A(0,0,0),而B(2,1,0)。压痕有多深?答案是:您不知道。

首先假定平面是(平面a包含点A,平面b包含点B):

  • aX = 0,而bX = 2。那么压痕深度显然是2。
  • aY = 0,而bY = 1。那么压痕深度显然是1。
  • 最后,如果aZ = 0并且bZ = 0。那么压痕深度显然为0。

实际上,改变平面方向可以得到0之间的任何深度以及AB之间的距离。

我看到的唯一解决方案是通过选择该平面上的 3 点来固定两个平面中的至少一个。然后问题变得微不足道了。拥有3个点,您会发现

形式的平面方程
a*x + b*y + c*z + d = 0

则从点(x1,y1,z1)到该平面的距离为

dist = (a*x1 + b*y1 + c*z1 + d)/sqrt(a^2+b^2+c^2)