public Triangle(Point p1, Point p2, Point p3, Vector <double> ver = null) { vertix = new Point[3] { p1, p2, p3 }; weight = GetArea(); if (ver == null) { versor = MatrixExt.WersorFromPlane(p1, p2, p3); } else { versor = ver; } }
public override void Generate(Point[] points, out int iter, bool regenerate = true) { int n = points.Length; Vector <double> sw = Vector <double> .Build.Dense(3, 0); for (int i = 0; i + 2 < n; i++) { sw += MatrixExt.WersorFromPlane(points[i], points[i + 1], points[i + 2]); } sw = sw.Normalize(2); Vector <double> start = Vector <double> .Build.Dense(4, 0); for (int i = 0; i < 3; i++) { start[i] = sw[i]; } Generate(points, out iter, start, regenerate); }
public override void Generate(List <Point> points, List <double> weigths, out int iter) { int n = points.Count; Vector <double> sw = Vector <double> .Build.Dense(3, 0); for (int i = 0; i + 2 < n; i++) { sw += MatrixExt.WersorFromPlane(points[i], points[i + 1], points[i + 2]); } sw = sw.Normalize(2); Vector <double> start = Vector <double> .Build.Dense(4, 0); for (int i = 0; i < 3; i++) { start[i] = sw[i]; } Generate(points, weigths, out iter, start); }
public Triangle(Point p1, Point p2, Point p3, Vector <double> ver = null, int id = 0) { //status = 0; this.id = id; //Edges = new List<Edge>(); vertix = new Point[3] { p1, p2, p3 }; weight = GetArea(); if (ver == null) { versor = MatrixExt.WersorFromPlane(p1, p2, p3); } else { var v = MatrixExt.WersorFromPlane(p1, p2, p3); if ((v - ver).L2Norm() > Control.VertexLinear && (v + ver).L2Norm() > Control.VertexLinear) { ver = MatrixExt.WersorFromPlane(p1, p2, p3); } versor = ver; } }