McAffey Temat założony przez niniejszego użytkownika |
Obliczanie kąta wektora pomiędzy dwoma punktami w układzie współrzędnych » 2010-11-13 13:12:03 Witam! Mam następujący problem. Znam współrzędne (x, y, z) dwóch punktów i muszę wyliczyć jaki kąt miała by linia (względem jednego z punktów) gdyby poprowadzić ją od jednego punktu do drugiego. Na tej zasadzie, że wprowadzę do programu dane x1, y1, z1 i x2, y2, z2 i program powinien powinien wyliczyć np 50stopni x i 30stopni y. Może to być nawet w konsoli, gui nie jest ważne, tylko muszę to wyliczyć. Macie jakiś pomysł na algorytm jakim by to można było obliczyć. Z góry dziękuję i pozdrawiam ;)
edit: Dodam, że kąt x powinien wynosić od 0 do 360 a y od 0 do 180 |
|
DejaVu |
» 2010-11-13 13:47:51 Fragment mojej biblioteki matematycznej i jednocześnie rozwiązanie Twojego problemu:
double getRadians( const CPoint & point ) { if( point.x == 0 ) { if( point.y > 0 ) return M_PI / 2; if( point.y < 0 ) return - M_PI / 2; return 0; } return atan( point.y / point.x ) +( point.x < 0 ? M_PI : 0 ); }
/edit:
Powyższe rozwiązanie dotyczy płaszczyzny tj. 2D. |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2010-11-13 13:54:29 Ale to jest układ współrzędnych dwuwymiarowy (operujemy tylko na x i y) a ja potrzebuje to wyliczyć z układu współrzędnych trójwymiarowego. Po dodaniu współrzędnej "z" kąt się zmieni.
edit: Uprzedziłeś mnie editem, no właśnie. |
|
DejaVu |
» 2010-11-13 13:59:28 |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2010-11-13 14:46:23 A tak swoją drogą to rozwiązanie (x,y) oraz (x,z) nie będzie prawidłowe? |
Dobre pytanie, trudno jest mi to w głowie "sprawdzić". A ten Twój kod nie chce mi się skompilować, pokazuje mi błędy typu "expected `,' or `...' before '&' token", chyba wyrwany z całości biblioteki nie chce współpracować. A swoją drogą, on na pewno wyliczy ten kąt (w 2d)? Trochę go nie ogarniam, ale tutaj on zna tylko współrzędne jednego punktu (point.x i point.y) a nam chodzi o wyliczenie kąta między dwoma punktami. |
|
DejaVu |
» 2010-11-13 14:53:00 cout << "Kat w radianach miedzy punktami p1 i p2: " << getRadians( p2 - p1 ) << endl;
Nie kompiluje się, bowiem nie masz klasy CPoint. Przerób sobie kod na taki, który będzie przyjmował x oraz y jako argumenty zamiast klasy, którą ja mam w swoim rozwiązaniu. |
|
« 1 » |