Winkel berechnen aus Strecke und Senkrechte

Neue Frage »

dodo2998 Auf diesen Beitrag antworten »
Winkel berechnen aus Strecke und Senkrechte
Vorab:
Ich brauch die Lösung für ein Spiel, das ich zurzeit programmiere(verdammte Grafik)
Ich habe ein kartesisches Koordinatensystem.
In dem ist eine Liste von Punkten,
und dann hat der Spieler auch eine Koordinate.
Damit ich berechnen kann wo auf dem Bildschirm der Stein erscheint,
muss ich den Winkel zwischen der Strecke zwischen Spieler und dem derzeitigem Stein und der Senkrechten im Koordinatensystem berechnen.
Ich hab schon Formeln gefunden, aber am Ende hat es immer nicht funktioniert, und die Steine von hinten sind vorne mit zu sehen und hinten ist nix.
Also muss die Formel 360° abdecken.
Damit nicht gefragt wird: der Winkel im Uhrzeigersinn bitte(also mathematisch negativ)

Danke im Voraus für die Hilfe,

dodo2998

Meine Ideen für die Lösung:
ich habe keine Ahnung, programmieren kann ich seit der 2. Klasse mit Python und Pygame, aber bin jetzt erst 8. Klasse. Da haben wir nicht mal sinus & cosinus schon gehabt...
dodo2998 Auf diesen Beitrag antworten »
RE: Winkel berechnen aus Strecke und Senkrechte
Ich habe mir den Workshop mit Matrizen durchgelesen, und den mit Vektoren.
Also liegt mein Lösungsansatz hier: Vektoren. Vektoren werden ja durch x Werte bei einer xdimensionalen Darstellung definiert, aber da sie Richtungen darstellen könnte man sie ja durch Winkel und Länge auch eindeutig definieren(x-1 Winkel und die Länge bei xdimensionaler Darstellung). Länge habe ich, die geht über ein rechtwinkliges Dreieck. Und es ist 2dimensional, also benötige ich nur einen Winkel(mir reicht schon ein Lösungsansatz für eine 360°-abdeckende Formel mit mathematisch positiven(gegen den Uhrzeigersinn) Winkel von der Horizontalen Augenzwinkern )
alterHund Auf diesen Beitrag antworten »

da wirst Du
( python )
math.atan2(xDifferenz,yDifferenz)
brauchen,
dann bekomst Du einen Winkel im Bogenmaß, wenn Du's in ° brauchst berechnen

Wenn der Spieler links von Stein ist ist die xDifferenz positiv,
wenn der Stein über dem Spieler ist ist die yDifferenz positiv
dodo2998 Auf diesen Beitrag antworten »

Danke!
In Grad(ja brauch ich) kann ich aber auch mit math.degrees() umrechnen.

Nur damit ichs richtig verstehe: Ist die Formel so richtig?
math.degrees(math.atan2(stonex-playerx,stoney-playery))
(die Sache mit den Vektoren scheint kein schlechter Ansatz gewesen zu sein)

Aber eine Frage habe ich noch: von wo geht der Winkel los und ist er math. positiv oder negativ?

Und es interessiert mich, ob atan2 für vektoren gedacht ist...
alterHund Auf diesen Beitrag antworten »

momemnt mal
sehe gerade es ist math.atan2( yDifferenz, xDifferenz)
ist
richtig wenn "oben" positive yRichtung, "rechts" poxitive xRichtung
alterHund Auf diesen Beitrag antworten »

los geht der Winkel "rechts in der Waagrechten", eben mathematisch, im Gegenuhrzeigersinn
 
 
alterHund Auf diesen Beitrag antworten »

Bild
dodo2998 Auf diesen Beitrag antworten »

Zitat:
Original von alterHund
momemnt mal
sehe gerade es ist math.atan2( yDifferenz, xDifferenz)
ist
richtig wenn "oben" positive yRichtung, "rechts" poxitive xRichtung

Was ist "oben"/"rechts" von was???? ich schätze mal du meinst die Steine im Vergleich zum Spieler und nicht anders herum...
alterHund Auf diesen Beitrag antworten »

ja, Stein rechts vom Spieler --> Positive xDifferenz
dodo2998 Auf diesen Beitrag antworten »

Danke Gott
also...

math.degrees(math.atan2(stoney-playery,stonex-playerx))

die beiden Argumente(x und y) einfach nur vertauscht verwirrt

Danke für die Hilfe!!
Jetzt wird mein Spiel endlich fertig!!! Freude
alterHund Auf diesen Beitrag antworten »

ja. Viel Erfolg und Spaß! smile
alterHund Auf diesen Beitrag antworten »

N.S.: es könnte natürlich sein, daß auf dem Bildschirm die Y-Werte von oben nach unten steigen -
dann müßtest Du für die yDifferenz das Vorzeichen umkehren.
dodo2998 Auf diesen Beitrag antworten »

Mein Spiel ist fertig!!
Für das Spiel braucht man die neueste Version von pygame.

Leider hat mein Programm mit dem ich .zip's erstelle ein Problem mit Musik...

Deshalb braucht man in dem Ordner, in dem man die beiden Zips entpackt auch zwei Musikdateien: eine music.mp3 und eine sea.mp3 .
Das Spiel ist ein wenig komisch bei den Zielen(Inseln), auf die man fahren muss: manchmal werden Steine davor angezeigt die eigentlich dahinter sind.
Mit der Maus dreht man das Schiff, mit Pfeiltaste hoch gibt man Gas, und mit Pfeiltaste runter bremst man.

Das ist übrigens ein Spiel, dass ich innerhalb eines Tages programmiert hat(heute habe ich nur noch ein paar Bugfixes gemacht)

Ich könnte ja vielleicht alterHund mit in die Credits schreiben...

Jeder darf das Spiel so verwenden wie er möchte, schreibt sich aber bitte selbst mit in die Credits, wenn er was verändert hat. Ich übernehme keine Haftung(bin sowieso minderjährig) für jegliche veränderte Inhalte. Es ist kein Copyright drauf, falls es euch interessiert.

Wichtig: Das ist die 1.0!
Ich werde später noch Möwenkacke und andere Inhalte hinzufügen.
Ab der 2.0 gibts nen Highscore.
sucht einfach nach "John Maynard Spiel dodo2998" und ihr könnt vielleicht meine Webseite finden("vielleicht", weil sie noch nicht online ist)
alterHund Auf diesen Beitrag antworten »

Hallo dodo2998

da Du ja wohl willst daß "das Puplikum" das Spiel spielt, solltest Du, für Leute, die nicht mit Python
vertraut sind,
beschreiben wie man aus den beiden ZipFiles ein lauffähiges Proramm macht und wie man es startet.

Vielleicht möchtest Du auch Kommentare zum Code - davon bekämst Du vermutlich mehr,
wenn Du Dich an das Informatik Forum wendest.

Ich habe kurz die "JohnMaynadrd.pyw" überflogen und
in
Zeile 376
... sin( ... + 90) wäre einfacher cos( ... )
Zeile 377
...cos(... + 90) wäre einfacher -sin( ... )

Alle Achtung für soeine Eintagesarbeit!
dodo2998 Auf diesen Beitrag antworten »

Danke!

Also wie man es lauffähig macht: Beide Archive im selben Ordner entpacken, und schon ist es installiert. Um das Spiel zu starten einfach "JohnMaynard" doppelklicken.
Wenn es nicht funktioniert:
Hast du Python installiert? Wenn nicht installiere dir die neueste Version, mit der pygame etwas anfangen kann.
Hast du Pygame installiert? Wenn nicht installiere dir die neueste Version.

Python kannst du unter www#python#org downloaden,
pygame kannst du unter www#pygame .org downloaden, und unter pygame#org bekommst du auch unter der Downloadseite die Information, welche die neueste unterstützte Python-Version ist.
Neue Versionen gibt es unter www#dodo2998#bplaced#com .

Ich habe übrigens einen Bug entdeckt. An den Inseln sieht man ihn gut Augenzwinkern .
Die sort() Methode funktioniert nicht so herum, wie ich gedacht habe, sprich: Objekte die weiter vorne sind, werden als letztes gerendert und von den hinten überdeckt. Es wird wohl bald eine 1. 1 folgen müssen...

# steht für einen Punkt
alterHund Auf diesen Beitrag antworten »

ok, ich nutze Linux, pygame kannte meine Version,
hab ich auf Festplatte installiert;
die zip's auf /dev/shm/130731105306-37902
entpackt,
produziert kein icon,
ersatzweiser Startversuch

[email protected]:~> cd /dev/shm
[email protected]:/dev/shm> cd 130731104529-26352/
[email protected]:/dev/shm/130731104529-26352> python JohnMaynard.pyw
Traceback (most recent call last):
File "JohnMaynard.pyw", line 172, in <module>
ico = pygame.image.load("icon.png")
pygame.error: Couldn't open icon.png
[email protected]:/dev/shm/130731104529-26352>

also mißglückt.
dodo2998 Auf diesen Beitrag antworten »

Hallo!

Ich dachte das Projekt tatsächlich komplett verloren zu haben, habe es dann aber bei der Suche in ewigen Backups nach einem *anderen* Projekt an welches ich nostalgische Erinnerungen habe (ein Webserver & CMS in diesem Webserver mit sehr... Fragwürdiger Architektur) doch wiedergefunden!

Ich hatte damals tatsächlich auch nach diesem Forumsthread gesucht, weil ich wusste dass ich diesem atan2 zu verdanken hatte; den Thread aber nicht gefunden. Doch ein Freund von mir dem ich dann das Projekt gezeigt habe & die Geschichte erzählt habe hatte offensichtlich bessere Suchbegriffe in der Tasche ^^

Insbesondere ist dieses Projekt für mich interessant weil es zu einer Anekdote hinsichtlich meiner damaligen Fähigkeiten geworden ist - denn ich habe eine perspektivische Verzerrung eingebaut die allerdings durch das Rendern mithilfe von Winkeln schon implizit dabei war, was dazu geführt hat dass wenn man sich umdreht die Steine in der Ferne auseinandergehen, und nicht zusammen. Wobei ich jetzt, wo ich dieses Projekt wiedergefunden habe, keine gute Stelle gefunden habe um diesen Effekt wieder zu sehen, und ich kann auch tatsächlich keinen großen Unterschied sehen wenn ich diesen "Korrekturterm" entferne. Der größte Fehler (neben... Ulkigen Korrekturtermen für x *und* y) war wohl allerdings das Rendern auf ein großes Bild bei dem die x-Koordinaten für Winkel stehen, da dies immer ein verzerrtes aussehendes Bild liefert, da man nur in den seltensten Fällen auf einem Monitor spielen wird der einen Teil eines Kreises mit dem Kopf als Mittelpunkt abdeckt.

Wie dem auch sei, ich dachte mir ich würde diesen Uralt-Thread nur kurz mit diesem Update wiederbeleben und kurz die nötigen Änderungen um das Spiel sinnvoll spielen zu können (weil ich - da ich nun seit Jahren auch nur unter Linux unterwegs bin - den selben Fehler bekommen habe):

1. Die Zeile
screen = pygame.display.set_mode((640, 500))
(wo auch immer ich auf diese Auflösung gekommen bin...) muss mit
screen = pygame.display.set_mode((640, 500), pygame.FULLSCREEN)
ersetzt werden. Dies ist evtl. nicht dringend nötig, aber zumindest bei mir hat sonst rechts ein Stückchen Bild gefehlt wodurch es aussehen würde als ob das Boot nach rechts driftet. Fullscreen scheint das Problem zu beheben.
2. Die PNG-Dateien müssen alle umbenannt werden damit die Dateiendung in Kleinbuchstaben ist - Windows ist eben Groß- und Kleinschreibung im Dateisystem egal, Linux (und MacOS) nicht (wobei man natürlich auch Dateisysteme verwenden / konfigurieren kann so dass es auch unter diesen Systemen so ist).

Zum Ende der Prüfungsphase dieses Semesters werde ich denke ich noch mal durch den Quellcode durchgehen und eine kleine Autopsie vornehmen, bin echt interessiert daran was sich seit damals in meinem Programmierstil verändert hat - und noch interessanter, was gleich geblieben ist. Bis auf das offensichtliche (schlechte Variablennamen, kein Whitespace außer wo er syntaktisch nötig ist, und mir war offensichtlich das DRY-Prinzip noch nicht bekannt)

Ich bedanke mich noch einmal für die Hilfe, Geduld & die sehr schönen Erinnerungen die ich von dem Projekt und diesem Thread hatte!

Dodo2998 (auch wenn das tatsächlich nicht mehr mein primärer Nickname ist)
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »