C++, kąt i odległość między punktami- jak obliczyc?

adampy
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 2 lis 2009, o 17:46
Płeć: Mężczyzna
Lokalizacja: Milanówek
Pomógł: 1 raz

C++, kąt i odległość między punktami- jak obliczyc?

Post autor: adampy »

Pisze ten temat, nie dla tego, że nie wiem, i potrzebuje pomocy, ale dla innych, ponieważ dużo się naszukałem(prawie rok ), a niby takie proste, a jednak trudne.

ODLEGŁOŚĆ:
Aby wyznaczyć odległość, dużo nie trzeba. Wystarczy wzór pitagorasa. Kwadrat liczby, jest zawsze dodatni, więc nie trzeba się martwić.

Kod: Zaznacz cały

int x1,y1,x2,y2;
int a,b;
int wynik;
a=x1-x2;
b=y1-y2;
wynik=sqrt(a*a+b*b);
Gorzej jest z kątem.

KĄT:
nie mam dużo czasu, więc w skrócie:
jest funkcja atan2, która zwraca to co trzeba, ale od położenia (0,0)... i w radianach...

Działa to tak:

Kod: Zaznacz cały

atan2(y2,x2)// Tak,tak, najpierw Y...
Mała modyfikacja...
Teraz daje wynik w stopniach, ale od (0,0)

Kod: Zaznacz cały

atan2(y2,x2)*180/PI;
I to już działa.

Kod: Zaznacz cały

atan2(y1-y2,x1-x2)*180/PI;
Ostatnio zmieniony 3 lis 2009, o 21:05 przez adampy, łącznie zmieniany 1 raz.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C++, kąt i odległość między punktami- jak obliczyc?

Post autor: soku11 »

Rok szukałeś takiej elementarnej rzeczy :O ?

1. Wszystkie zmienne powinny być raczej typu zmiennoprzecinkowego. W końcu częściej potrzebna jest większa dokładność niż zaokrąglanie do liczb całkowitych.
2. Składnia funkcji oraz przykład, który jest de facto drugim wynikiem google jest tutaj:

Nie wiem więc co to za nowość
3. Zamiana również jest oczywista. Wynika z tego, że:
\(\displaystyle{ 2\pi \mbox{rad}=360^{\circ}\\
\pi \mbox{rad}=180^{\circ}\\
1\mbox{rad}=\frac{180^{\circ}}{\pi}}\)

4. I ta funkcja podaje wynik nie od punktu (0,0) (w końcu nie można określić kąta względem punktu...), ale od dodatniej półosi OX w kartezjańskim układzie współrzędnych. I kąt ten liczymy przeciwnie do ruchu wskazówek zegara.
5. Tak w ogóle, to nie wiem po co ci liczenie kąta od innej półprostej w tym układzie.
6. Mimo wszystko gratulacje, że w tak młodym wieku potrafiłeś coś takiego napisać

Pozdrawiam.
adampy
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 2 lis 2009, o 17:46
Płeć: Mężczyzna
Lokalizacja: Milanówek
Pomógł: 1 raz

C++, kąt i odległość między punktami- jak obliczyc?

Post autor: adampy »

Wiesz, pare rzeczy znalazłem :D... najpierw tata wytłumaczył mi pare funkcji trygonometrycznych i powiedział jak policzyć ten kąt(masz rację, nie od punktu :D, miałem na myśli tak jak by (0,0) "patrzył" na podany punkt ;) )ale nie umiałem go zamienić na c++... mówił o tangensach(to było dawno, temu :P ), a jak widać był to arcus tangens, i to jeszcze (chyba) specyficzny dla programistów... poszukałem trochę w necie, ale wszystko pogięte, jakieś niezrozumiałe... a jak bym takie coś zobaczył, hmm... było by łatwiej... To był chyba jedyny powód żeby to napisać :D

a liczenie takiego kąta, np. do tower defence'a, czy strzelanki z kompem, albo coś w stylu "shopliftera"(kolesie patrzą, nie?)

Pozdro.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C++, kąt i odległość między punktami- jak obliczyc?

Post autor: soku11 »

Nadal źle to napisałeś, bo gdybyś liczył od prostej, po której punkt (0,0) 'patrzy' na punkt docelowy, to zawsze byś miał kąt 0. Jest tak jak ja napisałem wcześniej.
Przeciwdziedziną normalnego atan jest przedział \(\displaystyle{ \left[-\frac{\pi}{2};\frac{\pi}{2}\right]}\). Funkcja atan2 więc rzeczywiście jest specyficzna. Co prawda, zapewne mieści się w niej wywołanie atan'a zwykłego i ewentualna korekcja znaków. Ale nie ma się co zagłębiać.
Co do użycia, to powiedzmy, że się przyda. Niemniej jednak nie trzeba liczyć od jakichś innych prostych niż dodatnia półprosta OX.


Tak w ogóle, to jak coś piszesz staraj się chociaż używać kropek i dużych liter. Bo się tego nie da czytać :)
Pozdrawiam.
adampy
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 2 lis 2009, o 17:46
Płeć: Mężczyzna
Lokalizacja: Milanówek
Pomógł: 1 raz

C++, kąt i odległość między punktami- jak obliczyc?

Post autor: adampy »

Znowu masz racje, muszę chyba czytać, co pisze bo jak to przeczytałem, to pierwsza myśl: "Kto to pisał?!" Ale ten punkt (0,0) jak patrzy na np. (2,2) to kąt (zakładając za 0 "górę"...) wynosi 45 stopni... Albo ja w ogóle mam jakieś inne poglądy, czy coś... Wielkie dzięki (może nie za pomoc, ale hmm... komentarz), i
3m się.
ODPOWIEDZ