Matrizenberechnung in Python

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
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

Hallo,

ich wollte mal anfragen, ob es möglich ist die Orientierung eines mit python erzeugten 3dimensionalen Objektes in einem 3dimensionalen raum zu verändern.
Wenn ja, wie mach ich das? (Das Object habe ich bereits erstellt)
Kann ich die für die Drehung benötigte matrize in python ausrechnen lassen?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

ja, das ist möglich. Kennst Du die scipy-Seite?

Um aber spezifischer zu werden, mußt Du schon sagen, um was für eine Art Objekt es sich handelt (Ist es ein array aus Koordinaten (x, y, z). ein "Vektorsammelsurium" oder etwas Anderes?

Gruß,
Christian
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

Also das objekt wurde mit blender erstellt (hoffe das hilft weiter)
die aktuelle matrix für die Orientierung ist:

[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]

müssten also vektoren sein
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mit Blender kenn ich mich nicht aus, aber ich würde vermuten, daß man da besser direkt auf Blender zurückgreift, als selber zu programmieren. Rebecca oder sonst wer, wißt ihr mehr?
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

also das problem ist, dass ich nicht immer per hand die objekte verändern will um sie dann später die matrizen in mein script einbauen zu können.
Ich will einfach meinem script sagen rotiere das object um 10° oder so ähnlich. Ist das irgendwie möglich?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Auf der Blenderseite gibt es eingie Pythonscripts, u. a. dieses hier:
http://saltshaker.sourceforge.net/ ;-)
Das sieht ziemlich einfach aus. Allerdings ist die Einheit wohl Radian und nicht Grad, oder? Und es wird in diesem Beispiel auch nicht mit Rotationsmatrixes gearbeitet (jedenfalls nicht im Vordergrund).

Also, ich steige wegen Ahnungslosigkeit (bei Blender) an dieser Stelle aus dem Thread aus. Viel Erfolg noch!

Gruß,
Christian
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dem aktuell selektierten Objekt eine Rotation um 45 Grad um die x-Achse verpassen:

Code: Alles auswählen

import Blender
from math import radians

obj = Blender.Object.GetSelected()[-1]
obj.RotX = radians(45)

Blender.Redraw()

EDIT:
Blender.mathutils ist auch noch ganz interessant, z.B. erstellt RotationMatrix(angle, matSize, axisFlag, axis) eine Rotationsmatrix. Aber der oben gezeigte Weg ist der einfachste.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

danke, aber gibt es das gleiche auch für die blender gameengine?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

OK, bevor ich jetzt weiterrate und wieder daneben liege: Was genau willst du machen? Was fuer Zeilen von Python-Code hast du schon?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

Code: Alles auswählen


from GameLogic import*

cont = GameLogic.getCurrentController()
mouseOver = cont.getSensor("mouseOver")
mouseDown = cont.getSensor("mouseDown")
obj = cont.getOwner()
obj_target = mouseOver.getHitObject()
scene = getCurrentScene()

#Definition der Objektnamen
Cone = scene.getObjectList()["OBCone"]
Cube = scene.getObjectList()["OBCube"]
Circle = scene.getObjectList()["OBCircle"]
Torus = scene.getObjectList()["OBTorus"]
Checkboard = scene.getObjectList()["OBCheckboard"]


#Neue Orientierungen
oriCone1   = [0.79484083803575145, -0.48135309646484581, 0.36949592516606883], [0.58819376646204524, 0.76084813349148772, -0.2741134999552417], [-0.14918490300904194, 0.43521180393714526, 0.88788205885013727]
oriCube1   = [0.8987499323613598, 0.41711800035975705, -0.13513375912897868], [-0.36439003665576242, 0.88197387191389609, 0.29890130552947186], [0.2438615596326392, -0.21939613268489547, 0.94466760116797088]
oriCircle1 = [0.93587802375991447, -0.29844166639029129, 0.18725623195350016], [0.33183444880266938, 0.92525368869643387, -0.18382467228713142], [-0.11839857782535036, 0.23417553953354897, 0.96495781952016213]
oriTorus1  = [0.66783931754252024, -0.55903550549107239, 0.49139591934068982], [0.73201471240079519, 0.61280379382843486, -0.29770114393172559], [-0.13470377416064364, 0.55852557136609071, 0.81847668223172987]

#Bedingung 1 (Cone)
def Bed_1():
	Cone.setOrientation(oriCone1)
	obj.Cone = obj.Cone+1

#Bedingung 2 (Cube)
def Bed_2():
	Cube.setOrientation(oriCube1)
	obj.Cone = obj.Cube+1

#Bedingung 3 (Circle)
def Bed_3():
	Circle.setOrientation(oriCircle1)
	obj.Cone = obj.Circle+1

#Bedingung 4 (Torus)
def Bed_4():
	Torus.setOrientation(oriTorus1)
	obj.Cone = obj.Torus+1


if obj.Trial < 21:
			i = obj.Trial-1
			if l[i] in (1, 5, 9, 13, 17):
				Bed_1()
				obj.Cone = obj.Cone+1
				obj.changed = 1
			if l[i] in (2, 6, 10, 14, 18):
				Bed_2()
				obj.Cube = obj.Cube+1
				obj.changed = 2
			if l[i] in (3, 7, 11, 15, 19):
				Bed_3()
				obj.Circle = obj.Circle+1
				obj.changed = 3
			if l[i] in (4, 8, 12, 16, 20):
				Bed_4()
				obj.Torus = obj.Torus+1
				obj.changed = 4

kleiner auszug aus meinem script.

Intention:

ich habe 4 Objekte die ich drehen will.
zur Zeit habe ich die neue orientierung noch per hand eingegeben.
ich will es aber so verändern, dass eine zufallszahl erzeugt wird und dann das object um den wert der zufallszahl gedreht wird (um die x achse).
Antworten