void Apart(Quaternion q1, Quaternion q2)
{
var angle = Calc.ToRad(0.4f);
var vector = new Vector3(1, 1, 0); // new Vector(1, 1, 1) if 3d probably!
someObj1.Orientation = q1 * Quaternion.CreateFromAxisAngle(vector, angle);
someObj2.Orientation = q2 * Quaternion.CreateFromAxisAngle(vector, -angle);
}
这导致堆叠的对象分开动画 - 在我的移动应用程序中创建对象的对角线,以 2D 形式在屏幕上显示由Orientation 给出的对象。
所以只在一个轴上分开:
var vector = new Vector3(0, 1, 0);
表示:<OO> . <O-O> .. <O--O> 每次更新
编辑:
实际上,vector 必须在所有轴上分别进行分解和角度相乘。
// where UnitX is (1, 0, 0) and UnitY (0, 1, 0)
someObj1.Orientation = q1 * Quaternion.CreateFromAxisAngle(Vector3.UnitX, xAngle) * Quaternion.CreateFromAxisAngle(Vector3.UnitY, yAngle);
someObj2.Orientation = q2 * Quaternion.CreateFromAxisAngle(Vector3.UnitX, -xAngle) * Quaternion.CreateFromAxisAngle(Vector3.UnitY, -yAngle);
由于我需要以特定角度和 2D 分隔,因此我可以简单地从该角度中取出百分比:
var angle = Calc.ToRad(0.4f);
var makePortions = new Random().NextDouble();
var xAngle = (float)(angle * makePortions);
var yAngle = (float)(angle * (1 - makePortions));
否则 X 轴的角度变化将停止对大约 180 度 Y 轴方向的对象方向产生影响。