【问题标题】:How can we check a point is within triangular pyramid?我们如何检查一个点是否在三角金字塔内?
【发布时间】:2021-12-19 08:08:56
【问题描述】:
我们做了一个函数返回一个点在三角形内。现在我们想走得更远。我们要检查一个点是否在四面体金字塔的体积中只有坐标。例如,我们金字塔的坐标是[(0, 0, 0), (3, 1, 4), (1, 4, 2), (6, 3, 5)]。我们的目标点是(1, 1, 0)。它必须返回false。但是如果我们提出我们的观点Z 是1,它必须返回true。
【问题讨论】:
标签:
c#
algorithm
math
3d
algebra
【解决方案1】:
一种可能的方法:使用下一个行列式计算源四面体的signed volumes 和由点 P 和面形成的四个四面体(我省略了 1/6 因子)。
所有行列式值都应具有相同的符号内点
for source
| x1 x2 x3 x4 |
V = | y1 y2 y3 y4 |
| z1 z2 z3 z4 |
| 1 1 1 1 |
| px x2 x3 x4 |
V1 = | py y2 y3 y4 |
| pz z2 z3 z4 |
| 1 1 1 1 |
| x1 px x3 x4 |
V2 = | y1 py y3 y4 |
| z1 pz z3 z4 |
| 1 1 1 1 |
对于 V3、V4 类似,在对应列中使用 P 坐标
【解决方案2】:
根据:
Blackpawn
检查一个点是否在三角形中的常用方法是找到将点连接到三角形三个顶点的向量,并将这些向量之间的角度相加。如果角度和为 2*pi,则该点在三角形内,否则不在。它可以工作,但速度很慢。