hkVector2.inl
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. HK_FORCE_INLINE hkReal hkVector2::signedDistanceToLine( const hkVector2& p0, const hkVector2& p1 ) const
  9. {
  10. return ((p1.x - p0.x)*(y - p0.y) - (x - p0.x)*(p1.y - p0.y));
  11. }
  12. inline hkBool32 hkVector2::rightOfLine( const hkVector2& p0, const hkVector2& p1 ) const
  13. {
  14. return signedDistanceToLine(p0,p1) < 0;
  15. }
  16. inline hkBool32 hkVector2::leftOfLine( const hkVector2& p0, const hkVector2& p1 ) const
  17. {
  18. return signedDistanceToLine(p0,p1) > 0;
  19. }
  20. inline hkBool32 hkVector2::inCircumcircle( const hkVector2& p0, const hkVector2& p1, const hkVector2& p2, hkReal tolerance ) const
  21. {
  22. hkVector4 a; a.set( p0.x - x, p1.x - x, p2.x - x );
  23. hkVector4 b; b.set( p0.y - y, p1.y - y, p2.y - y );
  24. hkVector4 temp1; temp1.setMul4( a, a );
  25. hkVector4 temp2; temp2.setMul4( b, b );
  26. hkVector4 c; c.setAdd4( temp1, temp2 );
  27. hkVector4 cross; cross.setCross( b, c );
  28. return a.dot3( cross ) > -tolerance; // XXX
  29. }
  30. inline hkReal hkVector2::dot( const hkVector2& p ) const
  31. {
  32. return x*p.x + y*p.y;
  33. }
  34. inline void hkVector2::setMax( const hkVector2& a, const hkVector2& b )
  35. {
  36. x = hkMath::max2(a.x,b.x);
  37. y = hkMath::max2(a.y,b.y);
  38. }
  39. inline void hkVector2::setMin( const hkVector2& a, const hkVector2& b )
  40. {
  41. x = hkMath::min2(a.x,b.x);
  42. y = hkMath::min2(a.y,b.y);
  43. }
  44. inline void hkVector2::setAll( hkReal a )
  45. {
  46. x = a;
  47. y = a;
  48. }
  49. inline void hkVector2::set( hkReal a, hkReal b )
  50. {
  51. x = a;
  52. y = b;
  53. }
  54. inline void hkVector2::setPerp( const hkVector2& a )
  55. {
  56. x = -a.y;
  57. y =  a.x;
  58. }
  59. inline void hkVector2::setAdd( const hkVector2& a, const hkVector2& b )
  60. {
  61. x = a.x + b.x;
  62. y = a.y + b.y;
  63. }
  64. inline void hkVector2::setMul( const hkVector2& v, hkReal r )
  65. {
  66. x = v.x * r;
  67. y = v.y * r;
  68. }
  69. inline void hkVector2::setMul( const hkVector2& v, const hkVector2& w )
  70. {
  71. x = v.x * w.x;
  72. y = v.y * w.y;
  73. }
  74. inline void hkVector2::mul( hkReal r )
  75. {
  76. x *= r;
  77. y *= r;
  78. }
  79. inline void hkVector2::setAddMul( const hkVector2& a, const hkVector2& b, hkReal r )
  80. {
  81. x = a.x + b.x * r;
  82. y = a.y + b.y * r;
  83. }
  84. inline void hkVector2::setSub( const hkVector2& a, const hkVector2& b )
  85. {
  86. x = a.x - b.x;
  87. y = a.y - b.y;
  88. }
  89. inline void hkVector2::setInterpolate( const hkVector2& a, const hkVector2& b, hkReal t)
  90. {
  91. x = a.x + t * (b.x-a.x);
  92. y = a.y + t * (b.y-a.y);
  93. }
  94. inline hkReal hkVector2::distanceTo( const hkVector2& p ) const
  95. {
  96. hkReal dx = x - p.x;
  97. hkReal dy = y - p.y;
  98. return hkMath::sqrt( dx*dx + dy*dy );
  99. }
  100. inline void hkVector2::setProject( hkVector4Parameter p, hkVector4Parameter ax, hkVector4Parameter ay )
  101. {
  102. x = ax.dot3(p);
  103. y = ay.dot3(p);
  104. }
  105. inline void hkVector2::normalize()
  106. {
  107. hkReal n = hkMath::sqrtInverse(x*x + y*y);
  108. x *= n;
  109. y *= n;
  110. }
  111. inline hkReal hkVector2::normalizeWithLength()
  112. {
  113. hkReal n = hkMath::sqrtInverse(x*x + y*y);
  114. x *= n;
  115. y *= n;
  116. return 1.0f / n;
  117. }
  118. inline void hkVector2::setZero()
  119. {
  120. x = y = 0;
  121. }
  122. /*
  123. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  124. * Confidential Information of Havok.  (C) Copyright 1999-2009
  125. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  126. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  127. * rights, and intellectual property rights in the Havok software remain in
  128. * Havok and/or its suppliers.
  129. * Use of this software for evaluation purposes is subject to and indicates
  130. * acceptance of the End User licence Agreement for this product. A copy of
  131. * the license is included with this software and is also available at www.havok.com/tryhavok.
  132. */