簡體   English   中英

在3D中找到三角形的左/右頂點

[英]Finding left/right vertices to a point in a triangle in 3D

給定3D三角形,並且在其邊緣之一上有一個點,我想找出該邊緣的哪個頂點在該點的左側,而哪個在右側。

請參見下圖:

在此圖像中,頂點v2v3始終如圖所示放置。 v3v2之間還有一條線段。 問題是頂點v0v1可能以交換順序給出。 我想找出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”(或v0v1任何其他順序)取決於某些參考。 您提到您知道三角形的法線向量(稱為N )-可以用作此類參考。

假設法向矢量指向示例圖像中的查看器。 然后,計算v2 - v3v0 - v3的向量積。 這將指向與法線相同的半空間(意味着v0在“左側”),或者指向相反的半空間(意味着v0在“右側”)。

由於N垂直於三角形的平面,因此如果vN之間的角度小於90度,則向量v指向相同的半空間;否則,向量v指向相同的半空間。 換句話說,如果vN的點積為正。

這些共同為您提供所需的訂購標准。

求向量v2-v3和v1-v2的叉積。 從產品的方向推導方向。

向量是從平面向上指向還是向下指向。

這是如果我正確理解了您對左右的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM