HPB (Euler) to Vector ? [SOLVED]
-
On 13/02/2015 at 09:47, xxxxxxxx wrote:
Hi
I need to convert an HPB value to a vector. There's loads of stuff on the net about it - but it either didn't work for me or is too confusingThanks for any help,
Glenn. -
On 13/02/2015 at 17:13, xxxxxxxx wrote:
Hi Glenn,
some basic equations about rotations in c4d: HBP to vector and with Rotation matrix.
You can access all these methods with utils, but it might be better to see what´s going on...Hope this helps ?
Best wishes
Martinimport c4d, math def main() : print "________________________________________" print "Head = -50°" print "Pitch = 10°" print "Bank = 20°" print "a spline object with two points " print "one at zero vector, the other point moved on e.g. Z-Axis" print "you can rotate the object and check the values given by the script" print "________________________________________" #_________________________ #variables matr = op.GetMg() p0 = op.GetPoint(0) * matr p1 = op.GetPoint(1) * matr #_________________________ #direction vector direction = p0 - p1 print direction ,"direction vector" print direction.GetNormalized(), "normalized direction vector" #_________________________ #direction vector to rotation eu = c4d.utils.VectorToHPB(direction) print eu,"direction to euler rotation in radians" HPB_2 = eu * 180 / math.pi print HPB_2,"HPB_2 in degree with zero banking" #one need at least three points to stabilize a 3d-system #_________________________ #vector rotation to angle rot = op.GetAbsRot() print rot, "Rotation in radians" HPB = rot * 180 / math.pi print HPB,"Rotation HPB in degree" #_________________________ #rotation angle to vector rad = HPB * math.pi / 180 print rad,"Rotation back to radians" #_____________________________________________________________ #rotation matrices first the single rotations degree to vector #(It would be better to convert to radians first) ##rotate only H around Y - axis print "________________________________________" print "Single Head rotation" print "Head = -50°, Pitch = 0°, Bank = 0°" print matr.v1 ,"head vector, matrix v1" hhx = math.cos(HPB.x * math.pi / 180) hhy = 0 hhz = math.sin(HPB.x * math.pi / 180) print c4d.Vector(hhx, hhy, hhz) print matr.v2 ,"pitch vector, matrix v2" hpx = 0 hpy = 1 hpz = 0 print c4d.Vector(hpx, hpy, hpz) print matr.v3 ,"bank vector, matrix v3" hbx = -math.sin(HPB.x * math.pi / 180) hby = 0 hbz = math.cos(HPB.x * math.pi / 180) print c4d.Vector(hbx, hby, hbz) #R(Y) ymatrix = c4d.Matrix(c4d.Vector(0,0,0),c4d.Vector(hhx, hhy, hhz),c4d.Vector(hpx, hpy, hpz),c4d.Vector(hbx, hby, hbz)) ##rotate only P around X - axis print "________________________________________" print "Single Pitch rotation" print "Head = 0°, Pitch = 10°, Bank = 0°" print matr.v1 ,"head vector, matrix v1" phx = 1 phy = 0 phz = 0 print c4d.Vector(phx, phy, phz) print matr.v2 ,"pitch vector, matrix v2" ppx = 0 ppy = math.cos(HPB.y * math.pi / 180) ppz = -math.sin(HPB.y * math.pi / 180) print c4d.Vector(ppx, ppy, ppz) print matr.v3 ,"bank vector, matrix v3" pbx = 0 pby = math.sin(HPB.y * math.pi / 180) pbz = math.cos(HPB.y * math.pi / 180) print c4d.Vector(pbx, pby, pbz) #R(X) xmatrix = c4d.Matrix(c4d.Vector(0,0,0),c4d.Vector(phx, phy, phz),c4d.Vector(ppx, ppy, ppz),c4d.Vector(pbx, pby, pbz)) ##rotate only B around Z - axis print "________________________________________" print "Single Bank rotation" print "Head = 0°, Pitch = 0°, Bank = 20°" print matr.v1 ,"head vector, matrix v1" bhx = math.cos(HPB.z * math.pi / 180) bhy = -math.sin(HPB.z * math.pi / 180) bhz = 0 print c4d.Vector(bhx, bhy, bhz) print matr.v2 ,"pitch vector, matrix v2" bpx = math.sin(HPB.z * math.pi / 180) bpy = math.cos(HPB.z * math.pi / 180) bpz = 0 print c4d.Vector(bpx, bpy, bpz) print matr.v3 ,"bank vector, matrix v3" bbx = 0 bby = 0 bbz = 1 print c4d.Vector(bbx, bby, bbz) #R(Z) zmatrix = c4d.Matrix(c4d.Vector(0,0,0),c4d.Vector(bhx, bhy, bhz),c4d.Vector(bpx, bpy, bpz),c4d.Vector(bbx, bby, bbz)) #_______________________________________________ #rotation matrix all together now #total Rotation is R = R(Y)*R(X)*R(Z) print "________________________________________" print "________________________________________" print "All rotations together" print matr, "c4d Matrix from op.GetMg()" print "multiply all rotation matrices" print ymatrix*xmatrix*zmatrix, "our calculation of a rotation matrix" if __name__=='__main__': main()
-
On 16/02/2015 at 08:29, xxxxxxxx wrote:
Hello,
you could simply create a Matrix based on your rotation and apply that Matrix to a given Vector as discussed in this thread.
Beset wishes,
Sebastian -
On 16/02/2015 at 08:41, xxxxxxxx wrote:
Thanks Sebastian - I already discovered that post, and it solved my problem