Пример #1
0
            internal double GetTriangleAnglesQuality(g3.DMesh3 mesh)
            {
                Vector3d v0 = Vector3d.Zero, v1 = Vector3d.Zero, v2 = Vector3d.Zero;

                mesh.GetTriVertices(meshIndex, ref v0, ref v1, ref v2);

                Vector3d anglesD = Vector3d.Zero;

                Vector3d e00 = (v1 - v0);

                e00.Normalize();
                Vector3d e01 = (v2 - v0);

                e01.Normalize();
                anglesD.x = Vector3d.AngleD(e00, e01);

                Vector3d e10 = (v0 - v1);

                e10.Normalize();
                Vector3d e11 = (v2 - v1);

                e11.Normalize();
                anglesD.y = Vector3d.AngleD(e10, e11);

                anglesD.z = 180 - anglesD.x - anglesD.y;

                double resultA = Math.Min(Math.Min(Math.Abs(anglesD.x - 90) / 10.0, Math.Abs(anglesD.y - 90) / 10.0), Math.Abs(anglesD.z - 90) / 10.0);

                double resultB = Math.Abs(anglesD.x - 60) / 30.0 + Math.Abs(anglesD.y - 60) / 30.0 + Math.Abs(anglesD.z - 60) / 30.0;

                double result = Math.Min(resultA, resultB);

                return(Math.Pow(result, 3));
            }
Пример #2
0
        public void AngleD_Normalized()
        {
            var    vector1 = new Vector3d(0, 0, 1);
            var    vector2 = new Vector3d(0, d, d);
            double angle   = Vector3d.AngleD(vector1, vector2, true);

            Assert.AreEqual(45, angle, delta);
        }
Пример #3
0
        public void AngleD()
        {
            var    vector1 = new Vector3d(0, 0, 6);
            var    vector2 = new Vector3d(0, 2, 2);
            double angle   = Vector3d.AngleD(vector1, vector2, false);

            Assert.AreEqual(45, angle, delta);
        }