那么,我有一个平面是由空间p中的一个点和一个法向量n定义的,我想找到这个平面上直接指向"下山"的法向量。我该如何解决这个问题呢?
好的,所以不需要点在空间中的位置。你需要做的就是求平面法向量与你定义为"下"的向量的外积。这给了你一个垂直于它们的向量,也就是说,以一个平坦的梯度穿过斜率。然后你再把这个新向量和法线向量做叉乘,它就会得到你想要的"下坡"向量:平行于斜率的向量,向下分量最大。
假设法向量和下向量有单位长度并且这里的*算子表示叉积
gradient = (normal * down) * normal;
如果您的'down'向量只是(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);
我认为这是负梯度向量。梯度应该是"上坡"的切向量,所以假设它是一个平面,如果你取负它,它应该是"下坡"的切向量。所以,如果
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>
因此,<年代>"下坡"切应该& lt; - a - b>。 年代>
求解下降速率留给读者作为练习:D
请注意,位置p对于确定梯度无关紧要。
编辑:实际上,我想我不得不自相矛盾了。我在想,如果你"向下"看一个平面,法向量指向"向上"(就像一根旗杆笔直地伸出滑雪场),那么"下坡"的切向量实际上就是N在XY平面上的投影,因此t =。我不太确定为什么梯度没有成功。当然,这意味着,如果c <</p>