Probleme mit Koordinatencheck

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Probleme mit Koordinatencheck

Beitragvon htw7448 » Donnerstag 20. März 2008, 11:42

Ich versuche das ganze mal vereinfacht zu beschreiben. Ich habe als Vorgabe Objekte, welche aus beliebig vielen Punkten bestehen können und ich habe über eine Selektionsmenge beliebig viele Punkte ausgewählt.

Das Ziel besteht darin eine Prüfung zu implementieren die folgendes macht:

- die Punkte aus der Selektionsmenge sollen in x,y,z auf Übereinstimmung aller Punkte der Objekte überprüft werden

- bei Übereinstimmung in mind. 3 Punkten in x,y,z gilt das Objekt als identifiziert

meine Idee war zunächst die Selektionspunkte in x,y,z Form in eine Liste zu schreiben. Der Name der Punkte usw. spielt an dieser Stelle keine Rolle.

Code: Alles auswählen

sel_menge = [[p.get('x'), p.get('y'), p.get('z')] for p in sel_points]


die Objektmenge ist durch op beschrieben und die einzelnen Koordinaten bekommt man durch (op_x = X-Koordinaten aller A-Koordinaten der X-ten Punkte der Objektmenge):

Code: Alles auswählen

op_Ax= [opoint.get('indentified_point_%s'%A, X) for opoint in op]


wobei durch A - x,y,z angegeben werden und durch X der x-te Punkt der Objektes. Die Anzahl der Punkte eines Objektes ist zwar definiert aber nicht direkt abzufragen. Stattdessen wird 'None' zurückgeliefert wenn es der X-ten Punkt nicht gibt.

indentified_point_ ist ein ziemlich unpassendes Schlüsselwort, kann aber nicht geändert werden, also nicht davon irritieren lassen.

Und genau da liegt mein Problem ich habe keinen Plan wie ich a) einen effektiven Objektpunktgenerator baue und b) wie ich eine Möglichst lineare Prüfung hinbekomme da es sich um große Datenmengen handeln kann. Ich hoffe da blickt jemand durch.

MfG
BlackJack

Beitragvon BlackJack » Donnerstag 20. März 2008, 11:58

Ich war von Anfang an verunsichert und der Satz nach dem ersten Quelltext-Schnippsel hat mir den Rest gegeben.

Für a) würde ich trotzdem mal auf einen Iterator tippen, der alle `X` durchläuft und in ein `itertools.takewhile()` verpackt wird und bei b) tun's vielleicht erst einmal `set`-Operationen auf Punktemengen.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Donnerstag 20. März 2008, 13:36

Ich habe das in der Tat ein wenig wirr geschrieben. Was ich damit sagen wollte. Die Objektmenge op besteht aus vielen Objekten welche wiederum durch eine bestimmte Anzahl von Punkten beschrieben sind.

zum Beispiel für das Filtern des ersten Objektes, dessen erster Punkt nach x

Code: Alles auswählen

firstObjekt_firstPoint_x = op[0].get('identified_point_x', 0)


Ich komme mit den 2 Iteratoren in Verbindung mit der Abbruchbedingung nicht klar.

1. Iterator = über die Objekte
2. Iterator = über die einzelnen Objektpunkte
Abbruchbedingung = falls .get None zurückliefert gibt es keine weiteren Objektpunkte mehr
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Donnerstag 20. März 2008, 14:37

Ich komme bei der Sache hier nicht über den Berg. Ich fahre jetzt 1 Woche in den Urlaub. Danach werde ich ein itertools Tutorial schreiben.

Das was momentan an Doku vorhanden ist stinkt gewaltig zum Himmel.

MfG
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 20. März 2008, 14:41

Also ich finde die Doku in Sachen "itertools" eigentlich sehr gut. Vorallem durch den zu den Funktionen äquivalenten angegebenen Code ist die Funktionsweise sehr genau definiert.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Donnerstag 20. März 2008, 14:46

Beispiel takewhile:

takewhile( predicate, iterable)
Make an iterator that returns elements from the iterable as long as the predicate is true. Equivalent to:

def takewhile(predicate, iterable):
for x in iterable:
if predicate(x):
yield x
else:
break



ohne weiteres Beispiel in der Python Doku. Es reicht eben nicht etwas zu lesen, man braucht gute Beispiele um auf die eigentliche Logik hinter dem ganzen zu kommen. Auswendig gelernt habe ich noch nie gern!
BlackJack

Beitragvon BlackJack » Donnerstag 20. März 2008, 15:09

Hier geht's nicht um auswendig lernen, sondern darum den Code zu verstehen. Und der ist ja nun recht einfach gestrickt. Wenn einem die Beschreibung als Text, die einfache und sehr präzise Beschreibung als Quelltext und vielleicht noch der Python-Interpreter um seine Vermutungen zu überprüfen, dabei nicht reichen, dann fehlt irgendwo das abstrakte Denkvermögen um Programmieren zu können.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 20. März 2008, 15:26

EyDu hat geschrieben:Also ich finde die Doku in Sachen "itertools" eigentlich sehr gut. Vorallem durch den zu den Funktionen äquivalenten angegebenen Code ist die Funktionsweise sehr genau definiert.

Finde ich jetzt auch. Spätestens wenn du aus zufall mehrere der itertools selbst implementiert hast, wirst du feststellen, dass die Fälle in denen man itertools braucht in der Regel zu komplex sind um ein sinnvolles Beispiel zu machen, wo die Leute sich nicht am Kopf kratzen und überlegen, warum man es so kompliziert gemacht hat.

Aber ich will dich natürlich nicht abhalten ein solches Tutorial zu schreiben. Wenn es auf englisch und optimalerweise in reST geschrieben sein sollte, könnte man auch eine Aufnahme in die offizielle Dokumentation anstreben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder