SEE THIS POST IN ENGLISH
Aby napisac algorytm który rozwinie nam powierzchnie, musimy zapoznac sie z dwoma zadaniami z matematyki .
Aby napisac algorytm który rozwinie nam powierzchnie, musimy zapoznac sie z dwoma zadaniami z matematyki .
Współrzędne w przestrzeni 3D i długości 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 |
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.
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