Bewegung auf Koordinaten in 10° bzw. 20° ...
-
zwutz schrieb:
http://de.wikipedia.org/wiki/Sinus
sollte reichen, um den Rest zu berechnen

vielen dank, das hat mein prob größtenteils gelöst.
Das einzige übrig gebliebene prob ist: Wie heißt die Funktion für cos bzw. sin?
-
cos bzw. sin in <cmath>
-
thx
-
Wobei die mit radians und nicht degrees arbeiten.
-
ist das ein problem?
-
Du musst deine Grad erst in Bogenmaß umwandeln

const double pi = 3.1415926535897932384626433832795; inline double deg_to_rad(double d) { return (d/360)*2*pi; }Bevor du Deine Winkel an die std::sin oder die anderen trigonometrischen Funktionen in C++ übergibst, musst du sie damit einfach umwandeln.
//Beispiel für 45° double x = std::cos(deg_to_rad(45));Allerdings wäre es sehr ratsam, etwas mit dem ganzen zu warten.
Nachdem man das alles in der Schule durchgenommen hat, fällt es einem viel leichter
Ansonsten ist auch ein Tafelwerk wie dieses sehr sehr hilfreich:
http://www.amazon.de/Das-große-Tafelwerk-interaktiv-Bundesländer/dp/3464571440/ref=pd_bbs_sr_1?ie=UTF8&s=gateway&qid=1201271723&sr=8-1(Link bitte kopieren und in den Browser einfügen, Forum hat Probleme mit Umlauten)
-
Warum nicht return (d/180.0)*pi; ?
-
The-Kenny schrieb:
const double pi = 3.1415926535897932384626433832795;besser ist:
const double pi = std::acos(-1.0); // erfordert #include <cmath>das ist erstens immer richtig und zweitens hat es genau die maximale Genauigkeit, die vom System zur Verfügung gestellt wird.
Fellhuhn schrieb:
Warum nicht return (d/180.0)*pi; ?
warum nicht
return d * (pi/180);zum einen sollte der Compiler oder spätestens das RunTime-System aus (pi/180) gleich eine Konstante machen, so dass dies nicht jedesmal neu berechnet werden muss und zum anderen verbleibt eine Multiplikation (d*..)statt einer Division (d/180..) die immer schneller ist.
Yazoo schrieb:
ich möchte den Benutzer den Kurs in ° angeben lassen(auf 10° gerundet), also 10°,20°, usw., wobei Norden 0° ist.
Verräts Du uns noch, wo dieser Winkel herkommt - ist er das Resultat einer Berechnung oder eine Eingabe?
Ach - und welche Typen haben die X- und Y-Werte Deiner Koordinate? In Deinem ersten Posting scheinen das ints zu sein, jetzt wären aber doubles angebracht.
Gruß
Werner
-
also, ich habe einiges geändert, das prob ist gelöst, aber ich beantworte die fragen trotzdem gerne:
X un Y sind nun double, der Winkel wird vom User eingegeben
-
meine Move Funktion sieht nun so aus:
void ship::Move(int i) // i ist die entfernung { double x = itsKoord.GetX(); double y = itsKoord.GetY(); x += std::sin(deg_to_rad(itsRichtung)) * i; // itsRichtung speichert die Richtung in degrees y += std::cos(deg_to_rad(itsRichtung)) * i; itsKoord.SetAll(x, y); }schon getestet, funktioniert einwandfrei.