首页 > 代码库 > 由高度场求法线
由高度场求法线
设高度场由函数z=h(x,y)给出,则问题就是求此曲面的法线。
注:文中d代表偏导数。
方法一:
把z=h(x,y)看成山坡,则在点P(x,y)处,其爬坡方向由二维梯度给出
gradh=(dh/dx,dh/dy,0)。
(gradh在XY平面内,由低海拔指向高海拔)。
根据“梯度的模等于方向导数”有:
|gradh|=tan(theta),theta为坡度角。
因为|gradh|=tan(theta),所以若设up=(0,0,1)(即让up的模为1),则恰有-gradh+up=normal。如图:
于是就有normal=-gradh+up=-(dh/dx,dh/dy,0)+(0,0,1)=(-dh/dx,-dh/dy,1)。
方法二:
构造三维标量场F(x,y,z)=h(x,y)-z。
则z=h(x,y)为F的0等值面。
F在点(x,y,z)处梯度为gradF=(dF/dx,dF/dy,dF/dz)=(dh/dx,dh/dy,-1)。
由于梯度必定垂直于等值面。
所以z=h(x,y)在点(x,y,z)处的法向量normal=gradF=(dh/dx,dh/dy,-1)。
注:
1,可见两种方法得出的结果是一致的。
2,是取(-dh/dx,-dh/dy,1)还是取(dh/dx,dh/dy,-1)根据需求而定,如本文由高度场求法线这种用于图形学用途,显然是会取(-dh/dx,-dh/dy,1),
3,以上两种方法都没有对结果进行归一化,在实际用于图形学时应进行归一化。
由高度场求法线
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。