Berechnen der B-Spline Basis-Funktion



  • Hi,
    mein Problem besteht darin dass ich es nicht auf die Reihe bekomme, die
    B-Spline Basisfunktion in C++ code zu implementieren.

    i = das i-te Interval
    p = der Grad des Splines
    u = ein Punkt auf der Spline Kurve

    Der Knotenvektor ist definiert als
    [0, 1, 2, ..., n]

    Von daher brauche ich keinen extra Knotenvektor in meinem code,
    weil der Anfang des i-ten Intervals i und das Ende des i-ten
    Intervals i+1 ist.

    float N(int i, int p, float u)
    {
    	if(p == 0)
    	{
    		if(u >= float(i) and u < float(i+1))
    			return 1.0f;
    
    		return 0.0f;
    	}
    
    	return (u - float(i))     / float(p)   * N(i, p-1, u)  +
    		   (float(i+p+1) - u) / float(p+2) * N(i+1, p-1, u);
    }
    

    Wenn ich jetzt eine Kurve mit 6 Kontrollpunkten und p=3 zeichnen will
    dann bekomme ich keine B-Spline Kurve sondern ein Gebilde, das einem
    Stern ähnelt.

    Weiß jemand was an meinem code falsch ist? Ich sitze jetzt schon
    zwei Tage daran und verstehe einfach nicht was da falsch läuft.

    MfG
    Plassy


Anmelden zum Antworten