Witam,
piszę program na pracę inżynierską i utknąłem w martwym punkcie. Chodzi mi o obrót punktu wokół jakiejś prostej w trójwymiarze.
Nie ma problemu ze zrobieniem tego wzdłóż konkretnej osi, chodzi mi jednak o daną prostą lub definiującą ją dwa punkty. Może ktoś posiada kod, który jest w stanie z dwóch punktów P1(x, y, z) i P2(x, y, z) tworzyć linie, względem której obrócę o kąt Alfa punkt P3 (x,y,z). Znalazłem i zmodyfikowałem taki kod:
procedure RotateAtom(var px: Currency; var py: Currency; var pz: Currency; u, v, w, alpha: Currency);
//px, py, pz - obracany punkt w przestrzeni
//u, v, w - parametru wektora
var
cosT, sinT, a, ppx, ppy, ppz: Currency;
begin
ppx := px;
ppy := py;
ppz := pz;
u := u/sqrt(sqr(u) + sqr(v) + sqr(w));
v := v/sqrt(sqr(u) + sqr(v) + sqr(w));
w := w/sqrt(sqr(u) + sqr(v) + sqr(w));
cosT := cos(alpha*Pi/180);
sinT := sin(alpha*Pi/180);
a := u*ppx + v*ppy + w*ppz;
px := (a*u + (ppx-a*u)*cosT + (v*ppz-w*ppy)*sinT );
py := (a*v + (ppy-a*v)*cosT + (w*ppx-u*ppz)*sinT );
pz := (a*w + (ppz-a*w)*cosT + (u*ppy-v*ppx)*sinT );
end;
Nie mniej kod ten nie chce mi działać odpowiednio (zrobiłem prostą od (0, 0, 0) do (10, 10, 10) oraz punkt nad nią (5, 6, 5), który kręci się w każdą możliwą stronę, tylko nie tak jak trzeba). Bardzo prosiłbym o pomoc w tym problemie, siedze nad tym dwa dni i nie potrafię nic wykombinować.
Pozdrawiam i liczę na pomoc : ))
Moze cos nie tak jest w rozumowaniu danych wejściowych przeze mnie, tj z wektorem? Dla podanego przeze mnie przykładu jak powinien on wyglądac, sam nie jestem w stanie sobie go wyobrazić (tzn jestem ale zawsze wychodzą głupoty..).