AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

toEuler

函数名:toEuler

函数功能:将四元数转换为欧拉角

参数说明:

  • 无参数

返回值说明:

  • 返回值类型:Object
  • 返回值内容:
    • roll:绕x轴旋转的角度,单位为弧度
    • pitch:绕y轴旋转的角度,单位为弧度
    • yaw:绕z轴旋转的角度,单位为弧度

函数用法示例:

const q = {x: 0.5, y: 0.5, z: 0.5, w: 0.5};
const euler = Quaternion.toEuler(q);
console.log(euler.roll, euler.pitch, euler.yaw); // 输出绕x轴、y轴、z轴旋转的角度

函数实现原理:

在3D图形学中,欧拉角是指用三个角度来表示物体在空间中的旋转角度,有时也被称为姿态角、俯仰翻滚角。欧拉角可以通过四元数来计算得出。

四元数表示物体在空间中的旋转角度,由四个参数构成:x、y、z、w。通过四元数,可以方便地计算出物体在空间中的旋转,包括绕x轴、y轴和z轴旋转的角度。

toEuler函数的实现原理如下:

  • 首先,将四元数的w、x、y、z参数存入数组中,方便进行计算。
  • 计算绕y轴的旋转角度,即pitch角。计算方法如下:
    • 计算sin值,公式为:sin(pitch/2) = 2*(q[0]*q[2] - q[3]*q[1])
    • 计算cos值,公式为:cos(pitch/2) = 1 - 2*(q[0]*q[0] + q[1]*q[1])
    • 计算pitch,公式为:pitch = arctan2(sin(pitch/2), cos(pitch/2))
  • 计算绕z轴的旋转角度,即yaw角。计算方法如下:
    • 计算sin值,公式为:sin(yaw/2) = 2*(q[0]*q[3] - q[1]*q[2])
    • 计算cos值,公式为:cos(yaw/2) = 1 - 2*(q[2]*q[2] + q[3]*q[3])
    • 计算yaw,公式为:yaw = arctan2(sin(yaw/2), cos(yaw/2))
  • 计算绕x轴的旋转角度,即roll角。计算方法如下:
    • 计算sin值,公式为:sin(roll/2) = 2*(q[1]*q[3] - q[0]*q[2])
    • 计算cos值,公式为:cos(roll/2) = 1 - 2*(q[1]*q[1] + q[2]*q[2])
    • 计算roll,公式为:roll = arctan2(sin(roll/2), cos(roll/2))

最后,将绕x轴、y轴、z轴旋转的角度以Object形式返回。

函数的时间复杂度为O(1),即常数级别。

函数的空间复杂度为O(1),即常数级别。

注意事项:

  • 由于欧拉角的表示方式有多种,不同的表示方式计算方法不同,具体计算方法需要根据实际情况进行调整和优化。

参考文献:

[1] https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles

[2] https://zhuanlan.zhihu.com/p/25905204

[3] https://blog.csdn.net/xiao_zzh/article/details/50830924