在上一篇(楊超:由高度場求法線)中推導了由高度場求法線的公式為:
N=normalize(-grad+up)
然後有人問反過來怎麼求,即:已知法線,反推高度場。
第一感覺是豈不涉及到偏微分方程了,超出了我這工科數學水平。。。
但試了一下發現,由於問題的特殊性是可以解出的,結果如下:
其中
為法線分量,C為常數
下面是推導過程和例項檢驗。
一,推導過程:
因為
所以
(令
,則)
寫成分量形式即:
得:
因為
即梯度,於是問題就轉化成了已知梯度求原函式。
方法如下:
令
,
,則
(1)兩邊對x積分,得:
。。。(3)
其中W(z)為僅含自變數z的待定函式。
(3)兩邊對z求導得:
。。。(4)
比較(2)(4)兩式得:
得:
。。。(5)
由(3)(5)得:
再將(1)(2)代入得:
這就是由法向量反求高度的表示式。
注:
(1)因為
,所以前面推導過程中得到的
實際上就是
。也就是說高度場的法線N和梯度grad之間可互求:
grad->N:
N->grad:
(2)
不可以化簡為
,因為雖然“先不定積分再求導得本身”,但“先求導再不定積分”可能差常數項。
(3)在上面解法中我們是“對(1)式積分再求導,然後與(2)式比較”。由於對稱性,還有一種方法是“對(2)式積分再求導,然後與(1)式比較”,這樣的話得到的結果將是:
兩個結果都是對的。
因為可以證明
與
只相差一個常數項:
令
,
則:
所以僅相差常數項。
二,例項檢驗
例1:
設高度場為
則
,
接下來由N反推y,看能否得到
。
由
得
,
,則
(符合預期)
例2:
設高度場為
則
,
接下來由N反推y,看能否得到
。
由
得
,
,則
(符合預期)
參考:Reconstructing a function from its gradient
————補充:
下一篇解釋幾何含義及程式碼實現:楊超:由法線反求高度場(2):幾何直觀