Parabel Zeichenen
-
also ich bin gerade dabei eine parabel zu zeichnen. dennoch scheinen mir hier fehler in der berechnung unterlaufen zu sein.
// maxX minX maxY minY = größe der skalierungsreichweite. // ne schränkung damit er nicht ewig zeichnet while (( xP < maxX && xP > minX ) || ( yP < maxY && yP > minY)) { float temporaryX, temporaryY; if ( Durchlauf == 1 ) { temporaryX = xS;// Scheitelpunkt X temporaryY = yS;// Scheitelpunkt Y }else { temporaryX = xP; // Errechneter Punkt X temporaryY = yP; // Errechneter Punkt Y } xP = Feinheit * Durchlauf; // Feinheit = abstand der punkte, je feiner desto genauer und länger die zeichnung. yP =( xP * xP ) * ax; // x² * a pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)+temporaryX+XCorrection,(pb_Malen->Height/2)-temporaryY+YCorrection); pb_Malen->Canvas->LineTo((pb_Malen->Width/2)+xP+XCorrection,(pb_Malen->Height/2)-yP+YCorrection); pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)-temporaryX+XCorrection,(pb_Malen->Height/2)-temporaryY+YCorrection); pb_Malen->Canvas->LineTo((pb_Malen->Width/2)-xP+XCorrection,(pb_Malen->Height/2)-yP+YCorrection); Durchlauf += 1; }
und das kommt dabei raus.
http://img.xrmb2.net/images/393699.jpeg
wie man sieht zieht er nen strich vom eigentlichen scheitelpunkt nach unten zum nullpunkt und macht dann weiter
-
ich schätz mal, bei deiner näherung an den nullpunkt läuft dein float über und lineto schiesst gen himmel.
-
Ich vermute, dass die Formel für Dein Y falsch ist:
Schurke schrieb:
yP =( xP * xP ) * ax; // x² * a
Wenn Der Scheitelpunkt bei xS,yS liegt und der quadratische Koeffizient ax ist, so muss die Formel für yP=f(xP) lauten:
yP = ax * (xP - xS)*(xP - xS) + yS;Gruß
Werner
-
ahh danke danke ^^