public void ZeroSizeCornerRadiusTest() { var leftBuffer = new NativeArray <RigidTransform>(2, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(0f, 0f, -1f)), [1] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 10f)), }; var rightBuffer = new NativeArray <RigidTransform>(2, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(10f, 0f, 0f)), [1] = new RigidTransform(quaternion.identity, new float3(-1f, 0f, 0f)), }; var solver = new RoundedCornerSolver { LeftBuffer = leftBuffer, RightBuffer = rightBuffer, CornerRadius = 0f }; var isFound = solver.Solve(out var results); leftBuffer.Dispose(); rightBuffer.Dispose(); Assert.AreEqual(true, isFound); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(float2.zero, results.Center)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(float2.zero, results.LeftTangent)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(float2.zero, results.RightTangent)); }
public void PivotEndOfRightSegmentTest() { var leftBuffer = new NativeArray <RigidTransform>(2, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 0f)), [1] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 10f)), }; var rightBuffer = new NativeArray <RigidTransform>(3, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(10f, 0f, 5f)), [1] = new RigidTransform(quaternion.identity, new float3(2f, 0f, 2f)), [2] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 0f)) }; var solver = new RoundedCornerSolver { LeftBuffer = leftBuffer, RightBuffer = rightBuffer, CornerRadius = 1.45f }; var isFound = solver.Solve(out var results); leftBuffer.Dispose(); rightBuffer.Dispose(); Assert.AreEqual(true, isFound); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(1.45f, 3.341641f), results.Center)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(0f, 3.341641f), results.LeftTangent)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(2f, 2f), results.RightTangent)); }
public void CheckPivotTangentTest( float2 pivotPoint, float2 linePoint1, float2 linePoint2, float cornerRadius, float2 center, float2 leftTangent, float2 rightTangent, bool shouldBeFound) { var isFound = RoundedCornerSolver.CheckPivotRadiusEdgeCase(pivotPoint, linePoint1, linePoint2, cornerRadius, out var circleResults); var expectedResults = new RoundedCorner { Center = center, LeftTangent = leftTangent, RightTangent = rightTangent }; Assert.AreEqual(shouldBeFound, isFound); Assert.True(circleResults == expectedResults); }
public void PivotBothSegmentsTest() { var leftBuffer = new NativeArray <RigidTransform>(3, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 0f)), [1] = new RigidTransform(quaternion.identity, new float3(2f, 0f, 4f)), [2] = new RigidTransform(quaternion.identity, new float3(2f, 0f, 10f)) }; var rightBuffer = new NativeArray <RigidTransform>(3, Allocator.TempJob) { [0] = new RigidTransform(quaternion.identity, new float3(10f, 0f, 2f)), [1] = new RigidTransform(quaternion.identity, new float3(4f, 0f, 2f)), [2] = new RigidTransform(quaternion.identity, new float3(0f, 0f, 0f)) }; // Expecting any radius between minRadius and maxRadius to pivot on points (2, 4) and (4, 2) simultaneously var minRadius = math.sin(math.PI / 8) * math.sqrt(4 * 4 + 2 * 2); var maxRadius = 2f; var betweenRadius = (minRadius + maxRadius) / 2f; var solver = new RoundedCornerSolver { LeftBuffer = leftBuffer, RightBuffer = rightBuffer, CornerRadius = betweenRadius }; var isFound = solver.Solve(out var results); leftBuffer.Dispose(); rightBuffer.Dispose(); Assert.AreEqual(true, isFound); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(3.849602f, 3.849602f), results.Center)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(2f, 4f), results.LeftTangent)); Assert.True(Utilities.GeometryUtility.ApproximatelyEqual(new float2(4f, 2f), results.RightTangent)); }