HDualQuaternion.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /***********************************************************
  2. * File generated by the HALCON-Compiler hcomp version 22.05
  3. * Usage: Interface to C++
  4. *
  5. * Software by: MVTec Software GmbH, www.mvtec.com
  6. ***********************************************************/
  7. #ifndef HCPP_HDUALQUATERNION
  8. #define HCPP_HDUALQUATERNION
  9. namespace HalconCpp
  10. {
  11. // Represents a dual quaternion.
  12. class LIntExport HDualQuaternion : public HDataBase
  13. {
  14. public:
  15. // Create an uninitialized instance
  16. HDualQuaternion():HDataBase() {}
  17. // Copy constructor
  18. HDualQuaternion(const HDualQuaternion& source) : HDataBase(source) {}
  19. // Constructor from HTuple
  20. explicit HDualQuaternion(const HTuple& tuple) : HDataBase(tuple) {}
  21. // Deep copy of all data represented by this object instance
  22. HDualQuaternion Clone() const;
  23. /*****************************************************************************
  24. * Operator-based class constructors
  25. *****************************************************************************/
  26. // pose_to_dual_quat: Convert a 3D pose to a unit dual quaternion.
  27. explicit HDualQuaternion(const HPose& Pose);
  28. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  29. explicit HDualQuaternion(const HString& ScrewFormat, const HTuple& AxisDirectionX, const HTuple& AxisDirectionY, const HTuple& AxisDirectionZ, const HTuple& AxisMomentOrPointX, const HTuple& AxisMomentOrPointY, const HTuple& AxisMomentOrPointZ, const HTuple& Rotation, const HTuple& Translation);
  30. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  31. explicit HDualQuaternion(const HString& ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  32. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  33. explicit HDualQuaternion(const char* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  34. #ifdef _WIN32
  35. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  36. explicit HDualQuaternion(const wchar_t* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  37. #endif
  38. /*****************************************************************************
  39. * Operator overloads (non-member overloads reside in HOperatorOverloads.h)
  40. *****************************************************************************/
  41. // Convert to matrix
  42. operator HHomMat3D() const;
  43. // Convert to pose
  44. operator HPose() const;
  45. // Conjugate dual quaternion
  46. HDualQuaternion operator~() const;
  47. // Create a dual quaternion from eight double values, where
  48. // (RealW, RealX, RealY, RealZ) are the elements of the real part and
  49. // (DualW, DualX, DualY, DualZ) are the elements of the dual part.
  50. explicit HDualQuaternion(double RealW, double RealX, double RealY,
  51. double RealZ, double DualW, double DualX,
  52. double DualY, double DualZ);
  53. // Create a dual quaternion from two quaternions for the real and the
  54. // dual part.
  55. explicit HDualQuaternion(HQuaternion QuatReal, HQuaternion QuatDual);
  56. /***************************************************************************
  57. * Operators *
  58. ***************************************************************************/
  59. // Deserialize a serialized dual quaternion.
  60. void DeserializeDualQuat(const HSerializedItem& SerializedItemHandle);
  61. // Multiply two dual quaternions.
  62. static HDualQuaternionArray DualQuatCompose(const HDualQuaternionArray& DualQuaternionLeft, const HDualQuaternionArray& DualQuaternionRight);
  63. // Multiply two dual quaternions.
  64. HDualQuaternion DualQuatCompose(const HDualQuaternion& DualQuaternionRight) const;
  65. // Conjugate a dual quaternion.
  66. static HDualQuaternionArray DualQuatConjugate(const HDualQuaternionArray& DualQuaternion);
  67. // Conjugate a dual quaternion.
  68. HDualQuaternion DualQuatConjugate() const;
  69. // Interpolate two dual quaternions.
  70. HDualQuaternionArray DualQuatInterpolate(const HDualQuaternion& DualQuaternionEnd, const HTuple& InterpPos) const;
  71. // Interpolate two dual quaternions.
  72. HDualQuaternion DualQuatInterpolate(const HDualQuaternion& DualQuaternionEnd, double InterpPos) const;
  73. // Normalize a dual quaternion.
  74. static HDualQuaternionArray DualQuatNormalize(const HDualQuaternionArray& DualQuaternion);
  75. // Normalize a dual quaternion.
  76. HDualQuaternion DualQuatNormalize() const;
  77. // Convert a unit dual quaternion into a homogeneous transformation matrix.
  78. HHomMat3D DualQuatToHomMat3d() const;
  79. // Convert a dual quaternion to a 3D pose.
  80. static HPoseArray DualQuatToPose(const HDualQuaternionArray& DualQuaternion);
  81. // Convert a dual quaternion to a 3D pose.
  82. HPose DualQuatToPose() const;
  83. // Convert a unit dual quaternion into a screw.
  84. void DualQuatToScrew(const HString& ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  85. // Convert a unit dual quaternion into a screw.
  86. void DualQuatToScrew(const char* ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  87. #ifdef _WIN32
  88. // Convert a unit dual quaternion into a screw.
  89. void DualQuatToScrew(const wchar_t* ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  90. #endif
  91. // Transform a 3D line with a unit dual quaternion.
  92. void DualQuatTransLine3d(const HString& LineFormat, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentOrPointX, const HTuple& LineMomentOrPointY, const HTuple& LineMomentOrPointZ, HTuple* TransLineDirectionX, HTuple* TransLineDirectionY, HTuple* TransLineDirectionZ, HTuple* TransLineMomentOrPointX, HTuple* TransLineMomentOrPointY, HTuple* TransLineMomentOrPointZ) const;
  93. // Transform a 3D line with a unit dual quaternion.
  94. void DualQuatTransLine3d(const HString& LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  95. // Transform a 3D line with a unit dual quaternion.
  96. void DualQuatTransLine3d(const char* LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  97. #ifdef _WIN32
  98. // Transform a 3D line with a unit dual quaternion.
  99. void DualQuatTransLine3d(const wchar_t* LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  100. #endif
  101. // Convert a 3D pose to a unit dual quaternion.
  102. static HDualQuaternionArray PoseToDualQuat(const HPoseArray& Pose);
  103. // Convert a 3D pose to a unit dual quaternion.
  104. void PoseToDualQuat(const HPose& Pose);
  105. // Convert a screw into a dual quaternion.
  106. void ScrewToDualQuat(const HString& ScrewFormat, const HTuple& AxisDirectionX, const HTuple& AxisDirectionY, const HTuple& AxisDirectionZ, const HTuple& AxisMomentOrPointX, const HTuple& AxisMomentOrPointY, const HTuple& AxisMomentOrPointZ, const HTuple& Rotation, const HTuple& Translation);
  107. // Convert a screw into a dual quaternion.
  108. void ScrewToDualQuat(const HString& ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  109. // Convert a screw into a dual quaternion.
  110. void ScrewToDualQuat(const char* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  111. #ifdef _WIN32
  112. // Convert a screw into a dual quaternion.
  113. void ScrewToDualQuat(const wchar_t* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  114. #endif
  115. // Serialize a dual quaternion.
  116. HSerializedItem SerializeDualQuat() const;
  117. // Transform a 3D point with a unit dual quaternion.
  118. HTuple DualQuatTransPoint3d(const HTuple& Px, const HTuple& Py, const HTuple& Pz, HTuple* Ty, HTuple* Tz) const;
  119. // Transform a 3D point with a unit dual quaternion.
  120. double DualQuatTransPoint3d(double Px, double Py, double Pz, double* Ty, double* Tz) const;
  121. };
  122. class LIntExport HDualQuaternionArray : public HDataArray
  123. {
  124. public:
  125. HDualQuaternionArray();
  126. HDualQuaternionArray(HDualQuaternion* classes, Hlong length);
  127. /* Define a default constructor to prevent compilers that support
  128. * C++11 R-Value References v3.0 declaring an implicite move
  129. * assignment/constructor. */
  130. ~HDualQuaternionArray() {}
  131. protected:
  132. virtual void CreateArray(Hlong length);
  133. virtual int GetFixedSize() const;
  134. };
  135. }
  136. #endif