in Schleifendurchlauf Koordinaten ändern

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.
Antworten
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

Hallo alle miteinander,

ich bräuchte mal wieder ein bisschen Hilfe. Im Groben geht es wie hier darum, dass ich einen Punkt im Raum habe und von diesem Punkt weitere Punkte auf einer Geraden berechnen möchte.
Nur mit dem Unterschied, dass nun nur 1 Punkt bekannt ist und die Richtung (Anstieg), in welche der nächste Punkt verschoben werden soll.

Hier mal eine kleine Skizze, die verdeutlichen soll, was ich meine:
Bild

Man hat den Punkt1 von diesem ist der Anstieg bekannt. Des Weiteren weiß ich, in welchem Abstand der nächste Zwischenpunkt sein soll.
Nun werden in 2 extra Methoden die jeweilige Länge von der Ankathete und der Gegenkathete berechnet. Diese Werte sollen nun auf die X- bzw. die Y-Werte addiert (ggf. subtrahiert) werden und das ganze soll n-mal passieren.

Hier mal eine Art Pseudo-Code

Code: Alles auswählen

def zwischenpunkte():
    """
    Hier sollen die Zwischenpunkte berechnet werden
    """
    fahrt = 2650 / 500 # 2650  = stelllt den max. Abstand dar, 500 = ist der Abstand zwischen den einzelnen Punkten
    print fahrt, "fahrten"# Ergebnis
    hoehe = 264 # Länge der Ankathete
    laenge = 424 # Länge der Gegenkathete
    punkt1 = (2016, 1986) # Koordinaten des 1. Punktes

    spur = 500 # Abstand zu zwischenpunkten
    liste1 = [] # in diese Liste soll gespeichert werden
    while fahrt > 0:
        punkt1[0] = punkt1[0] + hoehe # hoehe ist in Skizze senkrechter strich
        punkt1[1] = punkt1[1] - laenge # laenge ist in Skizze waagerechter Strich
        werte = (punkt1[0], punkt1[1])
        liste1.extend(werte)
        fahrt = fahrt -1
    return liste1
Mir ist klar, dass die While-schleife nicht wirklich funktioniert, aber das ist eigentlich genau dass, was bemacht werden soll.
In jeden Durchgang auf den aktuellen x-Wert um die hoehe. Ebenso der y-Wert wird in jedem Durchlauf um laenge reduziert.
Abschließend sollen die jeweiligen Koordinatenpaare in einem Tupel zusammengefasst werden und in einer Liste gespeichert.

Hat vielleicht jemand eine Idee, wie man das eleganter machen kann bzw. überhaupt realisieren?

Ziel ist es dann das gleiche mit einer 2. Liste zu machen und diese dann beide zusammen zu führen. Das funktioniert schon, dank der tatkräftigen Unterstützung in dem oben angegebenen Thread.
Mir fehlt jetzt nur noch die Erstellung der Liste.

Vielen Dank schon mal für eure Hilfe

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

Suchst du so etwas:

Code: Alles auswählen

def zwischenpunkte(): 
    """ 
    Hier sollen die Zwischenpunkte berechnet werden 
    """ 
    fahrt = 2650 / 500 # 2650  = stelllt den max. Abstand dar, 500 = ist der Abstand zwischen den einzelnen Punkten 
    print fahrt, "fahrten"# Ergebnis 
    hoehe = 264 # Länge der Ankathete 
    laenge = 424 # Länge der Gegenkathete 
    punkt1 = (2016, 1986) # Koordinaten des 1. Punktes 

    spur = 500 # Abstand zu zwischenpunkten 
    liste1 = [] # in diese Liste soll gespeichert werden
    x, y = punkt1
    for i in range(fahrt):
        x += hoehe # hoehe ist in Skizze senkrechter strich 
        y -= laenge # laenge ist in Skizze waagerechter Strich 
        liste1.extend((x,y)) 
    return liste1

"liste1" und "punkt1" könnte man auch noch etwas aussagekräftigere Namen geben.
Zuletzt geändert von EyDu am Dienstag 15. Juli 2008, 16:02, insgesamt 1-mal geändert.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Ganz schnell und nicht schön ;)
.... aber vielleicht reicht die Idee

Code: Alles auswählen

In [55]: punkte = [punkt1]

In [56]: for i in xrange(fahrt):
   ....:     punkte.append((punkte[i][0] + hoehe, punkte[i][1] - laenge))
   ....:
   ....:

In [57]: punkte
Out[57]:
[(2016, 1986),
 (2280, 1562),
 (2544, 1138),
 (2808, 714),
 (3072, 290),
 (3336, -134)]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Oder (ungetestet):

Code: Alles auswählen

[(x+i*hoehe, y-i*laenge) for i in range(1, fahrt+1)][::-1]
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

WOW das ging ja schnell mit den Antworten.

Hab grad mal die 3 Sachen ausprobiert und die Lösungen von Zap und die erste von EyDu gefallen mir sehr gut.

Ich danke euch für eure Hinweise.
Antworten