Cekol 0 Napisano 18 Sierpień 2009 Hejo Szukam i szukam, i nie mogę w necie znaleść odpowiednika gmowego point_direction w c++... Bardzo go potrzebuję i proszę was o napisanie takiego algorytmu :) Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Tymon 4 Napisano 18 Sierpień 2009 https://forum.gmclan.org/index.php?showtopi...point_direction Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Cekol 0 Napisano 18 Sierpień 2009 Nom, ok... Wyskrobałem coś takiego: export real point_direction(real xstart,real ystart,real xend,real yend) { real xdist = xend - xstart; real ydist = yend - ystart; real ang = atan2(xdist,ydist)/ M_PI; return 180-ang*180;//180 - ang; } Lecz dostaje wynik 0 przy pozycji (0,-1) a nie jak jest w gm (1,0) ;< dalej proszę o pomoc :) Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Jaklub 2 Napisano 18 Sierpień 2009 najgłupsze rozwiązanie z możliwych, ale odejmij od wyniku 90. Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Cekol 0 Napisano 18 Sierpień 2009 Dobra, działa. Mam takie coś export real point_direction(real xstart,real ystart,real xend,real yend) { real xdist = xend - xstart; real ydist = yend - ystart; real ang = atan2(xdist,ydist)/ M_PI; ang = 270+ang*180; if (ang>360) ang=ang-360; return ang; } I działa idealnie, tak jak w gm. Lecz da się to zrobić, bez tego głupiego if? Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Hanjuso 0 Napisano 18 Sierpień 2009 if (ang>360) ang=ang-360; return ang%360; Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Konrad-GM 56 Napisano 19 Sierpień 2009 Operator % (Resztę z dzielenia) można tylko używać na liczbach całkowitych ( np. int ) ;) Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Crackkk-GM 0 Napisano 19 Sierpień 2009 #include <math.h> double degtorad( double deg ) { return( deg * 3.14/180 ); } double point_direction( double x1, double y1, double x2, double y2 ) { return( atan2( y2-y1, x2-x1 ) / 3.14 * 180 ); } double lengthdir_x( double len, double dir ) { return cos(degtorad(dir))*len; } double lengthdir_y( double len, double dir ) { return sin(degtorad(dir))*len; } Masz jeszcze lengthdiry Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Konrad-GM 56 Napisano 19 Sierpień 2009 Btw. #define degtorad( deg ) deg * PI/180 #define radtodeg( rad ) rad * 180/PI Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach
Pieter 0 Napisano 20 Sierpień 2009 double point_direction( double x1, double y1, double x2, double y2 ) { return( atan2( y2-y1, x2-x1 ) / PI * 180 ); } jak już coś :P Udostępnij tego posta Odnośnik do posta Udostępnij na innych stronach