2

因此,我有一个由空间 P 中的一个点和一个法线 N 定义的平面。我想找到直接指向平面上“下山”的法线向量。我将如何解决这个问题?

4

2 回答 2

4

好的,所以不需要该点在空间中的位置。您需要做的是将平面法线矢量与您定义为“向下”的任何矢量相乘。这为您提供了一个垂直于它们的矢量,即穿过具有平坦梯度的斜坡。然后你再次取这个新向量与法线的叉积,它将产生你想要的“下坡”向量:平行于具有最大向下分量的坡度的向量。

所以假设法向量和下向量具有单位长度并且这里的 * 运算符代表叉积:

gradient = (normal * down) * normal;

如果您的“向下”向量只是(0, 0, -1),并且适用于大多数应用程序,您可以通过分配以下值来简化代码中的计算:

gradient.X = normal.X * normal.Z;
gradient.Y = normal.Y * normal.Z;
gradient.Z = -(normal.X * normal.X) - (normal.Y * normal.Y);
于 2015-09-01T02:36:53.260 回答
2

我认为这是负梯度向量。梯度应该是“上坡”的切向量,所以假设它是一个平面,如果你否定它应该是“下坡”的切向量。因此,如果

PLANE : z = ax + by + c where N = <a,b,c>
grad(z) = <d/dx(ax + by + c),d/dy(ax + by + c)> = <a,b>
-grad(z) = <-a,-b>

因此,“下坡”切线应该是 <-a,-b>。

求解下降率留给读者作为练习:D

请注意,位置 P 与确定梯度无关。

编辑:实际上,我认为我必须自相矛盾。我在想,如果你“向下”看一个平面,法向量指向“向上”(就像旗杆直接从滑雪坡上伸出),那么“下坡”切线向量实际上是 N 到XY 平面,因此 t = 。我不太确定为什么渐变的东西没有解决。当然,这意味着,如果 c < 0,则向下向上;)

于 2013-01-16T22:56:43.400 回答