所以,我有一个由空间P中的点和正常N定义的平面。我想找到直接指向平面上“下坡”的法向量。我该如何解决这个问题呢?
答案 0 :(得分:3)
好的,所以不需要空间点的位置。您需要做的是将平面法线向量的十字乘积与您定义的任何向量“向下”。这将为您提供垂直于它们的矢量,即横跨斜坡的平面渐变。然后你再次将这个新向量的十字乘积与法线相乘,它将产生你想要的'下坡'向量:平行于斜率的向量,具有最大的向下分量。
假设正常向量和向下向量具有单位长度,并且*运算符在此表示叉积:
gradient = (normal * down) * normal;
如果您的“向下”向量仅为(0, 0, -1)
,并且适用于大多数应用,则可以通过分配以下值在代码中simplify this calculation:
gradient.X = normal.X * normal.Z;
gradient.Y = normal.Y * normal.Z;
gradient.Z = -(normal.X * normal.X) - (normal.Y * normal.Y);
答案 1 :(得分: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>
因此,“下坡”切线应该&lt; -a,-b&gt;。
解决下降率是留给读者的练习:D
请注意,位置P与确定渐变无关。
编辑:实际上,我认为我必须自相矛盾。我想如果你向下看“飞”,法线矢量指向“向上”(就像一个直接伸出滑雪坡的旗杆),那么“下坡”切线矢量实际上是N投影到XY平面,因此t =。我不太清楚为什么渐变的东西没有用。 当然,这意味着,如果c < 0,向下是;)