簡體   English   中英

通過Y對三角形頂點進行排序時是否知道中間頂點是左側還是右側?

[英]Knowing if middle vertex is left or right when sorting a triangle vertices by Y?

我正在閱讀Chris Hecker的“紋理貼圖”文章 ,對於我一生,我無法理解他是如何使用Y階頂點確定中間頂點是在左側還是在右側。

排序代碼:

    if (Y0 < Y1)
    {
        if (Y2 < Y0)
        {
            Top = 2; Middle = 0; Bottom = 1;
            MiddleCompare = 0; BottomCompare = 1;
        }
        else
        {
            Top = 0;
            if (Y1 < Y2)
            {
                Middle = 1; Bottom = 2;
                MiddleCompare = 1; BottomCompare = 2;
            }
            else
            {
                Middle = 2; Bottom = 1;
                MiddleCompare = 2; BottomCompare = 1;
            }
        }
    }
    else
    {
        if (Y2 < Y1)
        {
            Top = 2; Middle = 1; Bottom = 0;
            MiddleCompare = 1; BottomCompare = 0;
        }
        else
        {
            Top = 1;
            if (Y0 < Y2)
            {
                Middle = 0; Bottom = 2;
                MiddleCompare = 3; BottomCompare = 2;
            }
            else
            {
                Middle = 2; Bottom = 0;
                MiddleCompare = 2; BottomCompare = 3;
            }
        }
    }

然后他寫道:

if (BottomCompare > MiddleCompare)
{
    MiddleIsLeft = 0;
    Left = &TopToBottom; Right = &TopToMiddle;
}
else
{
    MiddleIsLeft = 1;
    Left = &TopToMiddle; Right = &TopToBottom;
}

我的問題:

  • 我們如何依靠Y階來判斷中間頂點是左還是右? 這真的很令人困惑,因為排序僅在Y上完成,而沒有提及X。
  • 顯然,存在BottomCompareMiddleCompare變量以實現比較。 在比較的前半部分(“ if”), MiddleCompare等於MiddleBottomCompare等於Bottom 但是在下半部分(“ else”)中,當Bottom等於0BottomCompare等於3 ,而當Middle等於0MiddleCompare等於3 這是為什么?

您缺少的是:

  1. 多邊形纏繞規則。

    三角形/多邊形的頂點應按特定的順序CW / CCW

  2. 您應該確定目標側為線而不是點。

    由於某些點位於雙方,因此確定單個點是錯誤的。

因此,例如:

  • 訂單是CW
  • x+軸向右
  • y+軸下降
  • 頂點是A,B,C

例

然后,根據y軸的變化確定左側/右側 因此,在對任何輪廓線( AB,BC,CA )進行柵格化時AB,BC,CA您會看到第一個點與最后一個點之間的y變化。 例如AB行:

dy = (B.y-A.y)
if (dy> 0) right
if (dy< 0) left
if (dy==0) both

有關更多信息,請參見相關的Q / A 封閉凸多邊形填充

編輯:Spektre回答后,我來不及了,但我不想丟掉我的手繪圖片:)

似乎您錯過了重要的部分:三角形的頂點按順時針編號。 因此,了解Y階可以拒絕不可能的變體。

* Compare的值3用於提供循環順序。

Y0 < Y1示例。 對於順時針順序,點2可能位於標記的區域之一(在P0-P1向量的右側):

在此處輸入圖片說明

暫無
暫無

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

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