File indexing completed on 2026-08-17 09:13:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef _gp_QuaternionNLerp_HeaderFile
0015 #define _gp_QuaternionNLerp_HeaderFile
0016
0017 #include <gp_Quaternion.hxx>
0018
0019
0020
0021 class gp_QuaternionNLerp
0022 {
0023 public:
0024
0025
0026
0027
0028
0029 static gp_Quaternion Interpolate(const gp_Quaternion& theQStart,
0030 const gp_Quaternion& theQEnd,
0031 Standard_Real theT)
0032 {
0033 gp_Quaternion aResult;
0034 gp_QuaternionNLerp aLerp(theQStart, theQEnd);
0035 aLerp.Interpolate(theT, aResult);
0036 return aResult;
0037 }
0038
0039 public:
0040
0041 gp_QuaternionNLerp() {}
0042
0043
0044 gp_QuaternionNLerp(const gp_Quaternion& theQStart, const gp_Quaternion& theQEnd)
0045 {
0046 Init(theQStart, theQEnd);
0047 }
0048
0049
0050 void Init(const gp_Quaternion& theQStart, const gp_Quaternion& theQEnd)
0051 {
0052 InitFromUnit(theQStart.Normalized(), theQEnd.Normalized());
0053 }
0054
0055
0056 void InitFromUnit(const gp_Quaternion& theQStart, const gp_Quaternion& theQEnd)
0057 {
0058 myQStart = theQStart;
0059 myQEnd = theQEnd;
0060 Standard_Real anInner = myQStart.Dot(myQEnd);
0061 if (anInner < 0.0)
0062 {
0063 myQEnd = -myQEnd;
0064 }
0065 myQEnd -= myQStart;
0066 }
0067
0068
0069 void Interpolate(Standard_Real theT, gp_Quaternion& theResultQ) const
0070 {
0071 theResultQ = myQStart + myQEnd * theT;
0072 }
0073
0074 private:
0075 gp_Quaternion myQStart;
0076 gp_Quaternion myQEnd;
0077 };
0078
0079 #endif