[英]Finding left/right vertices to a point in a triangle in 3D
給定3D三角形,並且在其邊緣之一上有一個點,我想找出該邊緣的哪個頂點在該點的左側,而哪個在右側。
請參見下圖:
在此圖像中,頂點v2
和v3
始終如圖所示放置。 v3
和v2
之間還有一條線段。 問題是頂點v0
和v1
可能以交換順序給出。 我想找出v0
是位於v3
的“左側”還是“右側”,以便我可以強制v0
始終位於其左側,而v1
始終位於其右側。
由於此問題在3D中,因此我不確定如何有效地計算頂點的相對位置。 我是否首先將其簡化為二維問題(如果可以的話,如何解決)還是有其他方法?
在3d中,“左”和“右”取決於觀察者的位置(以下稱為此位置P
)。 想象一下,您正在從另一側查看該三角形,然后左右顛倒了。 因此,從位置P觀察時,您需要確定頂點是順時針還是逆時針。
為此,您可以計算出以下內容:
N = normalize( cross( v0 - v2, v1 - v2 ) );
PV = normalzie( P - v2 );
if( dot( PV, N ) > 0.0 )
{
//anticlockwise , so you are viewing the picture like in your drawing, then v0 is on the left of vector v3v2, and v1 is on the right
}
else
{
//clockwise, v0 is on the right
}
請注意,如果dot
積幾乎為/或0,則P
與三角形位於同一平面上。
如評論中所闡明的,“ left”和“ right”(或v0
和v1
任何其他順序)取決於某些參考。 您提到您知道三角形的法線向量(稱為N
)-可以用作此類參考。
假設法向矢量指向示例圖像中的查看器。 然后,計算v2 - v3
和v0 - v3
的向量積。 這將指向與法線相同的半空間(意味着v0
在“左側”),或者指向相反的半空間(意味着v0
在“右側”)。
由於N
垂直於三角形的平面,因此如果v
與N
之間的角度小於90度,則向量v
指向相同的半空間;否則,向量v
指向相同的半空間。 換句話說,如果v
和N
的點積為正。
這些共同為您提供所需的訂購標准。
求向量v2-v3和v1-v2的叉積。 從產品的方向推導方向。
向量是從平面向上指向還是向下指向。
這是如果我正確理解了您對左右的定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.