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)); }
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); }
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); }