Seite 1 von 1

Belastung einzelner Brückenelemente

Verfasst: Dienstag 26. Februar 2008, 13:35
von kame

Code: Alles auswählen

from visual import *
L = 5
hilfe1 = curve(pos=[(0,0,0), (0,1,0)], color=color.green)
hilfe2 = curve(pos=[(0,0,0), (0,0,1)], color=color.red)
teil01 = curve(pos=[(0,0,0), (L,0,0)])
teil02 = curve(pos=[(L,0,0), (2*L,0,0)])
teil03 = curve(pos=[(2*L,0,0), (3*L,0,0)])
teil04 = curve(pos=[(3*L,0,0), (4*L,0,0)])
teil05 = curve(pos=[(4*L,0,0), (5*L,0,0)])
teil10 = curve(pos=[(0,0,0), (cos(60*pi/180)*L,sin(60*pi/180)*L,0)])
teil11 = curve(pos=[(L,0,0), (cos(60*pi/180)*L+L,sin(60*pi/180)*L,0)])
teil12 = curve(pos=[(2*L,0,0), (cos(60*pi/180)*L+2*L,sin(60*pi/180)*L,0)])
teil13 = curve(pos=[(3*L,0,0), (cos(60*pi/180)*L+3*L,sin(60*pi/180)*L,0)])
teil14 = curve(pos=[(4*L,0,0), (cos(60*pi/180)*L+4*L,sin(60*pi/180)*L,0)])
teil20 = curve(pos=[(L,0,0), (cos(120*pi/180)*L+L,sin(120*pi/180)*L,0)])
teil21 = curve(pos=[(2*L,0,0), (cos(120*pi/180)*L+2*L,sin(120*pi/180)*L,0)])
teil22 = curve(pos=[(3*L,0,0), (cos(120*pi/180)*L+3*L,sin(120*pi/180)*L,0)])
teil23 = curve(pos=[(4*L,0,0), (cos(120*pi/180)*L+4*L,sin(120*pi/180)*L,0)])
teil24 = curve(pos=[(5*L,0,0), (cos(120*pi/180)*L+5*L,sin(120*pi/180)*L,0)])
teil30 = curve(pos=[(cos(60*pi/180)*L,sin(60*pi/180)*L,0), (cos(60*pi/180)*L+L,sin(60*pi/180)*L,0)])
teil31 = curve(pos=[(cos(60*pi/180)*L+L,sin(60*pi/180)*L,0), (cos(60*pi/180)*L+2*L,sin(60*pi/180)*L,0)])
teil32 = curve(pos=[(cos(60*pi/180)*L+2*L,sin(60*pi/180)*L,0), (cos(60*pi/180)*L+3*L,sin(60*pi/180)*L,0)])
teil33 = curve(pos=[(cos(60*pi/180)*L+3*L,sin(60*pi/180)*L,0), (cos(60*pi/180)*L+4*L,sin(60*pi/180)*L,0)])
Also das hab ich bisher. Nun will ich aber die Belastung der einzelnen Brückenteile sichtbar machen.
Habt ihr eine Idee?
Wie kann ich da die Gravitation mit reinbringen?

Verfasst: Dienstag 26. Februar 2008, 16:47
von CM
Meinst Du nicht, Du solltest erst einmal Python etwas besser verstehen, dann Dir Gedanken machen, wie man Brückenelemente am besten in einer Datenstruktur repräsentiert und dann an die Implementierung gehen? Damit lösen sich Deine Fragen fast von selbst, denn alles was Du bis jetzt hast ist eine abstrakte Seitendarstellung einer Brücke.

Gruß,
Christian

Verfasst: Dienstag 26. Februar 2008, 17:04
von kame
Ich weiss, dass ich noch viel vor mir habe. Aber ich lerne am besten mit Learning by Doing. Und darum dachte ich dass ich hier einen Tip bekommen könnte. Hmmm.

Verfasst: Dienstag 26. Februar 2008, 17:07
von CM
Sorry, ich wollte nicht arrogant klingen.
Dein Projekt ist durchaus nicht abwegig schwer, aber Du machst Dir das Leben bei jedem Projekt einfacher, wenn Du überlegst, wie Du Deine Daten organisieren willst bevor Du anfängst - und dazu gehört ein gutes Verständnis der Programmiersprache.
Mein Rat ist also durchaus ernstgemeint und kein riesiger Umweg: Tutorial durcharbeiten und erneut loslegen.

Gruß,
Christian

Verfasst: Dienstag 26. Februar 2008, 19:41
von kame
Hallo Christian

Ich kann dich durchaus verstehen. Kannst du mir vielleicht ein Tutorial zeigen was mir weiterhilft, weil ich ja schon eins durchgearbeitet habe.

Ich habe jetzt ne neue Idee.

Code: Alles auswählen

from visual import *

L = 5
timer = 0

# Punkte
P1=(-25,5,0) # fester Punkt
P2=(-15,5,0)
P3=(-5,5,0)
P4=(5,5,0)
P5=(15,5,0)
P6=(25,5,0)

# Bodenteile
boden1 = box(pos=(-30,0,0), size=(10,10,10), color=(0.4,0.7,0.4))
boden2 = box(pos=(30,0,0), size=(10,10,10), color=(0.4,0.7,0.4))

while(1):
    timer += 1
    print ("Timer: "), timer
    teil1 = curve(pos=[P1, (-15,5-timer,0)], radius=1)

Verfasst: Dienstag 26. Februar 2008, 19:53
von kame
Aber wie kann ich Punkt2 beim Fallen sagen, dass er immer den gleichen Abstand zu Punkt1 haben soll?

Verfasst: Mittwoch 27. Februar 2008, 02:21
von kame

Code: Alles auswählen

from visual import *

autoscale = 0
timer = 0

punktx = [-25,-15]
punkty = [5,5]
punktz = [0,0]

boden1 = box(pos=(-30,0,0), size=(10,10,10), color=(0.4,0.7,0.4))
boden2 = box(pos=(30,0,0), size=(10,10,10), color=(0.4,0.7,0.4))

while(1):
    rate(20)
    timer += 1    
    teil1 = curve(pos=[(punktx[0],punkty[0],punktz[0]), (punktx[1],punkty[1],punktz[1])], radius=1)
    abstandteil1 = sqrt(((punktx[1]-punktx[0])**2)+((punkty[1]-punkty[0])**2))
    print ("timer:"), timer, ("punktx[1]:"), punktx[1], ("punkty[1]:"), punkty[1], ("abstandteil1:"), abstandteil1
    punkty[1]=punkty[1]-timer*0.0001
    if abstandteil1 > 10:
        punktx[1] -= 0.1
    time.sleep(0.01)
    teil1.visible = 0
    
So ich mache schon Fortschritte. Schade, dass mir nicht doch jemand Tipps geben kann.

Verfasst: Donnerstag 28. Februar 2008, 11:44
von nkoehring
Visual? kenn ich garnicht... aber ein Sternchen-Import ist so oder so nicht so schoen! Schaff ihn mal lieber ab und mach stattdessen lieber sowas wie:

Code: Alles auswählen

import visual as vi
und dann eben statt box() vi.box() ;)

Verfasst: Freitag 29. Februar 2008, 09:09
von CM
kame hat geschrieben:So ich mache schon Fortschritte. Schade, dass mir nicht doch jemand Tipps geben kann.
Sorry, ich war ein paar Tage offline. Und wenn sonst niemand zum Problem Stellung nimmt, kann das versch. Ursachen haben. Das ist ein Forum und Du kannst nicht immer auf Antworten hoffen. Ist nun mal so.

Abgesehen von den Sternchen-Imports, die Du Dir wirklich überlegen solltest, ist Dein Problem immer noch die Datenstruktur. Du kannst zwar irgendwelche Gleichungen auf Graphikelemente ablassen, aber überlege mal, ob es nicht besser ist Physik auf Datenstrukturen anzuwenden, die tatsächlich Elemente einer Brücke repräsentieren. Das ist doch viel einfacher. Anschließend kannst Du dann den jeweils aktuellen Zustand der Brücke mit dem Visual-Modul (oder sonst irgendwie) abbilden.

Bzgl. Tutorial: Woher soll man wissen was / das Du was durchgelesen hast? Vielleicht bietet Dir [wiki=FAQ#WieFangeIchAlsEinsteigerAn]dies[/wiki] einen guten Einstieg. Und ein aktuelles Tutorial (Englisch) findet sich hier:
http://docs.python.org/tut/tut.html

Gruß,
Christian

Verfasst: Sonntag 2. März 2008, 20:41
von kame
Wenn ich das so mache:
import visual as vi
dann funktioniert mein Programm ploetzlich nicht mehr.
also z.B. auch die sqrt()-Funktion etc.
Da hab ich dann auch vi.sqrt() hingeschrieben. Trotzdem läuft das Programm nicht mehr. Er gibt nicht mal mehr ne Fehlermeldung raus. Hmmm.

Ich mache jetzt schon Fortschritte CM. Hab mir auch ein paar mehr Gedanken zu der Physik hinter den Dingen gemacht und versuche jetzt mit Vektoren zu arbeiten. Aber erst mal werde ich an einer einfacheren Sache weitermachen, eine sich bewegende Fahne.

Gruß kame

Verfasst: Sonntag 2. März 2008, 22:24
von Leonidas
kame hat geschrieben:Wenn ich das so mache:
import visual as vi
dann funktioniert mein Programm ploetzlich nicht mehr.
also z.B. auch die sqrt()-Funktion etc.
Da hab ich dann auch vi.sqrt() hingeschrieben. Trotzdem läuft das Programm nicht mehr. Er gibt nicht mal mehr ne Fehlermeldung raus. Hmmm.
Kann es sein, dass ``sqrt`` aus ``math`` und nicht aus ``visual`` kommt? Dann haben wir ja ein typisches Stern-Import Problem: viele Namen im Namespace aber keine Ahnung woher sie kommen. Das ist einer der Gründe, warum man sowas eben nicht machen sollte.

Verfasst: Sonntag 2. März 2008, 23:36
von kame
Hallo Leonidas

Wenn ich das Visual-Modul benutze, muss ich sqrt() nicht aus math holen.
Das hat auch ohne geklappt. Und wenn ich es auf die elegantere Art machen will, muss ich das math-modul extra noch holen. Hmmm. Ich seh gerade nicht den Vorteil. Also bisher bin ich mit einem Modul ausgekommen, und nun sollte ich mehrere verschiedene nehmen? Hat das was mit den Ladezeiten zu tun?

Verfasst: Sonntag 2. März 2008, 23:55
von Leonidas
kame hat geschrieben:Wenn ich das Visual-Modul benutze, muss ich sqrt() nicht aus math holen.
Wenn ``sqrt`` nicht aus ``visual`` kam (weil es nicht als ``visual.sqrt`` verfügbar war) und du es nicht aus ``math`` genommen hast - wo sollte es sonst herkommen.
kame hat geschrieben:Hat das was mit den Ladezeiten zu tun?
Wenn du mir sagst wie lange es dauert, bei dir ``math`` zu importieren, wäre ich schon dran interessiert :)

Verfasst: Montag 3. März 2008, 00:02
von BlackJack
Wenn durch den Sternchenimport ein `sqrt()` im aktuellen Namensraum landet, dann muss das auch im Modul sein.

Verfasst: Montag 3. März 2008, 09:02
von CM
BlackJack hat geschrieben:Wenn durch den Sternchenimport ein `sqrt()` im aktuellen Namensraum landet, dann muss das auch im Modul sein.
In der aktuellen Version von visual steht im __init__.py ein

Code: Alles auswählen

from math import *
Toll, nicht? Und kein __all__ wird definiert.
kame hat geschrieben:Also bisher bin ich mit einem Modul ausgekommen, und nun sollte ich mehrere verschiedene nehmen? Hat das was mit den Ladezeiten zu tun?
Nein, das ist nicht schneller oder langsamer, sondern übersichtlicher. Du mußt ggf. ein paar Zeilen mehr Code schreiben, aber Du und andere wissen anschließend was woher kommt.

Gruß,
Christian