Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obliczanie kąta wektora pomiędzy dwoma punktami w układzie współrzędnych

Ostatnio zmodyfikowano 2010-11-13 14:53
Autor Wiadomość
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
P-23954
DejaVu
» 2010-11-13 13:47:51
Fragment mojej biblioteki matematycznej i jednocześnie rozwiązanie Twojego problemu:
C/C++
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;
    } //if
   
    return atan( point.y / point.x ) +( point.x < 0 ? M_PI
        : 0 );
}

/edit:
Powyższe rozwiązanie dotyczy płaszczyzny tj. 2D.
P-23958
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.
P-23959
DejaVu
» 2010-11-13 13:59:28
http://www.wiw.pl/matematyka/geometria/geometria_07_01.asp
Może pod powyższym linkiem znajdziesz jakieś informacje.

/edit:
Nie wiem do czego potrzebujesz docelowo, jednak warto jeszcze zobaczyć różne inne podobne rzeczy, np.
http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline3d/

A tak swoją drogą to rozwiązanie (x,y) oraz (x,z) nie będzie prawidłowe? stosując ten kod, który Ci wcześniej dałem? Otrzymasz dwa kąty - jeden w osiach (X,Y), a drugi (X,Z).
P-23960
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.
P-23965
DejaVu
» 2010-11-13 14:53:00
C/C++
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.
P-23966
« 1 »
  Strona 1 z 1