Dreieck im Koordinatensystem

Neue Frage »

DarkCrusade Auf diesen Beitrag antworten »
Dreieck im Koordinatensystem
Ich weiß, dass mich jetzt jeder schon bei meinem ersten Beitrag dafür schlagen möchte, dass ich nicht einfach die Suchfunktion verwende, mein Problem ist leider aber viel zu speziell für Schulthemen.

In meiner Freizeit schreibe ich Programme für ein Spiel namens Soldat (www.soldat.pl). Die Sprache hierfür ist Pascal, also ziemlich einfach. Nun muss ich gerade eine Funktion schreiben, die mir einen Wahrheitswert zurückgibt, ob sich ein Punkt P(X|Y) in einem bestimmten Bereich um M(X2|Y2) befindet.

Für den Fall, dass die Fläche, die "true" zurückgeben würde, ein Quadrat ist, ist die Berechnung ja kein Problem mit Sinus und Cosinus, da ein Winkel 45° und einer 90° ist. Außerdem ist c auch gegeben als Maximal-Reichweite.

Das Problem ist, dass ich die X und Y Koordinaten der einzelnen Punkte benötige, also A,B,C und D. Ich habe bereits das Internet durchforstet, aber nichts brauchbares gefunden.

Die Funktion hat folgende Parameter:

Function InRange(Middle_X,Middle_Y,Player_X,Player_Y,Max_Range:Single; Typ:Byte): Boolean;

Middle_X/Y: Mittelpunkt der geometrischen Form
Player_X/Y: Punkt, der überprüft werden soll
Max_Range: das ist die Seite c
Typ: Es gibt 3 Typen von geometrischen Formen die verwendbar sein sollen.

"Single" ist einfach die Einheit für das Koordinatensystem im Spiel, wobei 14 Single ~1m sind.
"Boolean" ist ein Wahrheitswert. Ist der Punkt in Reichweite, wird "true" zurückgegeben, wenn nicht, dann wird "false" zurückgegeben.

Nun zu meiner Frage: Wie komme ich auf die X- und Y-Werte, die ich benötige?
Airblader Auf diesen Beitrag antworten »

Sorry - was genau willst du nun erreichen verwirrt
In der Überschrift sprichst du von einem Dreieck, in deinem Posting von einem Quadrat, vermuten würde ich jetzt aber, du willst es für beliebige Rechtecke (?)

Und so ein grundlegender Typ: Viele Sprachen, wie z.B. Delphi (und bei Pascal sollten da alle Glocken läuten), haben bereits eigene Prozeduren, die überprüfen können, ob ein Punkt in einem Rechteck liegt (auch wenn mir der genaue Name gerade nicht mehr einfällt).

air
DarkCrusade Auf diesen Beitrag antworten »

Du kannst dir das folgendermaßen vorstellen:

Ich habe einen Mittelpunkt, über den entweder ein Kreis mit dem Radius Max_Range, ein Quadrat oder ein Dreieck gelegt wird. Um die Seiten des Quadrates zu berechnen habe ich es in 4 Dreiecke aufgeteilt, die alle gleich groß sind.

Das Problem ist, dass das Spiel nicht das normale Pascal verwendet, sondern einen sog. ScriptCore, der nur eine Auswahl an Funktionen beinhaltet.. hier sind übrigens alle Funktionen, die im ScriptCore enthalten sind: http://www.enesce.com/help

Ich nehme aber einfach mal an, dass du von der Funktion IN sprichst. Diese kann ich aber leider nur für Quadrate verwenden ...
Airblader Auf diesen Beitrag antworten »

Aber das Problem ist doch einfach zu behandeln.

Beim Kreis liegt genau dann im Kreis (oder auf dem Rand) mit Mittelpunkt und Radius r, wenn



Edit: Die Formel fürs Quadrat habe ich nochmal entfernt, da sie nur für einen Spezialfall funktioniert.

Und für das Dreieck benötigst du jetzt erstmal eine sinnvolle Angabe der Lage des Dreiecks. Das heißt du musst angeben, was hier sinnvollerweise der "Mittelpunkt" ist oder eben die drei Eckpunkte. Was davon hast du gegeben?

air
DarkCrusade Auf diesen Beitrag antworten »

Bei dem Dreieck gibt es folgende Angaben:

-Mittelpunkt M(X|Y)
-alle Winkel von Linien vom Mittelpunkt aus haben 60°
-Länge der Linien vom Mittelpunkt aus
-Dreieck ist gleichseitig
Airblader Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
-Mittelpunkt M(X|Y)


Okay. Das macht zusammen mit der Information

Zitat:
-Dreieck ist gleichseitig


dann auch Sinn.
Weniger Sinn machen die Angaben

Zitat:
-alle Winkel von Linien vom Mittelpunkt aus haben 60°
-Länge der Linien vom Mittelpunkt aus


Linien haben keine Winkel und welche Linien du meinst solltest du vielleicht auch etwas besser sagen, denn von einem Punkt ausgehend kann ich unendlich viele Linien zeichnen.

air
 
 
DarkCrusade Auf diesen Beitrag antworten »

Verbesserung:
-Der Winkel zwischen den 3 Linien, die von M ausgehen, die bis A,B und C gehen, ist 60°
-Die Länge der Linien, die vom Mittelpunkt M ausgehen, ist = Max_Range
Airblader Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
Für Leute, die es ganz genau haben wollen:


Ja, ich möchte es genau haben. Weißt du auch warum? Weil es anders nicht möglich wäre, dir bei deinem Problem zu helfen ... auf Ratespielchen habe ich nämlich keine Lust.

Die letzte Angabe war damit aber überflüssig, denn diese Eigenschaft ergibt sich sofort daraus, dass das Dreieck gleichseitig ist.
Zum Rekapitulieren:

Gegeben ist also der Mittelpunkt eines gleichseitigen Dreiecks und die Höhen im Dreieck. Korrekt?

Schau dir mal diesen Beitrag an.

air
DarkCrusade Auf diesen Beitrag antworten »

Da versteht der arme Schüler aus der Klasse 11 leider nicht mehr viel..

Und das mit dem Besserwisser habe ich verbessert, das ist mir auch klar geworden.
Airblader Auf diesen Beitrag antworten »

Achso - okay, das ist natürlich blöd.
Die Methode ist aber zu schön, um sie jetzt ungenutzt zu lassen.

Eine ganz kurze Einführung in Vektoren, auf einem nicht ganz korrekten, aber dafür anschaulichem Niveau:

Wenn du zwei Punkte hast, dann kannst du zwischen ihnen einen "Pfeil" zeichnen (siehe Skizze in dem Beitrag). Dieser Pfeil gibt eine Verschiebung an ("wie muss ich Punkt A verschieben, um auf Punkt B zu kommen") und wird Vektor genannt.
Zu beachten ist dabei: Der Vektor ist nicht ortsfest, d.h. er liegt "überall im Raum". Der spezielle Pfeil zwischen Punkt A und B ist lediglich ein Vetreter davon (ich hoffe, es ist klar, was ich meine).

Zwei Vektoren kann man nun addieren, indem man einfach den Anfang des einen Vektors an das Ende des ersten anlegt und dann ist der Ergebnisvektor einfach der Pfeil vom Anfang des ersten bis zur Spitze des letzten Vektor (siehe hier).

Natürlich kann man den Vektor auch mit einer reellen Zahl multiplizieren. Dies bewirkt eine Änderung der Länge, die Richtung bleibt aber gleich (ist auch sehr anschaulich: Multiplizierst du mit '2', so wird er doppelt so lang etc.). Auch das findest du auf der wikipedia nochmal ausführlicher.

Warum die Methode im zitierten Post nun funktioniert sieht man, wenn man ein bisschen darüber nachdenkt und einfach mal ein paar Beispiele durchgeht. Die Erklärung ist ein Stück weit ja auch dort.

Alternativ kannst du auch einfach die drei Geraden durch die Punktepaare AB, AC und BC aufstellen und überprüfen, dass dein Punkt jeweils richtig dazu liegt. Dies ist aber umständlich und wird durch diese Vektormethode viel eleganter und kürzer gelöst (ist aber im Prinzip die selbe Methode).

Edit: Achja - keine Scheu vor diesem neuen Stückchen Mathematik. Nächstes Jahr musst du das sowieso machen! Augenzwinkern

Edit #2: Rauslaufen wird es übrigens auf das Lösen eines linearen Gleichungssystems. Momentan zweifle ich, ob du das wirklich verstehst ... aber warten wir mal ab, was du dazu sagst.

air
DarkCrusade Auf diesen Beitrag antworten »

Wie komme ich auf die Werte der Skalare? Und wozu muss ich überhaupt die Vektoren aufaddieren? Wie sieht das jetzt in der Praxis aus?

Einen Teil habe ich verstanden, anwenden könnte ich das aber noch nicht.. (ich habe einen Mathematik Leistungskurs gewählt, aber das nur nebenbei Hammer )

EDIT: Aber auch hierfür bräuchte ich doch die Koordinatenwerte der Ecken A,B und C des Dreiecks, oder?
Airblader Auf diesen Beitrag antworten »

Wenn wir x- und y-Koordinaten entsprechen indizieren, ist die Gleichung



ein lineares Gleichungssystem:




Dieses kannst du nach den Skalaren auflösen.
Was du berechnen musst (aus deinen Angaben heraus):

1) Die Koordinaten der Eckpunkte
2) , , und entspr. für y.
3) Die Skalare über das LGS

Zu Schritt 2) noch ein Hinweis: An diese Dinge kommt man extrem leicht. Als Beispiel für :



Dies ergibt sich daraus, dass für zwei Punkte A,B gilt , wobei die Ortsvektoren des entspr. Punktes bedeuten (der Ortsvektor ergibt sich einfach daraus, dass du die Koordinaten des Punktes als Vektor schreibst. Für P(0/1) ist der Ortsvektor also ).

air
DarkCrusade Auf diesen Beitrag antworten »

Da liegt eines meiner Probleme. Ich erinnere mich weder daran, wie ich die Koordinaten eines Dreiecks im Koordinatensystem ausrechnen kann, noch finde ich irgendwelche Erklärungen im Internet, die auf mein Problem zugeschnitten wären.

Ich kann C ausrechnen, was einfach daran liegt, dass C über M liegt ...
Airblader Auf diesen Beitrag antworten »

Es ist also sicher, dass die Strecke AB parallel zur x-Achse verläuft?

Dann schau' dir doch mal diese Skizze an und betrachte geschickte Teildreiecke. Warnung: Die Seitenlänge wird dort 'a' genannt .. ich nenne sie, um Verwirrungen auszuschließen, aber hier 's'.

Für das Folgende beachte: Die Seitenlänge im gleichschenkligen Dreieck ist

Für die linke untere Ecke (also A) ist der Ortsvektor z.B.



Wobei 'h' die Höhe bezeichnet (die du, wie du sagtest, ja gegeben hast), die im gleichseitigen Dreieck ja für alle drei Seiten gleich ist.
Das "Drittel" in der y-Komponente kommt daher, dass die Höhenstrecke vom Mittelpunkt im Verhältnis 1:2 geteilt wird.

air
DarkCrusade Auf diesen Beitrag antworten »

Wie ist das Verhältnis von Ru zu Ri? Bei mir ist nicht die Höhe gegeben, sondern Ru..
Airblader Auf diesen Beitrag antworten »

Wenn du aber nur diesen Teil gegeben hast, dann ist deine ursprüngliche Angabe mit den 60°-Winkeln etwas seltsam. Mal so als Tipp: Eine schöne Skizze hochzuladen wäre sehr, sehr vorteilhaft.

Das Verhältnis ist wie gesagt 2:1. Es ist also

air
riwe Auf diesen Beitrag antworten »

eine alternative möglichkeit wäre im bilderl dargestellt.
es genügt den winkel zu bestimmen,
was ja einfach ist Augenzwinkern
DarkCrusade Auf diesen Beitrag antworten »

Ich habe mal schnell eine Skizze in Paint angefertigt, ich hoffe, das klärt so einiges:

[attach]15482[/attach]

Bitte lade Bilder immer mit "Dateianhänge" hoch und vermeide externe Links in solchen Situationen.
Danke, Gualtiero


Jede der Linien vom roten Punkt aus soll gleich lang sein (was leider nicht realisierbar war mit Paint).

Das dargestellte Problem ist folgendes:
Ich möchte herausfinden, ob ein Punkt P (nicht dargestellt!) in einem geometrischen Objekt liegt oder außerhalb. Das ist nachhaltig wichtig für die Programmierung eines neuen Spielmoduses für ein Spiel namens Soldat (www.soldat.pl).
Angegeben sind die Koordinaten des Mittelpunkts (roter Punkt), die Länge der 3 Linien (blauer Punkt), der Winkel zwischen diesen Linien (je 60°), die Winkel Alpha, Beta und Gamma (auch je 60°) und wir wissen, dass alle Seiten gleich lang sind. Außerdem ist die Koordinate C = (X von M|Y von M + Länge der Linie(blau)). Gesucht sind die Koordinaten der Punkte A und B.
riwe Auf diesen Beitrag antworten »

soferne AB parallel zur x-achse ist, sonst ist´s auch kein problem, wenn du den entsprechenden neigungswinkel kennst Augenzwinkern

und es gilt
DarkCrusade Auf diesen Beitrag antworten »

AB wird immer parallel zur X-Achse sein, insofern kein Problem. Ich stehe grade ein wenig auf dem Schlauch.. mx soll die Steigung sein? und s die Seitenlänge? Weil gerade die habe ich nicht.. und was stellt Klein-A dar?
riwe Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
AB wird immer parallel zur X-Achse sein, insofern kein Problem. Ich stehe grade ein wenig auf dem Schlauch.. mx soll die Steigung sein? und s die Seitenlänge? Weil gerade die habe ich nicht.. und was stellt Klein-A dar?


deinen schlauch möchte ich auch nicht haben, da steht man ja immer drauf unglücklich

sind die koordinaten deines punktes M, also des schwerpunktes usw., ist das, was du maximum range nennst

ein bißerl was vom mathematischen hintergrund mußt du dir schon erwerben,
sonst wird´s ein (miserabler) kochkurs oder so Augenzwinkern
DarkCrusade Auf diesen Beitrag antworten »

Ach so meinst du das. Nein, ich war nur verwirrt, dass du das M klein geschrieben hast. Das Problem ist meine Mathe-Lehrerin, die so etwas selber nicht richtig kann, sei also bitte ein wenig nachsichtig Augenzwinkern
DarkCrusade Auf diesen Beitrag antworten »

Nun gut.. die Koordinaten habe ich nun alle ausgerechnet. Das mit den Vektoren konnte ich mir aber von deinen Erklärungen leider nicht erschließen, auch Wikipedia hat in dem Punkt versagt..

Ich muss jetzt die Vektoren für die einzelnen Strecken zwischen den Punkten errechnen (warum OAD statt ABC verwendet wird ist mir schleierhaft), wozu ich die Skalare benötige ist mir jedoch ein Rätsel.
Mit jeder Minute, die ich darüber nachdenke, wird es mir zwar klarer, aber wie das nun einmal so ist, kann man nicht einfach sich eine Formelsammlung vor die Nase halten und einfach vom Draufstarren alles verstehen - was ja auch der Grund ist, warum wir Lehrer haben - also brauche ich einfach jemanden, der mir die Zusammenhänge schlüssig darstellt.
DarkCrusade Auf diesen Beitrag antworten »

Mein Problem ist noch immer nicht gelöst.
Mein nunmehr Triple-Post tut mir leid.
riwe Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
Mein Problem ist noch immer nicht gelöst.
Mein nunmehr Triple-Post tut mir leid.


dann schreibe doch einmal her, was du bis jetzt berechnet hast unglücklich
DarkCrusade Auf diesen Beitrag antworten »

Wie ich bereits im zweiten der 3 Posts geschrieben habe, habe ich alle Koordinaten errechnet (A,B und C). Nun muss ich herausfinden, ob der Punkt P (auch bekannt) sich im Dreieck ABC befindet und das entzieht sich meinem Verständnis der Vektoren gänzlich.
riwe Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
Wie ich bereits im zweiten der 3 Posts geschrieben habe, habe ich alle Koordinaten errechnet (A,B und C). Nun muss ich herausfinden, ob der Punkt P (auch bekannt) sich im Dreieck ABC befindet und das entzieht sich meinem Verständnis der Vektoren gänzlich.


mir ist dein problem egal, aber warum verrätst du uns deine ergebnisse nicht verwirrt
vorher gibt´s von mir nix mehr unglücklich
DarkCrusade Auf diesen Beitrag antworten »

Es könnte helfen, nicht nur die letzten paar Posts zu lesen. Bitte lese den allerersten auch, denn dort habe ich erklärt, dass ich keine Schulaufgabe zu lösen versuche, sondern ein Problem in einem Programm zu lösen.
riwe Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
Es könnte helfen, nicht nur die letzten paar Posts zu lesen. Bitte lese den allerersten auch, denn dort habe ich erklärt, dass ich keine Schulaufgabe zu lösen versuche, sondern ein Problem in einem Programm zu lösen.


bist du dir eigentlich im klaren, wer da von wem was will verwirrt
Airblader Auf diesen Beitrag antworten »

@ CarlCrusdade

Ich empfehle dir, dass du den Thread nochmal anschaust.
Ich und riwe haben hier nun schon viel geleistet und viel geschrieben, während von dir kaum eigenständige Arbeit ersichtlich war. Das Höchste der Gefühle dabei war noch eine kleine Skizze.

Wie riwe sagte - einfach mal im Kopf behalten, wer hier etwas haben möchte. Da ist es nicht zuviel verlangt, wenn du einfach mal postest, was genau du bisher hast.

air
DarkCrusade Auf diesen Beitrag antworten »

Function InRange

Die Einrückungen werden nicht ganz korrekt dargestellt, da ich 2er-Tabs in meinen Programmen verwende, diese aber als 4er-Tabs dargestellt werden.

@Airblader: Meinen Namen zu parodieren, nur um eine Reaktion zu provozieren, halte ich für ausgesprochen schlecht. Wir können hier entweder in einer ruhigen und höflichen Form miteinander umgehen oder eben gar nicht.
Ich muss mich hier echt nicht von jemanden denunzieren lassen, nur um an Hilfe zu gelangen.

Eigenständige Arbeit war bisher nicht ersichtlich, da ich das Programm in der Jetzt-Form bis gerade nicht gepostet habe. Anders hätte ich euch das nicht zeigen können und bis ich dann einmal genug Informationen hatte hätte es euch auch nichts genützt (mal ganz davon abgesehen, dass der Code vielen höchstwarscheinlich unverständlich sein wird (selbst wenn sie Pascal kennen), denn die Sprache ist auf das Spiel zugeschnitten).

Und natürlich behalte ich im Kopf, wer hier etwas von wem haben möchte. Wer mir helfen möchte, darf das gerne tun, dafür bin ich dankbar. Wer nicht posten will, muss auch nicht. Ich kann hier niemanden dazu zwingen.

Desweiteren handelt es sich hier um ein klares Missverständnis. Ich habe von Riwe die Message bekommen, was ich denn schon ausgerechnet hätte, gerechnet habe ich aber überhaupt nicht. Deswegen habe ich ihm erklärt, dass schon im ersten Beitrag steht, dass ich an einem Programm und nicht an einer Schulaufgabe arbeite.

Schön und gut, dass ihr mir so viele Formeln an den Kopf geworfen habt, jedoch möchte ich darauf hinweisen, dass ich bereits erklärt habe, dass ich nicht alle Parameter korrekt verstanden habe. Nach diesen habe ich auch nachgefragt. Wenn mir dann komplette Dummheit vorgeworfen wird ist das einfach nur unfair, so ungern ich das Wort in den Mund nehme.


DC
Airblader Auf diesen Beitrag antworten »

Zitat:
Original von DarkCrusade
@Airblader: Meinen Namen zu parodieren,


Das sollte keine Parodie sein und auch nichts provozieren, es war schlicht und ergreifend die tiefe Müdigkeit, die aus mir sprach, da ich die ganze Nacht nicht geschlafen habe. Dennoch sorry Freude

Zitat:
jedoch möchte ich darauf hinweisen, dass ich bereits erklärt habe, dass ich nicht alle Parameter korrekt verstanden habe.


Und ich möchte darauf verweisen, dass du gesagt hast, dass du die Punkte bereits berechnet hast. Wir haben lediglich danach gefragt, einfach mal zu zeigen, was du bisher alles gemacht hast.
Hilfe ist nunmal keine einseitige Sache, sondern sie lebt von beiden Parteien. Wir helfen hier gerne und ich hoffe, du siehst, dass wir uns auch bereits viel Mühe gegeben haben. An einem gewissen Punkt muss aber auch vom Hilfe-Nehmenden mehr kommen als "Okay, Punkt 1 habe ich verstanden, Punkt 2 noch nicht" (schematisch). Natürlich bist du zu keiner Reaktion gezwungen - aber aus einer Unbereitwilligkeit ggü. solchen Fragen resultiert dann nicht selten aus das Zurückziehen der Helfer, die hier immerhin ihre Freizeit aufbringen - und das sollte man respektieren. Eine Aussage wie "Wer nicht will, der muss ja nicht" ist da in meinen Augen höchst respektlos.

Zitat:
Wenn mir dann komplette Dummheit vorgeworfen wird


Wo hast du denn das nun her?

air
AD Auf diesen Beitrag antworten »

Off-topic, und nur weil ich DarkCrusade nicht anders erreichen kann (wer weiß, ob es hier klappt), nochmal die Wiederholung:

Zitat:
@DarkCrusade

Es ist eine Frechheit, PNs mit Nachfragen zu versenden, aber den eigenen PN-Empfang nicht zu aktivieren. unglücklich

Leider bleibt mir nur ein Weg wie der hier, das kundzutun.
Airblader Auf diesen Beitrag antworten »

Um jetzt zum geposteten Quelltext zu kommen:

sin(60°) und cos(60°) solltest du vielleicht nicht unbedingt immer neu berechnen lassen. Diese haben ganz konkrete Werte (klick). Aber das nur am Rande.

Ansonsten haste du im case #3 jetzt einen Punkt unterhalb des Mittelpunktes, sowie zwei Punkte, die zwischen Mittelpunkt und unterstem Punkt liegen (auf der y-Koordinate) und jeweils noch etwas links bzw. rechts davon.

Möglicherweise bin ich noch etwas zu müde, aber wo genau soll das Dreieck nun liegen?

air
DarkCrusade Auf diesen Beitrag antworten »

@Arthur: In normalen Foren ist es so, dass die Starteinstellungen keine PNs blocken. Das das hier anders ist wusste ich nicht, trotzdem tut es mir leid. Ich hoffe, das wäre damit geklärt.

@Airblader: Guter Punkt. Ich werde Sinus und Cosinus ersetzen, das ist viel effizienter (man merkt, ich war auch müde, als ich das geschrieben habe smile ).

Der Punkt liegt nicht unter dem Mittelpunkt, sondern darüber. Warum das so ist kann ich dir bei bestem Willen nicht erklären (ist halt Soldat und kein Blatt Papier).

Das Dreieck wird allein über den Parameter MaxRange und über den Mittelpunkt berechnet, um es sehr einfach zu halten. Deshalb habe ich auch genau diese Art Dreieck ausgewählt und nichts spezielleres.
Zu deiner Frage: Das Dreieck liegt einfach dort, wo der Mittelpunkt ist (Parameter MiddleX und MiddleY).

DC
Airblader Auf diesen Beitrag antworten »

Das Problem, das ich noch habe, ist, dass du aber nun vier Punkte hast (den Middle-X/Y-Punkt und X[0]/Y[0] bis X[2]/Y[2]), wobei der angebliche "Mittelpunkt" halt leider außerhalb des Dreiecks liegt. Und das scheint mir etwas arg merkwürdig zu sein.

air
DarkCrusade Auf diesen Beitrag antworten »

Ich habe das Ganze einmal durchgerechnet und habe das Selbe herausgefunden ... ich melde mich später diesbezüglich noch einmal.
Neue Frage »
Antworten »



Verwandte Themen

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