Beispiel #1
0
    public OrientedPoint[] GetWallPath(List <Vector3> pts)
    {
        OrientedPoint[] path = new OrientedPoint[0];
        for (int i = 0; i < pts.Count - 1; i++)
        {
            Vector3 p0, p1, m0, m1;

            p0 = pts[i];
            p1 = pts[i + 1];

            // m0
            if (i == 0)
            {
                m0 = p1 - p0;
            }
            else
            {
                m0 = 0.5f * (p1 - pts[i - 1]);
            }

            // m1
            if (i < pts.Count - 2)
            {
                m1 = 0.5f * (pts[(i + 2) % Points.Count] - p0);
            }
            else
            {
                m1 = p1 - p0;
            }
            OrientedPoint[] pathSegment = CatmullRom.GeneratePath(p0, p1, m0, m1, CurveResolution).ToArray <OrientedPoint>();
            path = path.Concat(pathSegment).ToArray <OrientedPoint>();
        }
        return(path);
    }