Guest User

Untitled

a guest
May 12th, 2025
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. Function SphereAimAnglesRev11
  2. Integer center_index_, tool_index_
  3. Double cx_, cy_, cz_, tx_, ty_, tz_
  4. Double ax_, ay_, az_
  5. Double bx_, by_, bz_
  6. Double vx_, vy_, vz_, s_, c_, vx2_, vy2_, vz2_, denom_
  7. Double m00_, m01_, m02_, m10_, m11_, m12_, m20_, m21_, m22_
  8. Double rx_, ry_, rz_, length_
  9.  
  10. ' Define tool forward direction as +X
  11. ax_ = 1
  12. ay_ = 0
  13. az_ = 0
  14.  
  15. ' Get vector to target: center - tool
  16. center_index_ = 0
  17. tool_index_ = 70
  18.  
  19. cx_ = CX(P(center_index_))
  20. cy_ = CY(P(center_index_))
  21. cz_ = CZ(P(center_index_))
  22.  
  23. tx_ = CX(P(tool_index_))
  24. ty_ = CY(P(tool_index_))
  25. tz_ = CZ(P(tool_index_))
  26.  
  27. bx_ = cx_ - tx_
  28. by_ = cy_ - ty_
  29. bz_ = cz_ - tz_
  30.  
  31. ' Normalize b_
  32. length_ = Sqr(bx_ * bx_ + by_ * by_ + bz_ * bz_)
  33. bx_ = bx_ / length_
  34. by_ = by_ / length_
  35. bz_ = bz_ / length_
  36.  
  37. ' Cross product: v_ = a_ × b_
  38. vx_ = ay_ * bz_ - az_ * by_
  39. vy_ = az_ * bx_ - ax_ * bz_
  40. vz_ = ax_ * by_ - ay_ * bx_
  41.  
  42. ' Dot product: a_ · b_
  43. c_ = ax_ * bx_ + ay_ * by_ + az_ * bz_
  44.  
  45. ' Sine = ||v_||
  46. s_ = Sqr(vx_ * vx_ + vy_ * vy_ + vz_ * vz_)
  47.  
  48. ' Rotation matrix: R = I + V + V^2 * ((1 - c) / s^2)
  49. If s_ > 0.00001 Then
  50. vx2_ = vx_ * vx_
  51. vy2_ = vy_ * vy_
  52. vz2_ = vz_ * vz_
  53. denom_ = (1 - c_) / (s_ * s_)
  54.  
  55. m00_ = 1 + 0 + 0 + denom_ * (-vy2_ - vz2_)
  56. m01_ = -vz_ + 0 + denom_ * (vx_ * vy_)
  57. m02_ = vy_ + 0 + denom_ * (vx_ * vz_)
  58.  
  59. m10_ = vz_ + 0 + denom_ * (vy_ * vx_)
  60. m11_ = 1 + 0 + 0 + denom_ * (-vx2_ - vz2_)
  61. m12_ = -vx_ + 0 + denom_ * (vy_ * vz_)
  62.  
  63. m20_ = -vy_ + 0 + denom_ * (vz_ * vx_)
  64. m21_ = vx_ + 0 + denom_ * (vz_ * vy_)
  65. m22_ = 1 + 0 + 0 + denom_ * (-vx2_ - vy2_)
  66. Else
  67. ' Vectors are aligned: use identity
  68. m00_ = 1; m01_ = 0; m02_ = 0
  69. m10_ = 0; m11_ = 1; m12_ = 0
  70. m20_ = 0; m21_ = 0; m22_ = 1
  71. EndIf
  72.  
  73. ' Extract Euler angles from rotation matrix (ZYX order)
  74. ry_ = Atan2(m02_, m22_) * 180 / 3.14159
  75. rx_ = Asin(-m12_) * 180 / 3.14159
  76. rz_ = Atan2(m10_, m11_) * 180 / 3.14159
  77.  
  78. ' Final move
  79. P(999) = XY(tx_, ty_, tz_, rz_, rx_, ry_)
  80. Print P999
  81. Go P(999)
  82. Fend
Advertisement
Add Comment
Please, Sign In to add comment