Hi,
ich hab schon wieder n Problem:
Ich hab in vPython in einer Klasse (nenne wir sie Kreis) einen Frame (sagen wir einfach aus 3 boxes). Jetzt erstelle ich in der nächsten Klasse (nennen wir sie Kreise) 3 Objekte der Klasse "Kreis". Wie kann ich jetzt diese 9 Objekte gruppieren, sodass sie sich drehen können wie 1 Objekt?
Vielen Danke, mfg Mo
Frame aus Frames
Am besten kein Beispiel, sondern einfach mein Code
Ich versuche das "High Energy" nachzubauen. Der Rotor dreht sich, die 6-armige "Spinne" dreht sich um sich selbst, und die Sitzreihen drehen sich auch nochmal um die eigene Achse. Am besten einfach Video schaun:
http://www.youtube.com/watch?v=hWq0HxEA2QM
So sieht mein Code aktuell aus (zusammengeschnitten aufs Wesentliche^^):
Wenn ihr es euch anseht, seht ihr dass die Spinne mit dem Rotor richtig mitdreht. Jetzt sollte sich aber noch die Spinne um sich selbst drehen, und die Arme ebenfalls um sich selbst (siehe Video). Ich versuche schon seit 2 Tagen das zu schaffen, geht aber nicht.
Kann mir hier wer helfen?
mfg
MC MO
Ich versuche das "High Energy" nachzubauen. Der Rotor dreht sich, die 6-armige "Spinne" dreht sich um sich selbst, und die Sitzreihen drehen sich auch nochmal um die eigene Achse. Am besten einfach Video schaun:
http://www.youtube.com/watch?v=hWq0HxEA2QM
So sieht mein Code aktuell aus (zusammengeschnitten aufs Wesentliche^^):
Code: Alles auswählen
from visual import *
class Hauptarm:
def __init__ (self):
self.rahmen=frame()
self.Rotor=ellipsoid(pos=(0,0,0),length=150,height=150,width=2000,axis=(0,1,0),color=(1,0,0),opacity=0.7,material=materials.emissive,frame=self.rahmen)
self.Rotor.rotate(angle=pi/2,axis=(1,0,0))
self.Endkugel1=sphere(pos=(0,910,0),radius=90,color=(1,0,0),frame=self.rahmen)
self.Endkugel2=sphere(pos=(0,911,0),radius=90,color=(1,1,0),opacity=0.2,frame=self.rahmen)
class Arm:
def __init__ (self):
self.bank=frame()
self.Sitzflaeche1=box(pos=(140,-945,30),length=30,width=30,height=5,color=(0.5,0.5,0.5),frame=self.bank)
self.Lehne1=box(pos=(140,-925,15),length=30,width=5,height=40,color=(0.5,0.5,0.5),frame=self.bank)
self.Sitzflaeche2=box(pos=(180,-945,30),length=30,width=30,height=5,color=(0.5,0.5,0.5),frame=self.bank)
self.Lehne2=box(pos=(180,-925,15),length=30,width=5,height=40,color=(0.5,0.5,0.5),frame=self.bank)
self.Sitzflaeche3=box(pos=(220,-945,30),length=30,width=30,height=5,color=(0.5,0.5,0.5),frame=self.bank)
self.Lehne3=box(pos=(220,-925,15),length=30,width=5,height=40,color=(0.5,0.5,0.5),frame=self.bank)
self.Sitzflaeche4=box(pos=(260,-945,30),length=30,width=30,height=5,color=(0.5,0.5,0.5),frame=self.bank)
self.Lehne4=box(pos=(260,-925,15),length=30,width=5,height=40,color=(0.5,0.5,0.5),frame=self.bank)
self.Sitzflaeche5=box(pos=(300,-945,30),length=30,width=30,height=5,color=(0.5,0.5,0.5),frame=self.bank)
self.Lehne5=box(pos=(300,-925,15),length=30,width=5,height=40,color=(0.5,0.5,0.5),frame=self.bank)
self.Aufhaengung=cylinder(pos=(0,-945,0),length=330,radius=15,color=(1,0.7,0),frame=self.bank)
class Spinne:
def __init__ (self):
self.sitzreihe=frame()
self.spinne=frame()
self.Arm1=Arm()
self.Arm2=Arm()
self.Arm2.bank.rotate(angle=1*pi/3,axis=(0,1,0))
self.Arm3=Arm()
self.Arm3.bank.rotate(angle=2*pi/3,axis=(0,1,0))
self.Arm4=Arm()
self.Arm4.bank.rotate(angle=3*pi/3,axis=(0,1,0))
self.Arm5=Arm()
self.Arm5.bank.rotate(angle=4*pi/3,axis=(0,1,0))
self.Arm6=Arm()
self.Arm6.bank.rotate(angle=5*pi/3,axis=(0,1,0))
a=Hauptarm()
c=Spinne()
def Fahrt():
while True:
rate(25)
a.rahmen.rotate(angle=pi/60,axis=(1,0,0))
c.Arm1.bank.rotate(angle=pi/60,axis=(1,0,0))
c.Arm2.bank.rotate(angle=pi/60,axis=(1,0,0))
c.Arm3.bank.rotate(angle=pi/60,axis=(1,0,0))
c.Arm4.bank.rotate(angle=pi/60,axis=(1,0,0))
c.Arm5.bank.rotate(angle=pi/60,axis=(1,0,0))
c.Arm6.bank.rotate(angle=pi/60,axis=(1,0,0))
Kann mir hier wer helfen?
mfg
MC MO
-
- User
- Beiträge: 1
- Registriert: Dienstag 30. März 2010, 20:02
Ich habe prinzipiell das selbe Problem wie MC_MO, nur mit anderen "Körpern"
Bei mir sind es Arme: Unterarm+Hand sind sinnvollerweise in einem Frame (um Ellbogen drehbar), Oberarm+Ellbogengelenk+Unterarm+Hand aber auch (um Schulter drehbar). Ich muss also Frame1 als Teil von Frame2 definieren. Mein bisheriger Versuch:
Ich gebe zu: Die Memberfunktion add_renderable() habe ich eher zufällig gefunden, als ich mir die Funktionen, die ich an eiem Frame machen kann, durchgesehen habe. Die VPython-Dokumentation gibt darüber nämlich wenig Auskunft...
Soweit alles gut, der Unterarm bewegt sich schön mit und kann sich gleichzeitig drehen. Nur: An der Ausgangsposition des Unterarms, ist eine Kopie (oder mehr ein Abbild) des Unterarms die die Drehungen des anderen Unterarms mitmacht. Ich kann diese Kopie (oder ist es das Original?) nur leider nicht verschieber oder ausblenden, denn alles was ich damit anstelle, geschieht auch mit dem Exemplar, dass sich zusätzlich im Frame "gruppearm1" befinden.
Ich hoffe, mir (uns) kann geholfen werden
Bei mir sind es Arme: Unterarm+Hand sind sinnvollerweise in einem Frame (um Ellbogen drehbar), Oberarm+Ellbogengelenk+Unterarm+Hand aber auch (um Schulter drehbar). Ich muss also Frame1 als Teil von Frame2 definieren. Mein bisheriger Versuch:
Code: Alles auswählen
#Die zwei Frames erstellen
self.gruppehand1=frame()
self.gruppehand2=frame()
#Die einzelnen Körperteile erstellen und zuordnen
self.oberarm1 = cylinder(pos=(0,-0.25,1), axis=(0,-1.5,0), radius=0.5, color=color.red, frame=self.gruppearm1)
self.armgelenk1 = sphere (pos=(0,-1.75,1), radius=0.5, color=color.red, frame=self.gruppehand1)
self.unterarm1 = cylinder(pos=(0,-1.75,1), axis=(0,-1.5,0), radius=0.5, color=color.red, frame=self.gruppehand1)
self.hand1 = sphere(radius=0.5, pos=(0,-3.4,1), color=(1,0.8,0.6), frame=self.gruppehand1)
#Unterarmframe zu Oberarmframe hinzufügen (?)
self.gruppearm1.add_renderable(self.gruppehand1)
Soweit alles gut, der Unterarm bewegt sich schön mit und kann sich gleichzeitig drehen. Nur: An der Ausgangsposition des Unterarms, ist eine Kopie (oder mehr ein Abbild) des Unterarms die die Drehungen des anderen Unterarms mitmacht. Ich kann diese Kopie (oder ist es das Original?) nur leider nicht verschieber oder ausblenden, denn alles was ich damit anstelle, geschieht auch mit dem Exemplar, dass sich zusätzlich im Frame "gruppearm1" befinden.
Ich hoffe, mir (uns) kann geholfen werden
Ok unser Betreuer hat das Problem zuhause doch noch gelöst...folgendermaßen funktioniert es:
Und so funktionierte dann auch unser Fahrgeschäft, wer es sich ansehn will (zu lang ums hier reinzukopieren) sollte mal im "Showcase" vorbeischaun
mfg
MC MO
Code: Alles auswählen
#frames, verschachtelt, aber ohne OO
# SH 20103030
from visual import *
nullpunkt=sphere(radius=0.1, opacity=0.3)
label(pos=nullpunkt.pos, text="Nullpunkt", xoffset=8, yoffset=4, height=8, border=2, \
box=False, line=True, linecolor=color.magenta,opacity=0.33)
rahmen_i=frame()
arm1 = cylinder(frame=rahmen_i, pos=(-1,0,0), axis=(2,0,0), radius=0.2, color=color.yellow)
sitz = box(frame=rahmen_i, pos=(-1,0,0), color=color.cyan)
rahmen_a=frame()
arm2 = cylinder(frame=rahmen_a, pos=(0,0,-1), axis=(0,0,2), radius=0.2, color=color.red )
rahmen_i.frame=rahmen_a
rahmen_s=frame()
stange=cylinder(frame=rahmen_s, pos=(0,0,0), axis=(0,5,0), radius=0.1, color=color.green)
rahmen_a.frame=rahmen_s
label(pos=(0,2.5,0), text="Drehachse", xoffset=32, yoffset=0, height=8, border=2, \
box=False, line=True, linecolor=color.magenta,opacity=0.33)
z=0
while True:
rate(25)
rahmen_i.rotate(angle=radians(10), axis=(1,0,0), origin=(-1,0,0))
rahmen_a.rotate(angle=radians(5), axis=(0,1,0), origin=(0,0,0))
rahmen_s.rotate(angle=radians(-1), axis=(-1,0,0), origin=(0,2.5,0))
if not z%100:
print "sc.forward %4.2f: <%4.2f,%4.2f,%4.2f> sc.m.camera %4.2f: <%4.2f,%4.2f,%4.2f>"%(mag(scene.forward), scene.forward[0],scene.forward[1],scene.forward[2], \
mag(scene.mouse.camera),scene.mouse.camera[0],scene.mouse.camera[1],scene.mouse.camera[2],)
z+=1
mfg
MC MO
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In besagten Thread reingucken hat keinen Sinn, da Du so viel Code ins Board gepostet hast, dass man nicht mehr darauf antworten kann. Bitte verschiebe den doch in ein paste-bin, wie etwa paste.pocoo.org! Dann kann man auch was dazu sagen. (Und da gäbe es einiges auf den ersten Blick )