コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
        }