public void TestNegativeArc() { var arc = new ArcLoftPath(Vector3.left, -Mathf.PI / 2, Vector3.zero, Vector3.up); Assert.AreEqual(Mathf.PI / 2, arc.Length); var startTransform = arc.GetTransform(0); var endTransform = arc.GetTransform(arc.Length); var startForward = startTransform.MultiplyVector(Vector3.forward); var endForward = endTransform.MultiplyVector(Vector3.forward); var startPosition = startTransform.MultiplyPoint3x4(Vector3.zero); var endPosition = endTransform.MultiplyPoint3x4(Vector3.zero); Assert.AreEqual(Vector3.left, startPosition.Round(0.00001f)); Assert.AreEqual(Vector3.back, endPosition.Round(0.00001f)); Assert.AreEqual(Vector3.back, startForward.Round(0.00001f)); Assert.AreEqual(Vector3.right, endForward.Round(0.00001f)); var halfTransform = arc.GetTransform(arc.Length / 2); var halfForward = new Vector3(1, 0, -1).normalized; Assert.AreEqual(halfForward.Round(0.00001f), halfTransform.MultiplyVector(Vector3.forward).Round(0.00001f)); }
public void TestSnapSweepBack() { var arc = new ArcLoftPath(Vector3.right, -Mathf.PI, Vector3.zero, Vector3.up); int count = 18; float increment = Mathf.PI / count; for (float i = 0; i <= Mathf.PI; i += increment) { var x = Mathf.Cos(-i); var z = -Mathf.Sin(-i); var theoreticalPoint = arc.GetTransformedPoint(i, Vector3.zero); var pointInside = new Vector3(x, 0, z) * 0.5f; var pointAt = new Vector3(x, 0, z); var pointOutside = new Vector3(x, 0, z) * 1.5f; Assert.AreEqual(theoreticalPoint.Round(0.0001f), pointAt.Round(0.0001f)); arc.SnapTo(pointInside, out var snapped1, out float distance1); arc.SnapTo(pointAt, out var snapped2, out float distance2); arc.SnapTo(pointOutside, out var snapped3, out float distance3); Assert.AreEqual(pointAt.Round(0.001f), snapped1.Round(0.001f)); Assert.AreEqual(pointAt.Round(0.001f), snapped2.Round(0.001f)); Assert.AreEqual(pointAt.Round(0.001f), snapped3.Round(0.001f)); Assert.AreEqual(i, distance1, 0.001f); Assert.AreEqual(i, distance2, 0.001f); Assert.AreEqual(i, distance3, 0.001f); } }
public void TestSnapArc180Backward() { var arc = new ArcLoftPath(Vector3.right, -Mathf.PI, Vector3.zero, Vector3.up); var point = new Vector3(0, 0, 2); arc.SnapTo(point, out var snapped, out var distance); var pointExpected = new Vector3(0, 0, 1); Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f)); var l = Mathf.PI / 2; Assert.AreEqual(l, distance, 0.0001f); }
public void TestSnapArcQ4() { var arc = new ArcLoftPath(Vector3.right, Mathf.PI / 2, Vector3.zero, Vector3.up); var point = new Vector3(1, 0, -1); arc.SnapTo(point, out var snapped, out var distance); var sqrt2inv = 0.70710678818f; var pointExpected = new Vector3(sqrt2inv, 0, -sqrt2inv); Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f)); var l = 0.785398f; Assert.AreEqual(l, distance, 0.0001f); }
public void TestSnapArcOvershoot() { var arc = new ArcLoftPath(Vector3.forward, Mathf.PI / 2, Vector3.zero, Vector3.up); var point = new Vector3(1, 0, -1); arc.SnapTo(point, out var snapped, out var distance); var pointExpected = new Vector3(1, 0, 0); Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f)); var l = Mathf.PI / 2; Assert.AreEqual(l, distance, 0.0001f); }
private void IsValid(ArcLoftPath value) { Assert.IsTrue(value.Radius > 0, "radius > 0"); Assert.IsFalse(float.IsNaN(value.Radius), "length is NaN"); Assert.IsFalse(float.IsInfinity(value.Radius), "length is Infinity"); }