Hallo erstmal,
ihr könnt ruhig sagen "FU, überleg halt selbst". Aber
Ich steh grad aufm Schlauch und mein Hirn weigert sich auf die Lösung zu kommen.
Wenn mir jemand helfen will, gern in Pseudo-Code oder durch Tipps zum Lösungs weg. Problem sollte sich anhand der Aufgabenstellung selbst erklären.
Vielen dank!
---
aufgabe
berechnung von zielkoordninaten anhand quell koordinaten, relativem winkel und entfernung
gegeben
-meine ausrichtung in Grad (0 bis 359)[INDENT]0 = Nord
90 = Ost
180 = Süd
270 = West[/INDENT]
-meine position als x,y koordinaten
-entfernung zum ziel
-winkeldelta zum ziel, relativ zu meiner ausrichtung (-180 bis 180)[INDENT]0 ist meine richtung[/INDENT]
gesucht
-zielposition als x,y koordinaten
Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
[2D Mathe] Stehe aufm Schlauch
-
- Slash
- Beiträge: 631
- Registriert: Sep 2000
- Wohnort: Backnang(BW)
- Kontaktdaten:
-
- Bones
- Beiträge: 3074
- Registriert: Aug 2003
- Kontaktdaten:
-
- Slash
- Beiträge: 631
- Registriert: Sep 2000
- Wohnort: Backnang(BW)
- Kontaktdaten:
-
- Rampage
- Beiträge: 14303
- Registriert: Jun 2001
- Steam: TomHonks
wenn du irgendeine mathebibliothek verwendest, achte darauf dass dein winkel im richtigen format vorliegt!
weiss grad nich ob die üblichen c-math.h funktionen bogenmaß oder grad nehmen.
weiss grad nich ob die üblichen c-math.h funktionen bogenmaß oder grad nehmen.
Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill?
-
- Slash
- Beiträge: 631
- Registriert: Sep 2000
- Wohnort: Backnang(BW)
- Kontaktdaten:
danke, daran denke ich. Ich schreibe in Java und die sin und cos Funktionen der Math-Klasse wollen Bogenmaß. Die Math Klasse hat aber auch eine toRadians Methode.
xxx, ich bin mir nich sicher ob du das problem korrekt verstanden hast. da ich nicht das von dir angegebene x und y suche sondern tatsächlich die absoluten koordinaten (x1,y1) edith sagt ich hab deine lösung einfach nicht gerafft weil ich zu hohl bin. Außerdem könnte es in der Formel vielleicht helfen, dass man durch die Innenwinkelsumme eigtl. alle Winkel gegebene hat?
nochmal zum Problem
in diesem bild ist der blaue punkt die quelle. davon ist gegeben
- die position (Xsrc,Ysrc)
- w2: der winkel y-achse zur blickrichtung (dünne schwarze linie) (0 <= w2 < 360)
- länger der blauen linie (distanz zum gegner)
- w1: der winkel blickrichtung zur gegner position (-180 < w1 < 180)
gesucht ist die position des roten punktes (Xdest,Ydest)
derzeit arbeit ich an einer lösung auf die ich durch aufmalen gekommen bin.
1. Xdest=0,Ydest=distance
2. diesen punkt drehe ich um (w2+w1)
3. dann addiere ich Xsrc zu Xdest und Ysrc zu Ydest.
done. wenn man die schritte auf papier nachvollzieht klappt es meistens aber ich bin mir nicht sicher ob ich irgendwas übersehe.
xxx, ich bin mir nich sicher ob du das problem korrekt verstanden hast. da ich nicht das von dir angegebene x und y suche sondern tatsächlich die absoluten koordinaten (x1,y1) edith sagt ich hab deine lösung einfach nicht gerafft weil ich zu hohl bin. Außerdem könnte es in der Formel vielleicht helfen, dass man durch die Innenwinkelsumme eigtl. alle Winkel gegebene hat?
nochmal zum Problem
in diesem bild ist der blaue punkt die quelle. davon ist gegeben
- die position (Xsrc,Ysrc)
- w2: der winkel y-achse zur blickrichtung (dünne schwarze linie) (0 <= w2 < 360)
- länger der blauen linie (distanz zum gegner)
- w1: der winkel blickrichtung zur gegner position (-180 < w1 < 180)
gesucht ist die position des roten punktes (Xdest,Ydest)
derzeit arbeit ich an einer lösung auf die ich durch aufmalen gekommen bin.
1. Xdest=0,Ydest=distance
2. diesen punkt drehe ich um (w2+w1)
3. dann addiere ich Xsrc zu Xdest und Ysrc zu Ydest.
done. wenn man die schritte auf papier nachvollzieht klappt es meistens aber ich bin mir nicht sicher ob ich irgendwas übersehe.
-
- Rampage
- Beiträge: 14303
- Registriert: Jun 2001
- Steam: TomHonks
hab mich grad mal drangesetzt, vielleicht kann ichs anschaulicher erklären als xxx:
1. du hast die zwei winkel, w1 und w2. ob du winkel w2 vom blauen punkt oder vom nullpunkt aus misst, macht keinen unterschied.
2. du kennst die blaue linie (mathematisch "hypotenuse"),
3. du willst wissen: die zwei anderen linien des dreiecks. die haben die länge y_source-y_destination und x_source-x_destination.
an den winkel im dreieck kommst du, wie im bild, über die zwei anderen winkel. es müssen 90° nicht 180° sein.
also ist dein hilfswinkel x: w_x = 90-w_1-w_2
an die untere/obere linie kommst du wie folgt:
untere linie = x_source-x_destination = cos(w_x)*blaue linie
linke linie = y_source-y_destination = sin(w_x)*blaue line
wenn du nun alles verwurstet, ist
x_destination = -(cos(90-w_1-w_2)*blaue linie - x_source)
y_destination = -(sin(90-w_1-w_2)*blaue linie - y_source)
bin mir nicht sicher, insbesondere was die grenzen der winkel angeht. aber grundsätzlich sollte das so passen.
wenn der algorithmus noch perfomanter werden soll, kann man noch die 90° rausrechnen, bin ich aber grad zu faul.
ach ja, vergiss den schmarrn mit der drehung, das ist viel zu kompliziert. vor allem bekommt man da ohne ende numerische fehler rein.
1. du hast die zwei winkel, w1 und w2. ob du winkel w2 vom blauen punkt oder vom nullpunkt aus misst, macht keinen unterschied.
2. du kennst die blaue linie (mathematisch "hypotenuse"),
3. du willst wissen: die zwei anderen linien des dreiecks. die haben die länge y_source-y_destination und x_source-x_destination.
an den winkel im dreieck kommst du, wie im bild, über die zwei anderen winkel. es müssen 90° nicht 180° sein.
also ist dein hilfswinkel x: w_x = 90-w_1-w_2
an die untere/obere linie kommst du wie folgt:
untere linie = x_source-x_destination = cos(w_x)*blaue linie
linke linie = y_source-y_destination = sin(w_x)*blaue line
wenn du nun alles verwurstet, ist
x_destination = -(cos(90-w_1-w_2)*blaue linie - x_source)
y_destination = -(sin(90-w_1-w_2)*blaue linie - y_source)
bin mir nicht sicher, insbesondere was die grenzen der winkel angeht. aber grundsätzlich sollte das so passen.
wenn der algorithmus noch perfomanter werden soll, kann man noch die 90° rausrechnen, bin ich aber grad zu faul.
ach ja, vergiss den schmarrn mit der drehung, das ist viel zu kompliziert. vor allem bekommt man da ohne ende numerische fehler rein.
Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill?
-
- Slash
- Beiträge: 631
- Registriert: Sep 2000
- Wohnort: Backnang(BW)
- Kontaktdaten:
so klitschko hat gewonnen und ich kam mal zum umsetzen.
was du für mich umgesetzt hast, ist das enemytracking für meinen robocode bot.
pink kreuz ist das berechnete
durch einen scan ist dort halt die winkeldifferenz und die distanz sowie die eigenen daten gegeben.
deine berechnung funktioniert in allen quadranten brauchte jedoch noch etwas vorzeichen tweaking.
ich habe die sache an sich verstanden, nur nich ganz gecheckt wo die 90 beim brechnen des hilfs winkels herkommt.
vielen dank auch an xxx, ich freue mich dass ihr euch die zeit genommen habt mir zu helfen.
was du für mich umgesetzt hast, ist das enemytracking für meinen robocode bot.
pink kreuz ist das berechnete
durch einen scan ist dort halt die winkeldifferenz und die distanz sowie die eigenen daten gegeben.
deine berechnung funktioniert in allen quadranten brauchte jedoch noch etwas vorzeichen tweaking.
Code: Alles auswählen
public Point getPosition() {
// x_destination = -(cos(90-w_1-w_2)*blaue linie - x_source)
// y_destination = -(sin(90-w_1-w_2)*blaue linie - y_source)
double radAng = Math.toRadians(90 - roboHeading - bearing);
double x = Math.cos(radAng) * distance + roboX;
double y = Math.sin(radAng) * distance + roboY;
System.out.println(x + " " + y);
return new Point(x, y);
}
vielen dank auch an xxx, ich freue mich dass ihr euch die zeit genommen habt mir zu helfen.
-
- Rampage
- Beiträge: 14303
- Registriert: Jun 2001
- Steam: TomHonks
man sucht nach winkel 1:
4 + 1 = 90° -> 1 = 90° - 4
ausserdem ist
4 = 3 - 2
somit:
1 = 90° - ( 3 - 2 )
ich glaube man könnte auch 4 direkt nehmen, aber wenns funzt passt das ja.
4 + 1 = 90° -> 1 = 90° - 4
ausserdem ist
4 = 3 - 2
somit:
1 = 90° - ( 3 - 2 )
ich glaube man könnte auch 4 direkt nehmen, aber wenns funzt passt das ja.
Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill?
-
- Slash
- Beiträge: 631
- Registriert: Sep 2000
- Wohnort: Backnang(BW)
- Kontaktdaten: