記錄一下:
點與面的關係如圖:
如果法相量是單位向量的話,那麼分母為1
所以,當 平面的法向量是單位向量的話,看乙個點與平面的關係的公司就是分子:
ax0 + by0 + cz0 + d
在muli3d 中,看到下面的**
inline float32 plane::operator *( const vector3 &i_vval ) const
inline float32 plane::operator *( const vector4 &i_vval ) const
第乙個函式就比較好理解,直接就是上面的數學推導。
對於第二個函式,考慮的點的座標是齊次座標,
下面進行推導下,
得到的就是 點的座標就是 (x, y, z, w) => ( x / w , y / w, z / w, 1)
所以:pq 點積 n 得到,n 是單位向量的情況下,公式是
a ( x0/w0 - x) + b (y0/w0 - y) + c (z0/w0 - z)
a ( x0 - w0x) + b (y0 - w0y) + c (z0 - w0z) / w0
( ax0 + by0 + cz0 + w0 * (ax + by + cz)) / w0
( fvector3dot( normal, (vector3)i_vval ) + d * i_vval.w ) / i_vval.w
對比**,上面的公式多了 / i_vval.w,
個人理解:
因為向量的w分量大多數情況下都是為1的,只有在經過了投影矩陣變換後,w才不為1,在muli3d中,投影矩陣類似於dx的投影矩陣,所以,經過投影變換之後的w > 0,
所以,**中只用了分子來判斷點與面的關係,只要是 > 0 的話,就是在面的正面區域,只要是 < 0 的話,就是在面的背面區域。
下面是muli3d的投影矩陣**:
matrix44 &matmatrix44perspectivefovlh( matrix44 &o_matmatout, const float32 i_ffovy, const float32 i_faspect, const float32 i_fznear, const float32 i_fzfar )
3d 目標檢測 判斷點雲是否在bbox中
有時候需要判斷某些點是否在點雲的凸包內,例如3d object detection 中找到了bbox,判斷場景中的點雲哪些在這個bbox中,這裡以2d點為例 import numpy as np import matplotlib.pyplot as plt from matplotlib.coll...
D3D程式設計必備的數學知識(5)
平面 d3dx平面 在 中描述乙個平面 僅僅需要乙個法向量n和常數d就可以了。因此我們就使用乙個4d向量 我們記錄成 n,d 來實現它。d3dx庫中用如下的結構來定義乙個平面 typedef struct d3dxplane d3dxplane const float d3dxplane const...
3D建模技術 講稿 5 基礎
一 橋接 bridge 3 二 圓環排列工具 circle 4 三 平化 flatten 6 四 蠟筆路徑 gstretch 7 五 曲線 curve 8 六 放樣 loft 11 七 鬆弛 relax 12 這一節介紹blender中非常重要的外掛程式l oopt ools的一些功能。好的外掛程式...