lundi 2 janvier 2017

B-spline Curve in c++

Could anyone help me about B-spline Curve error?

I want to draw B-spline Curve in c++, but even though all coordinates are positive, the segment's coordinate is negative.

This is B-spline Curve code.

void BSplineCurve(Dot &ControlPoint1, Dot &ControlPoint2, 
                  Dot &ControlPoint3,Dot &ControlPoint4, 
                  Dot &DrawCurve, double &t){

    double t2 = t * t;
    double t3 = t2 * t;
    double mt3 = (1 - t) * (1 - t) * (1 - t);

    double bi3 = mt3 / 6;
    double bi2 = ((3 * t3) - (6 * t2) + 4) / 6;
    double bi1 = ((-3 * t3) + (3 * t2) + (3 * t) + 1) / 6;
    double bi  = mt3 / 6;

    DrawCurve.x = ControlPoint1.x * bi3;
    DrawCurve.x += ControlPoint2.x * bi2;
    DrawCurve.x += ControlPoint3.x * bi1;
    DrawCurve.x += ControlPoint4.x * bi;

    DrawCurve.y = ControlPoint1.y * bi3;
    DrawCurve.y += ControlPoint2.y * bi2;
    DrawCurve.y += ControlPoint3.y * bi1;
    DrawCurve.y += ControlPoint4.y * bi;
}

This is Drawing Code.

double t = 3.f;
do{

    if ((3 < t) && (t <= 4)) {
    BSplineCurve(ControlPoint1, ControlPoint2, ControlPoint3, ControlPoint4, DrawCurve, t);
    Draw1Dot(DrawCurve.x, DrawCurve.y, DrawCurve.R, DrawCurve.G, DrawCurve.B);
    }
    else if ((4 < t) && (t <= 5)) {
    BSplineCurve(ControlPoint2, ControlPoint3, ControlPoint4, ControlPoint5, DrawCurve, t);
    Draw1Dot(DrawCurve.x, DrawCurve.y, DrawCurve.R, DrawCurve.G, DrawCurve.B);
    }
    else if ((5 < t) && (t <= 6)) {
    BSplineCurve(ControlPoint3, ControlPoint4, ControlPoint5, ControlPoint6, DrawCurve, t);
    Draw1Dot(DrawCurve.x, DrawCurve.y, DrawCurve.R, DrawCurve.G, DrawCurve.B);
    }
    t += 0.001;
} while(t < 6.001);

This is Control Point's coordinate.

Poiont1 : 50, 50

Poiont2 : 50, 100

Poiont3 : 200, 100

Poiont4 : 200, 50

Poiont5 : 350, 50

Poiont6 : 350, 100

But this is 1st segment's coordinate.

Q3 : -1543, -349

Aucun commentaire:

Enregistrer un commentaire