Exemple #1
0
        protected void DiscontinuityConstraint(int vertI, int vertJ, List <int> faceList)
        {
            foreach (var faceId in faceList)
            {
                var orig = new MxVector3(model.Vertex(vertI));
                var dest = new MxVector3(model.Vertex(vertJ));
                var edge = dest - orig;

                var nml = new[] { 0.0, 0.0, 0.0 };
                model.ComputeFaceNormal(faceId, ref nml);
                var n = new MxVector3(nml);

                var n2 = edge ^ n;
                MxVector3.Unitize(ref n2);

                var quad = new MxQuadric3(n2, -(n2 * orig));
                quad *= BoundaryWeight;

                if (WeightingPolicy == MxWeighting.Area || WeightingPolicy == MxWeighting.AreaAverage)
                {
                    quad.Area = MxVector3.Norm(edge);
                    quad     *= quad.Area;
                }

                quadrics[vertI] += quad;
                quadrics[vertJ] += quad;
            }
        }
Exemple #2
0
        internal static double TriangleArea(MxVector3 v1, MxVector3 v2, MxVector3 v3)
        {
            var vec = TriangleRawNormal(v1, v2, v3);

            return(0.5 * (MxVector3.Norm(vec)));
        }