public TrianglePathway(IEnumerable <Triangle> path, bool cyclic = false) { _path = path.ToArray(); //Calculate center points for (int i = 0; i < _path.Length; i++) { _path[i].PointOnPath = (2 * _path[i].A + _path[i].Edge0) / 2; } //Calculate tangents along path for (int i = 0; i < _path.Length; i++) { var bIndex = cyclic ? ((i + 1) % _path.Length) : Math.Min(i + 1, _path.Length - 1); var vectorToNextTriangle = _path[bIndex].PointOnPath - _path[i].PointOnPath; var l = vectorToNextTriangle.Length(); _path[i].Tangent = vectorToNextTriangle / l; if (Math.Abs(l) < float.Epsilon) { _path[i].Tangent = Vector3.Zero; } } _centerline = new PolylinePathway(_path.Select(a => a.PointOnPath).ToArray(), 0.1f, cyclic); }
public TrianglePathway(IEnumerable<Triangle> path, bool cyclic = false) { _path = path.ToArray(); //Calculate center points for (int i = 0; i < _path.Length; i++) _path[i].PointOnPath = (2 * _path[i].A + _path[i].Edge0) / 2; //Calculate tangents along path for (int i = 0; i < _path.Length; i++) { var bIndex = cyclic ? ((i + 1) % _path.Length) : Math.Min(i + 1, _path.Length - 1); var vectorToNextTriangle = _path[bIndex].PointOnPath - _path[i].PointOnPath; var l = vectorToNextTriangle.Length(); _path[i].Tangent = vectorToNextTriangle / l; if (Math.Abs(l) < float.Epsilon) _path[i].Tangent = Vector3.Zero; } _centerline = new PolylinePathway(_path.Select(a => a.PointOnPath).ToArray(), 0.1f, cyclic); }