public override bool ProcessMouseMove(CanonicalMouseEventArgs e, InteractionContext context) { if (this.IsActive) { Point2D position = e.Position; QuaternionD quaternionD = this.quaternionD_1; if (this.bool_2) { Vector2D vector2D = position - this.point2D_0; if (vector2D != Vector2D.Zero) { double num = System.Math.Sqrt(vector2D.X * vector2D.X + vector2D.Y * vector2D.Y); Vector3D axis = new Vector3D(vector2D.Y, vector2D.X, 0.0); axis.Normalize(); quaternionD = QuaternionD.FromAxisAngle(axis, num / 100.0) * quaternionD; } } else { Point2D point2D = this.method_0(context.CanvasRectangle.Size); Vector2D vector2D1 = this.point2D_0 - point2D; double num1 = System.Math.Atan2(vector2D1.Y, vector2D1.X); Vector2D vector2D2 = position - point2D; double num2 = System.Math.Atan2(vector2D2.Y, vector2D2.X) - num1; quaternionD = QuaternionD.FromAxisAngle(Vector3D.ZAxis, -num2) * quaternionD; } quaternionD.Normalize(); this.quaternionD_0 = quaternionD; this.OnOrientationChanged((EventArgs)e); } return(true); }
public void WorldToLocalTest() { var o = new Orient3D(); var two = Math.Sqrt(2.0) * 0.5; o.Q = QuaternionD.FromAxisAngle(new Vector3D(1, 1, 1), 77 * Math.PI / 180.0); var tstVec1 = new Vector3D(4, 4, 4); var answ1 = tstVec1 - o.M_1 * tstVec1; Assert.AreEqual(0d, answ1.GetLength(), 0.000001); o.Q = QuaternionD.FromAxisAngle(Vector3D.XAxis, -45 * Math.PI / 180.0); var tstVec2 = Vector3D.YAxis; var answ2 = new Vector3D(0, two, two) - o.M_1 * tstVec2; Assert.AreEqual(0d, answ2.GetLength(), 0.000001); var tstVec3 = Vector3D.ZAxis; var answ3 = new Vector3D(0, -two, two) - o.M_1 * tstVec3; Assert.AreEqual(0d, answ3.GetLength(), 0.000001); o.Q = QuaternionD.FromAxisAngle(Vector3D.ZAxis, 45 * Math.PI / 180.0); tstVec2 = Vector3D.XAxis; answ2 = new Vector3D(two, -two, 0) - o.M_1 * tstVec2; Assert.AreEqual(0d, answ2.GetLength(), 0.000001); tstVec3 = Vector3D.YAxis; answ3 = new Vector3D(two, two, 0) - o.M_1 * tstVec3; Assert.AreEqual(0d, answ3.GetLength(), 0.000001); }
public void FromAxisAngle_MainAxes(QuaternionD expected, double4 axisAngle) { var axis = new double3(axisAngle.xyz); var angle = axisAngle.w; var actual = QuaternionD.FromAxisAngle(axis, angle); Assert.Equal(expected.x, actual.x, 7); Assert.Equal(expected.y, actual.y, 7); Assert.Equal(expected.z, actual.z, 7); Assert.Equal(expected.w, actual.w, 7); }
public void LocalToWorldTest() { var o = new Orient3D(); o.Q = QuaternionD.FromAxisAngle(Vector3D.XAxis, 45 * Math.PI / 180.0); var tstVec1 = Vector3D.XAxis; var answ1 = tstVec1 - o.M * tstVec1; Assert.AreEqual(0d, answ1.GetLength(), 0.000001); var tstVec2 = Vector3D.YAxis; var answ2 = new Vector3D(0, Math.Sqrt(2.0), Math.Sqrt(2.0)) / 2 - o.M * tstVec2; Assert.AreEqual(0d, answ2.GetLength(), 0.000001); var tstVec3 = Vector3D.ZAxis; var answ3 = new Vector3D(0, -Math.Sqrt(2.0), Math.Sqrt(2.0)) / 2 - o.M * tstVec3; Assert.AreEqual(0d, answ3.GetLength(), 0.000001); o.Q = QuaternionD.FromAxisAngle(Vector3D.YAxis, 45 * Math.PI / 180.0); tstVec1 = Vector3D.YAxis; answ1 = tstVec1 - o.M * tstVec1; Assert.AreEqual(0d, answ1.GetLength(), 0.000001); tstVec2 = Vector3D.XAxis; answ2 = new Vector3D(Math.Sqrt(2.0), 0, -Math.Sqrt(2.0)) / 2 - o.M * tstVec2; Assert.AreEqual(0d, answ2.GetLength(), 0.000001); tstVec3 = Vector3D.ZAxis; answ3 = new Vector3D(Math.Sqrt(2.0), 0, Math.Sqrt(2.0)) / 2 - o.M * tstVec3; Assert.AreEqual(0d, answ3.GetLength(), 0.000001); o.Q = QuaternionD.FromAxisAngle(Vector3D.ZAxis, 45 * Math.PI / 180.0); tstVec1 = Vector3D.ZAxis; answ1 = tstVec1 - o.M * tstVec1; Assert.AreEqual(0d, answ1.GetLength(), 0.000001); tstVec2 = Vector3D.XAxis; answ2 = new Vector3D(Math.Sqrt(2.0), Math.Sqrt(2.0), 0) / 2 - o.M * tstVec2; Assert.AreEqual(0d, answ2.GetLength(), 0.000001); tstVec3 = Vector3D.YAxis; answ3 = new Vector3D(-Math.Sqrt(2.0), Math.Sqrt(2.0), 0) / 2 - o.M * tstVec3; Assert.AreEqual(0d, answ3.GetLength(), 0.000001); }
private void method_0(CanonicalMouseEventArgs e, InteractionContext context) { Point2D point2D = new Point2D(0.5 * context.CanvasRectangle.Size.X, 0.5 * context.CanvasRectangle.Size.Y); Point2D position = e.Position; Vector2D vector2D1 = position - point2D; if (!(vector2D1 != Vector2D.Zero)) { return; } double num1 = System.Math.Atan2(-vector2D1.Y, vector2D1.X); if (this.nullable_0.HasValue) { Vector2D vector2D2 = this.nullable_0.Value - point2D; double num2 = System.Math.Atan2(-vector2D2.Y, vector2D2.X); if (num1 != num2) { this.TransformationProvider.ModelOrientation *= QuaternionD.FromAxisAngle(Vector3D.ZAxis, num1 - num2); } } this.nullable_0 = new Point2D?(position); }