Saturday, March 26, 2011

Z 3D do 2D z algebrą

SEE THIS POST IN ENGLISH

Aby napisac algorytm który rozwinie nam powierzchnie, musimy zapoznac sie z dwoma zadaniami z matematyki .

W poprzednim etapie pokazywaliśmy jak Rozwinąc powierzchni przy pomocy geometrii wykreślnej , znając długosci bokow trójkąta .Teraz pokażemy jak dokonać tego przy pomocy liczb .

Współrzędne w przestrzeni 3D i długości boków trójkąta
Pierwszą rzeczą z którą musimy się zmierzyć jest długość boków trójkąta .
Trójkąt możemy zdefiniować w przestrzeni przy pomocy 3 punktów . A każdemu z tych punktów mozemy przypisać 3 współrzędne (x,y,z) .
Odległośc między punktami możemy zdefiniować jako pierwiastek z sumy kwadratów rożnic poszczególnych współrzednych .
W ten sposób mamy długości boków danego trójkąta .

Konstrucja
 Kolejny krok wykonujemy juz w przestrzeni dwuwymiarowej . Pierwszym etapem jest zdefiniowanie odcinka o dlugosci pierwszego boku ( D na rysunku ) . Odcinek ten zdefiniowany jest przez punky A i B i odpowiednich współrzędnych . Pozostale dwa boki trójkąta mają długośc odpowiedni r1 i r2 . Szukamy punktu C o współrzędnych (xC; yC) .

Pierwszym etapem jest znalezienie punktu S .
Rozpisując twierdzenie Pitagorasa dla trójkątów ACS i BCS otrzymujemy :
r1² = h² + a²
r2² = h² + b²
Z równań :
r1² - r2² = a² - b²
r1² -r2² = (a+b) * (a-b)
ponieważ D = a + b  i b = D - a
r1² -r2² = D * (2a-D)
stąd:
a = (r1² -r2² +D²) / 2D

Punkt S ma więc współrzędne:
xS = x1 + (Dx * a) / D
yS = y1 + (Dy * a) / D

Znając a możemy wyliczyć również h :  h = √(r1² - a²)

Mozemy wypisać również następujące zależności :
Dy / D = dx / h  =>  dx = - (Dy * h ) / D
( znak mówi nam o tym że jeżeli Dy jest dodatnie, czyli punkt B jest wyżej niz punkt A, to punkt C znajduje się na lewo od punktu S i vice-versa )
Dx / D = dy / h  =>  dy = (Dx * h ) / D

Ostatni krok to wyznaczenie punktu C :
xC = xS + dx = x1 + (Dx * a) / D - (Dy * h ) / D = x1 + (Dx * a - Dy * h ) / D
yC = yS + dy = y1 + (Dy * a) / D + (Dx * h ) / D = y1 + (Dy * a + Dx * h ) / D

Jeżeli chcemy wyznaczyć analogiczny punkt C' który znajduje się poniżej odcinka AB :
xC' = xS + dx = x1 + (Dx * a) / D + (Dy * h ) / D = x1 + (Dx * a + Dy * h ) / D
yC' = yS + dy = y1 + (Dy * a) / D - (Dx * h ) / D = y1 + (Dy * a - Dx * h ) / D

C.D.N.

No comments:

Post a Comment