[] |
AngleAxis
( Unity) .RobotJoint
:using UnityEngine;
public class RobotJoint : MonoBehaviour
{
public Vector3 Axis;
public Vector3 StartOffset;
void Awake ()
{
StartOffset = transform.localPosition;
}
}
Axis
, 1
. Y, Axis
(0,1,0)
. , IF
.ForwardKinematics
. angles
float
. : angles[i]
i- . .public Vector3 ForwardKinematics (float [] angles)
{
...
}
rotate
Quaternion.AngleAxis
.Vector3 prevPoint = Joints[0].transform.position;
Quaternion rotation = Quaternion.identity;
for (int i = 1; i < Joints.Length; i++)
{
//
rotation *= Quaternion.AngleAxis(angles[i - 1], Joints[i - 1].Axis);
Vector3 nextPoint = prevPoint + rotation * Joints[i].StartOffset;
prevPoint = nextPoint;
}
return prevPoint;
Quaternion.AngleAxis
. Quaternion.AngleAxis(angle, axis);
, axis
angle
. Axis
(1,0,0)
, (0,1,0)
(0,0,1)
, , , X, Y Z. , Axis
RobotJoint
.for
rotation
. , .Vector3 nextPoint = prevPoint + rotation * Joints[i].StartOffset;