2011-07-18

Współrzędne barycentryczne

Ograniczymy się tylko do wersji 2D i skupimy się tylko na zastosowaniu w trójkącie.

  
    
      
    
  
  
  
    
      
        image/svg+xml
        
        
      
    
  
  
    
    P1
    P0
    P2
    v
    u
    
    
    
    P
    
  

Współrzędne barycentryczne to para (u,v). Można powiedzieć, że jest to punkt w układzie współrzędnych którego osie to boki trójkąta. Konwersja pomiędzy układem barycentrycznym, a ortogonalnym:

$P=P_0+\vec u + \vec v$
$P=P_0+u(P_1-P_0)+v(P_2-P_0)$
$P=P_0+uP_1-uP_0+vP_2-vP_0$
$P=P_0(1-v-u)+P_{1}u+P_{2}v$
Widzimy, że punkt $\mathbf{P}$ jest liniową kombinacją $\mathbf{P_0}$, $\mathbf{P_1}$ i $\mathbf{P_2}$. Tak naprawdę współrzędne barcentryczne to trójka liczb, przy czym ta trzecia to $\mathbf{1-u-v}$.

Współrzędne barycentryczne wyznaczają punkt wewnątrz trójkąta jeśli $\mathbf{0<=u<=1}$ i $\mathbf{0<=v<=1}$ i $\mathbf{0<=v+u<=1}$. Konwersja z układu ortgonalnego na układ barycentryczny:

  
    
      
    
  
  
  
    
      
        image/svg+xml
        
        
      
    
  
  
    
    P1
    P0
    P2
    P
    
    
  
Współrzędne barycentryczne wyznaczamy z proporcji pól trójkątów:

$u=\displaystyle\frac{\triangle(P, P0, P2)}{\triangle(P0, P1, P2)}$


$v=\displaystyle\frac{\triangle(P, P0, P1)}{\triangle(P0, P1, P2)}$

Pola trójkątów najlepiej policzyć z iloczynu wektorowego. Wzory te działają tylko dla punktu wewnątrz trójkąta.

Przeanalizujmy współrzędna u. Jeśli znajdzie się ona na boku trójkąta $\mathbf{\overline{P0P1}}$ pole trójkąta $\mathbf{\triangle(P, P0, P2)}$ jest równe zeru i tym samym współrzędna u. Wraz z przemieszaniem się punktu P w stronę punktu P1 pole trójkąta $\mathbf{\triangle(P, P0, P2)}$ dąży do pola trójkąta $\mathbf{\triangle(P0, P1, P2)}$, czyli współrzędna u dąży do jeden. Jeśli współrzędna wyjdzie poza trójkąt pole (powinno być, w naszym przypadku nie jest ujemne) lub większe od 1. To samo tyczy się pozostałych współrzędnych barycentrycznych.

Jeśli trójkąty $\mathbf{\triangle(P, P0, P2)}$ lub $\mathbf{\triangle(P, P0, P1)}$ będą mieć w sumie pole większe od pola trójkąta $\mathbf{\triangle(P0, P1, P2)}$ to niewątpliwie punkt P musi być poza trójkątem. Czyli punkt jest w trójkącie jeśli $\mathbf{0<=v+u<=1}$. Ten warunek musi być spełniony dla dowolnej pary współrzędnych barycentrycznych.

Współrzędne barycentryczne mają zastosowanie podczas teksturowania. Dla punktu P wewnątrz trójkąta liczymy jego współrzędne barycentryczne. Dalej biorąc nową trójkę współrzędnych tekstury liczymy współrzędną tekstury z współrzędnych barycentrycznych.

Brak komentarzy:

Prześlij komentarz