Seite 1 von 1
Abstand ermitteln
Verfasst: Donnerstag 20. November 2014, 23:06
von Humpanickel
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.
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 00:04
von HarteWare
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.
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 10:02
von darktrym
Was glaubst du warum unser Chefkryptograph sich diesen Problems noch nicht angenommen hat?
Wenn x und y irgendwelche Koordinaten sind, dann bekommt man diese sicher auch aus dem TK-Canvas Objekt.
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 10:47
von BlackJack
@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.
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 11:34
von Humpanickel
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.
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 12:06
von Sirius3
@Humpanickel: Du weißt, was ein Indexzugriff auf eine Liste ist?
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 16:17
von Humpanickel
Nein tut mir Leid, das weiß ich leider nicht :/
Re: Abstand ermitteln
Verfasst: Samstag 22. November 2014, 16:46
von BlackJack
@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.
Re: Abstand ermitteln
Verfasst: Sonntag 23. November 2014, 17:13
von Michael Schneider
Hallo Humpanickel,
Humpanickel hat geschrieben:
Ich stelle mal mein Beispiel dar:
id_Objekt1=canvas.create_polygon (100, 200)
id_Objekt2=canvas.create_polygon (50, 150)
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?
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)
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:
Code: Alles auswählen
>>> l = [100, 200, 50, 150]
>>> l_pairs = zip(l[::2], l[1::2])
>>> print l_pairs
[(100, 200), (50, 150)]
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
Re: Abstand ermitteln
Verfasst: Sonntag 23. November 2014, 23:30
von Humpanickel
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.
Re: Abstand ermitteln
Verfasst: Montag 24. November 2014, 07:03
von Sirius3
@Humpanickel: Wenn etwas variabel ist, speichert man es in einer Variablen. Aber wie BlackJack schon angesprochen hat, wird das in jedem Grundlagentutorial durchgenommen.
Re: Abstand ermitteln
Verfasst: Montag 24. November 2014, 08:15
von Humpanickel
Und wo kann ich ein solches Tutorial finden?
Re: Abstand ermitteln
Verfasst: Montag 24. November 2014, 08:24
von Malta
Im Thread
http://www.python-forum.de/viewtopic.php?f=9&t=32715 findest du das Projekt SimpleImageRuler
Von 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
https://github.com/luggels/simpleImageRuler
Re: Abstand ermitteln
Verfasst: Montag 24. November 2014, 09:19
von Sirius3
@Humpanickel: mit was lernst Du Python?