Hallo Leute
Ich habe vor den Abstand zwischen 2 Objekten zu ermitteln. Ich habe mich dabei der analytischen Geometrie bedient und stelle mir die Koordinaten als Vektoren vor. Dann bilde ich den Betrag mit der Formel: (x²+y²)^0.5
Ich stelle mal mein Beispiel dar:
id_Objekt1=canvas.create_polygon (100, 200)
id_Objekt2=canvas.create_polygon (50, 150)
Um den Vektor der Strecke zu erhalten müsste ich x1-x2 und y1-y2 berechnen. Jedoch weiß ich nicht, wie ich die einzelnen Koordinaten herausnehmen kann, ohne sie manuell einzugeben. Das ähnliche Problem würde sich dann auch darauf beim einsetzen in die obige Formel ergeben.
Ich wäre euch wirklich sehr dankbar, wenn ihr mir helfen könntet.
Abstand ermitteln
Kannst du vielleicht ein minimales Beispiel geben? Ich persönlich habe noch nicht ganz verstanden, was das Problem ist.
Da du aber mit Vektoren arbeiten willst, würde ich mal sagen schau dir numpy an.
Da du aber mit Vektoren arbeiten willst, würde ich mal sagen schau dir numpy an.
@Humpanickel: Die Koordinaten zu einer ID bekommt man vom `Canvas`-Exemplar mit der `coords()`-Methode. Falls das die Frage ist. Stellt sich allerdings die Frage ob man diese Information tatsächlich nur im `Canvas` gespeichert haben sollte.
Beim Beispiel verwirrt mich das Polygone mit nur einem Punkt nicht besonders sinnvoll sind. Da wird nichts angezeigt.
Beim Beispiel verwirrt mich das Polygone mit nur einem Punkt nicht besonders sinnvoll sind. Da wird nichts angezeigt.
-
- User
- Beiträge: 7
- Registriert: Donnerstag 13. November 2014, 09:08
Sollte es einen Befehl geben, der den Abstand zwischen 2 Objekten automatisch berechnet, dann würde mir den Rest ersparen. ^^
Da ich diesen Befehl nicht kenne, wollte ich die Koordinaten herausnehmen und mit ihnen weiterrechnen. ich weiß, dass ich mit coords() die Koordinaten ablesen kann, jedoch brauche ich für die Rechnung immer nur eine Koordinate. Also meine Frage besteht darin, wie ich z.B. nur den X-Wert angezeigt bekomme, ohne den Y-Wert, sodass ich nur mit der X-Koordinate weiterrechnen kann.
Das mit dem Polygon kann von mir aus auch durch was anderes wie circle ersetzt werden.
Da ich diesen Befehl nicht kenne, wollte ich die Koordinaten herausnehmen und mit ihnen weiterrechnen. ich weiß, dass ich mit coords() die Koordinaten ablesen kann, jedoch brauche ich für die Rechnung immer nur eine Koordinate. Also meine Frage besteht darin, wie ich z.B. nur den X-Wert angezeigt bekomme, ohne den Y-Wert, sodass ich nur mit der X-Koordinate weiterrechnen kann.
Das mit dem Polygon kann von mir aus auch durch was anderes wie circle ersetzt werden.
-
- User
- Beiträge: 7
- Registriert: Donnerstag 13. November 2014, 09:08
Nein tut mir Leid, das weiß ich leider nicht :/
@Humpanickel: Dann solltest Du mal ein Grundlagentutorial durcharbeiten. Listen sind ein grundlegender Datentyp in Python, mit dem man umgehen können sollte, bevor man kompliziertere Sachen wie GUIs angeht.
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
Hallo Humpanickel,
BlackJack spielte darauf an, dass die Polygonfiguren bzw. ihre Daten irgendwo her kommen (z.B. eine Liste von Ausgangskoordinaten) und dass es unnötiger Aufwand wäre, erst Polygonfiguren mit den Daten zu zeichnen - zumal ein Punkt pro Polygonfigur gar nichts bringt, wie BJ schon sagte, oder siehst Du damit etwas auf dem Schirm?
Wahrscheinlich meintest Du sowas?:
In der Ausgangsliste findest Du bereits die x-y-Paare.
Wenn es Dir darum geht, eine Liste in Paare zu trennen, kannst Du die Standardfunktion zip mit (Listen-)Slices verwenden:
Auch hier kann ich BlackJack nur zustimmen, dass Du Dich als erstes zu Listen, aber auch Dictionaries und Tupeln belesen solltest.
Das eigentliche Problem an Deiner Aufgabenstellung ist die Frage, welche Punkte Du miteinander vergleichst. Stell Dir die Eckpunkte eines gleichseitigen Dreiecks mit Seitenlänge 10 cm vor. Zwei der Punkte sind verbunden. Dann ist der Abstand des einzelnen Punktes von den anderen Punkten 10 cm, aber der Abstand zur Strecke als geometrischem Objekt ist kürzer. Solche Abstände im freien Raum genau zu berechnen, ist deutlich aufwändiger als den Pythagoras zu bemühen.
Grüße
sky
wofür soll dieses Beispiel repräsentativ sein? Für Daten, die Du so in dieser Form hast, oder wolltest Du damit einfach ausdrücken, dass Du zwei Punkte hast, deren Abstand Du berechnen möchtest?Humpanickel hat geschrieben: Ich stelle mal mein Beispiel dar:
id_Objekt1=canvas.create_polygon (100, 200)
id_Objekt2=canvas.create_polygon (50, 150)
BlackJack spielte darauf an, dass die Polygonfiguren bzw. ihre Daten irgendwo her kommen (z.B. eine Liste von Ausgangskoordinaten) und dass es unnötiger Aufwand wäre, erst Polygonfiguren mit den Daten zu zeichnen - zumal ein Punkt pro Polygonfigur gar nichts bringt, wie BJ schon sagte, oder siehst Du damit etwas auf dem Schirm?
Wahrscheinlich meintest Du sowas?:
Code: Alles auswählen
l = [(100, 200), (50, 150)]
id_Objekt0 = c.create_line(l)
Wenn es Dir darum geht, eine Liste in Paare zu trennen, kannst Du die Standardfunktion zip mit (Listen-)Slices verwenden:
Code: Alles auswählen
>>> l = [100, 200, 50, 150]
>>> l_pairs = zip(l[::2], l[1::2])
>>> print l_pairs
[(100, 200), (50, 150)]
Das eigentliche Problem an Deiner Aufgabenstellung ist die Frage, welche Punkte Du miteinander vergleichst. Stell Dir die Eckpunkte eines gleichseitigen Dreiecks mit Seitenlänge 10 cm vor. Zwei der Punkte sind verbunden. Dann ist der Abstand des einzelnen Punktes von den anderen Punkten 10 cm, aber der Abstand zur Strecke als geometrischem Objekt ist kürzer. Solche Abstände im freien Raum genau zu berechnen, ist deutlich aufwändiger als den Pythagoras zu bemühen.
Grüße
sky
Diese Nachricht zersört sich in 5 Sekunden selbst ...
-
- User
- Beiträge: 7
- Registriert: Donnerstag 13. November 2014, 09:08
Das Beispiel war vielleicht nicht ganz so repräsentativ. Um mich nur auf mein Problem zu beschränken stelle ich es etwas anders dar:
Ich habe nämlich einen Punkt, den ich per Mausklick auf einer Fläche setzen kann. Die Koordinaten kann ich bereits mit coords() auslesen. Da der Punkt aber variabel ist sind die Koordinaten natürlich nicht einheitlich. Angenommen ich setze den Punkt beliebig und der Befehl coords() zeigt mir an, dass der Punkt bei (100,250) liegt. Nun will ich einfach mit der X-Koordinate 100 weiterrechnen(oder einfach mit print ausgeben). Meine Frage ist also, wie ich diese X-Koordinate verwenden kann, da sie ja variabel ist.
Ich habe nämlich einen Punkt, den ich per Mausklick auf einer Fläche setzen kann. Die Koordinaten kann ich bereits mit coords() auslesen. Da der Punkt aber variabel ist sind die Koordinaten natürlich nicht einheitlich. Angenommen ich setze den Punkt beliebig und der Befehl coords() zeigt mir an, dass der Punkt bei (100,250) liegt. Nun will ich einfach mit der X-Koordinate 100 weiterrechnen(oder einfach mit print ausgeben). Meine Frage ist also, wie ich diese X-Koordinate verwenden kann, da sie ja variabel ist.
-
- User
- Beiträge: 7
- Registriert: Donnerstag 13. November 2014, 09:08
Und wo kann ich ein solches Tutorial finden?
Im Thread http://www.python-forum.de/viewtopic.php?f=9&t=32715 findest du das Projekt SimpleImageRuler
https://github.com/luggels/simpleImageRulerVon einem technischen Gegenstand wird ein Foto gemacht und als Größenvergleich rückt der Fotograf einen Maßstab ins Bild oder vielleicht einen Zollstock. Was, wenn ich jetzt wirklich was auf dem Foto nachmessen möchte?
Dafür benutzt man SimpleImageRuler (SIR):
Fotos einladen
eine bekannte Strecke abgreifen, um das System zu kalibrieren
beliebig viele Stecken messen, als Einzelstrecken (line-mode) oder als Pfad (path-mode)
bei Ein- und Auszoomen die Kalibrierung beibehalten