obrót trójkąta (bitmapa) wokół osi przebiegającej przez wierzchołek

0

Witam ! Problem jest następujący : mam logo w postaci trójkąta równoramiennego , zapisane w postaci tablicy opisującej położenie każdego z punktów (2809 punktów) , kolor każdego punktu zapisany jest w drugiej tablicy. Potrzebuję obracać to logo ( ten trójkąt ) wokół prostej przebiegającej przez wierzchołek tego trójkąta prostopadła do podstawy. Obliczenie położenia wierzchołków podstawy po obrocie to żaden problem , wierzchołki poruszają się po obwodzie elipsy, trzeci wierzchołek jest nieruchomy . Wystarczy połączyć prostymi wierzchołki i trójkąt ładnie się obraca. ALe ... ja potrzebuję obracać "cały" trójkąt , wszystkie jego punkty a nie tylko wierzchołki no i przy obrocie będzie ulegał on zniekształceniom. Bok bliższy obserwatorowi będzie dłuższy a oddalony będzie krótszy. Pytanie jak to zrobić ? Jakich wzorów ,jakich algorytmów użyć ? Rzecz cała dzieje sie w TP.

0

Każdy punkt tego trójkąta obraca się wzdłuż własnej elipsy. Proporcje współczynników a/b dla każdej z tych elips są takie same. Współczynnik (jeden i drugi) jest proporcjonalny do odległości tego punktu od osi.

0

No właśnie tak myślałem i próbowałem tak robić tzn. przyjąłem , że wszystkie punkty bedą obracać sie po elipsach . Ale widocznie coś skopałem bo nie wyszło ( nie do końca zrozumiałem). Wzory na elipsę x=x_sr +acos(k) ; y=y_sr+bcos(k).
Jak podstawimy punkty w1[-50,-18] , w2[50,18] (wierzchołki na podstawie) a=-50, a=50 ,b=-18,b=18 , będzie się ładnie kręcić . Ale moja podstawa trójkąta ma współrzędne x od -52 do 52 a y = 18 . Może podpowiedź jakiego wzoru użyć do kręcenia tymi punktami - nota bene tworzącymi prostą - wokól osi y po elipsie ?

0

Oczywiście że pomerdałeś, w jednym z tych równań (obojętnie w którym) ma być sin zamiast cos.
Co do pozostałych elips przecież powiedziałem że są proporcjonalnie do odległości punktu od pionowej osi.

0

Tak , czeski błąd , walnąłem się przy pisaniu posta w programie mam oczywiście sin.
Zamieszczam fragment kodu, teraz kręci się wokół osi pionowej przechodzącej przez wierzchołek trójkąta.
Tylko podstawa obraca się po okręgu a nie po elipsie trzeba coś jeszcze poprawić. Oczywiście trzeba też zoptymalizować, żeby przyśpieszyć czyli tablice z wartościami sin i cos i może putpixel w asm bo strasznie mruga.
a:=320;
b:=140;
for n:=1 to 360 do
begin
kat:=n*pi/180;

for i:=1 to 2809 do {2809}
begin
color:=green;
if i<1500 then if obrx[i]=0 then color:=0 ;
if obry[i]=97 then color:=black;
for j:=1 to 125 do
begin
if i=col[j] then color:=black;
end;
x1:=obrx[i]*sin(kat){-obry[i]*sin(kat)};
y1:=obrx[i]*cos(kat){+obry[i]*cos(kat)};

 putpixel(round(x1)+a,round(y1)+b+obry[i],color);
 if keypressed then break;

 end;

 cleardevice;

end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1