Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    HPB (Euler) to Vector ? [SOLVED]

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 568 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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 confusing 😞

      Thanks for any help,
      Glenn.

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        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
        Martin

          
        import 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()  
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 16/02/2015 at 08:41, xxxxxxxx wrote:

            Thanks Sebastian - I already discovered that post, and it solved my problem 🙂

            1 Reply Last reply Reply Quote 0
            • First post
              Last post