示例#1
0
        private void AddFaceAndItsEdges(
            int faceIdx,
            Vertex a, Vertex b, Vertex c
            )
        {
            Vector3 faceNormal = NumericalMath.NewellsMethod(
                a.Position, b.Position, c.Position
                );

            Face face = new Face(faceIdx, faceNormal);

            HalfEdge ab = AddEdgeWithTwin(a, b);
            HalfEdge bc = AddEdgeWithTwin(b, c);
            HalfEdge ca = AddEdgeWithTwin(c, a);

            // Set next
            ab.Next = bc;
            bc.Next = ca;
            ca.Next = ab;

            // Set previous
            ab.Previous = ca;
            bc.Previous = ab;
            ca.Previous = bc;

            // Set incident edges of face and the incident face of edge
            LinkeEdgeAndFace(ab, face);
            LinkeEdgeAndFace(bc, face);
            LinkeEdgeAndFace(ca, face);

            // Add face to DCEl
            DCEL.AddFace(face);
        }
        public void NewellsMethodTest_OneVector()
        {
            Vector3 a = Auxilaries.RandomPosition();

            Assert.Throws(
                typeof(System.ArgumentException),
                delegate
            {
                NumericalMath.NewellsMethod(new Vector3[] { a });
            }
                );
        }
        public void NewellsMethodTest_ThreePlanarVectors()
        {
            Vector3 a = new Vector3(1, 2, 3);
            Vector3 b = new Vector3(2, 4, 3);
            Vector3 c = new Vector3(3, 9, 3);

            Vector3 expected = new Vector3(0, 0, 1);
            Vector3 actual1  = NumericalMath.NewellsMethod(a, b, c);
            Vector3 actual2  = NumericalMath.NewellsMethod(new Vector3[] { a, b, c });

            Assert.AreEqual(expected, actual1);
            Assert.AreEqual(expected, actual2);
        }
        public void NewellsMethodTest_FiveVectors()
        {
            Vector3 a = new Vector3(1, +2, 3);
            Vector3 b = new Vector3(3, +5, 9);
            Vector3 c = new Vector3(2, -2, 5);
            Vector3 d = new Vector3(3, -4, 6);
            Vector3 e = new Vector3(3, -3, 7);

            Vector3 expected = new Vector3(+0.947716733053701f, +0.045129368240652f, -0.315905577684567f);

            Vector3 actual = NumericalMath.NewellsMethod(new Vector3[] { a, b, c, d, e });

            Assert.AreEqual(expected, actual);
        }
        public void NewellsMethodTest_ThreeVectors()
        {
            Vector3 a = new Vector3(1, +2, 3);
            Vector3 b = new Vector3(3, +5, 9);
            Vector3 c = new Vector3(2, -2, 5);

            Vector3 expected = new Vector3(0.937042571331636f, 0.062469504755442f, -0.343582276154933f);

            Vector3 actual1 = NumericalMath.NewellsMethod(a, b, c);
            Vector3 actual2 = NumericalMath.NewellsMethod(new Vector3[] { a, b, c });

            Assert.AreEqual(expected, actual1);
            Assert.AreEqual(expected, actual2);
        }