Esempio n. 1
0
File: Bezier.cs Progetto: jonc/carto
        // Split a bezier at a particular point into two beziers. Returns false if the point
        // isn't within error of the bezier.
        public bool SplitAtPoint(PointF point, float error, out Bezier bez1, out Bezier bez2)
        {
            bez1 = bez2 = new Bezier();
            float t = FindCoefficient(point, error);
            if (float.IsNaN(t))
                return false;

            SplitAtCoefficient(t, out bez1, out bez2);
            return true;
        }
Esempio n. 2
0
File: Bezier.cs Progetto: jonc/carto
        // Split a bezier at a particular value of t into two beziers of each half
        public void SplitAtCoefficient(float t, out Bezier bez1, out Bezier bez2)
        {
            float s = 1 - t;
            PointF f00t, f01t, f11t, f0tt, f1tt, fttt;
            f00t = f01t = f11t = f0tt = f1tt = fttt = new PointF();

            f00t.X = s * end1.X + t * control1.X;
            f00t.Y = s * end1.Y + t * control1.Y;
            f01t.X = s * control1.X + t * control2.X;
            f01t.Y = s * control1.Y + t * control2.Y;
            f11t.X = s * control2.X + t * end2.X;
            f11t.Y = s * control2.Y + t * end2.Y;
            f0tt.X = s * f00t.X + t * f01t.X;
            f0tt.Y = s * f00t.Y + t * f01t.Y;
            f1tt.X = s * f01t.X + t * f11t.X;
            f1tt.Y = s * f01t.Y + t * f11t.Y;
            fttt.X = s * f0tt.X + t * f1tt.X;
            fttt.Y = s * f0tt.Y + t * f1tt.Y;

            bez1 = new Bezier(end1, f00t, f0tt, fttt);
            bez2 = new Bezier(fttt, f1tt, f11t, end2);
        }