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!

[2D Mathe] Stehe aufm Schlauch

Forum für alles rund ums Coden und web.design - HTML, XHTML, XML, CSS, PHP, ASP, Zugriffsrechten, Mods uvm.
Antworten
Flp
Slash
Slash
Beiträge: 631
Registriert: Sep 2000
Wohnort: Backnang(BW)
Kontaktdaten:

[2D Mathe] Stehe aufm Schlauch

Beitrag von Flp »

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
xxx
Bones
Bones
Beiträge: 3074
Registriert: Aug 2003
Kontaktdaten:

Beitrag von xxx »

Aufmalen ist immer gut:
Bild

Bild

Für die Suche: Satz des Pythagoras, Cosinus, Ankathete, Hypothenuse
Bild
Flp
Slash
Slash
Beiträge: 631
Registriert: Sep 2000
Wohnort: Backnang(BW)
Kontaktdaten:

Beitrag von Flp »

Bild

xxx, vielen dank erstmal für deine unterstützung. ich habe die sache fast verstanden und werde das morgen (wenn ich wieder fit bin) in quellcode umsetzen. ich werde meine überlegungen dann nochmal hier posten.
Nomschta
Rampage
Rampage
Beiträge: 14303
Registriert: Jun 2001
Steam: TomHonks

Beitrag von Nomschta »

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.
BildBild Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill? :ugly:
Flp
Slash
Slash
Beiträge: 631
Registriert: Sep 2000
Wohnort: Backnang(BW)
Kontaktdaten:

Beitrag von Flp »

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
Bild

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.
Nomschta
Rampage
Rampage
Beiträge: 14303
Registriert: Jun 2001
Steam: TomHonks

Beitrag von Nomschta »

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:

Bild

Bild

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.

Bild
BildBild Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill? :ugly:
Flp
Slash
Slash
Beiträge: 631
Registriert: Sep 2000
Wohnort: Backnang(BW)
Kontaktdaten:

Beitrag von Flp »

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.
Bild
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);
    }
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.
Nomschta
Rampage
Rampage
Beiträge: 14303
Registriert: Jun 2001
Steam: TomHonks

Beitrag von Nomschta »

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.

Bild
BildBild Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill? :ugly:
Flp
Slash
Slash
Beiträge: 631
Registriert: Sep 2000
Wohnort: Backnang(BW)
Kontaktdaten:

Beitrag von Flp »

thx :D
Antworten