Beispiel #1
0
        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);
        }