RazzorFlame |
» 2011-12-29 20:03:52 Bodajze w kursie easykodera było coś podobnego. Aaa "sposób na samochodzik". Tam było jak wyliczyć kąty...
EDIT: A poruszenie się razem z myszką chyba umiesz zrobić ( miejmy taką nadzieje :) ) |
|
radmack Temat założony przez niniejszego użytkownika |
» 2011-12-30 15:26:42 short int cwiartka;
if(( mouse_x < ludek_x ) &&( mouse_y < ludek_y ) ) { textout_ex( bufor, font, "Myszka jest na pierwszej cwiartce", 2, 2, makecol( 0, 0, 0 ), - 1 ); cwiartka = 1; }
if(( mouse_x >= ludek_x ) &&( mouse_y < ludek_y ) ) { textout_ex( bufor, font, "Myszka jest na drugiej cwiartce", 2, 2, makecol( 0, 0, 0 ), - 1 ); cwiartka = 2; }
if(( mouse_x >= ludek_x ) &&( mouse_y >= ludek_y ) ) { textout_ex( bufor, font, "Myszka jest na trzeciej cwiartce", 2, 2, makecol( 0, 0, 0 ), - 1 ); cwiartka = 3; }
if(( mouse_x < ludek_x ) &&( mouse_y >= ludek_y ) ) { textout_ex( bufor, font, "Myszka jest na czwartej cwiartce", 2, 2, makecol( 0, 0, 0 ), - 1 ); cwiartka = 4; }
int vertical; int horizontal; float kat;
switch( cwiartka ) { case 1: vertical =( ludek_y - mouse_y ); horizontal =( ludek_x - mouse_x ); kat =( atan2( vertical, horizontal ); textprintf_ex( bufor, font, 10, 10, makecol( 0, 0, 0 ), - 1, "Kąt myszki do pionu = %d", kat ); break; case 2: vertical =( ludek_y - mouse_y ); horizontal =( mouse_x - ludek_x ); kat = atan2( horizontal, vertical ); textprintf_ex( bufor, font, 10, 10, makecol( 0, 0, 0 ), - 1, "Kąt myszki do pionu = %d", kat ); break; case 3: vertical =( mouse_y - ludek_y ); horizontal =( mouse_x - ludek_x ); kat = atan2( horizontal, vertical ); textprintf_ex( bufor, font, 10, 10, makecol( 0, 0, 0 ), - 1, "Kąt myszki do pionu = %d", kat ); break; case 4: vertical =( mouse_y - ludek_y ); horizontal =( ludek_x - mouse_x ); kat = atan2( horizontal, vertical ); textprintf_ex( bufor, font, 10, 10, makecol( 0, 0, 0 ), - 1, "Kąt myszki do pionu = %d", kat ); break; } }
Mam coś takiego, ale przy wyświetlaniu wartości kąta wychodzą bezsensowne wartości. Wiem, że atan2 zwraca wartość w radianach i wiem też, że muszę uwzględnić to, na której ćwiartce liczę. Wie ktoś, co jest źle? |
|
ison |
» 2011-12-30 16:05:42 kat =( atan2( vertical, horizontal );
|
to Ci się kompiluje? textprintf_ex( bufor, font, 10, 10, makecol( 0, 0, 0 ), - 1, "Kąt myszki do pionu = %d", kat );
|
zmiennej typu float nie wypisuje się przez %d, wróć do podstaw ;) |
|
radmack Temat założony przez niniejszego użytkownika |
» 2011-12-30 17:52:29 To się poprawi ;], najwyżej zaokrągliło do int. A to z tym dodatkowym nawiasem to mój błąd, oczywiście nie skompilowałem tego.
A możesz mi powiedzieć czemu vertical ma jakieś kosmiczne wartości, np. 1071395593? Poza tym ta zmienna za każdym poruszeniem myszki o pixel powiększa się o kilkaset. Zmienna horizontal ma normalne wartości, w stylu 24, 63.
Jest jeszcze jeden problem. Gdy poruszę myszką w poziomie, zmienia się właśnie vertical, te zmienne są odwrócone. Z czego to wynika? |
|
ison |
» 2011-12-30 18:17:26 najwyżej zaokrągliło do int
|
nie, nie zaokrągliło, nie możesz floata wypisać przez %d bo wychodzą krzaczki |
|
radmack Temat założony przez niniejszego użytkownika |
» 2011-12-30 19:17:30 A i tu racja. Zmieniłem na %f we właściwych miejscach i jest dobrze. Ale trzecia ćwiartka tego układu jakoś szwankuje i oblicza kąty w odwrotną stronę. To znaczy gdy mam układ, to obliczanie kątów odbywa się azymutalnie od górnej części osi y, czyli od drugiej ćwiartki układu. Gdy przesunę mysz bardziej poziomo, kąt się zwiększa. Gdy jednak dojdę do 90* i wejdę myszką na trzecią ćwiartkę, to mam nagle 180* i przy ruszeniu myszką kąt zmienia się wręcz odwrotnie, do 90* przy granicy z czwartą ćwiartką. Mam nadzieję, że dobrze to opisałem. Jak nietrudno się domyślić, pożądany efekt jest wręcz odwrotny.
EDIT:
Zrobione. Wystarczyło zmienić kolejność argumentów w atan2 tylko w trzeciej ćwiartce ;]
|
|
1 « 2 » |