Bonjour
Je suis sur la réalisation d'un logiciel de dessin vectoriel et je rencontre un pb avec les courbes de Bézier.
Le problème est je pense au niveau algo et pas directement lié au C, donc déplacez le topic si nécessaire...

Disons que ça marche a peu près mais c'est pas très précis.

voici ma fonction pour tracer une courbe:

formule pour un courbe de Bézier cubique (cf wikipédia):
B(t) = P0(1-t)^3 + 3*P1*t(1-t)^2 + 3*P2*t^2*(1-t) + P3*t^3
avec t compris entre 0 (début du traçé) et 1 (fin du traçé)
P0 = pt source, P1-P2 = pts de controles, P3 = pt cible

variables et fonctions:
this->aX, this->aY: position courante du point (donc P0 sur la formule)
ligne(floatx, float y); fonction pour tracer une segment du point courant (this->aX, this->aY) jusqu'à (x,y)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void Draw::bezierCubABS(float x1, float y1, float x2, float y2, float x, float y)
{
	float ptx, pty; //point de destination de chaque segment du traçé
	float t;
 
	for(t=0; t<=1; t+=0.1) {
		ptx = this->aX*pow((1-t),3) + 3*x1*t*pow(1-t, 2) + 3*x2*pow(t, 2)*(1-t) + x*pow(t,3);
		pty = this->aY*pow((1-t),3) + 3*y1*t*pow(1-t, 2) + 3*y2*pow(t, 2)*(1-t) + y*pow(t,3);
		ligne(ptx, pty);
	}
	ligne(x,y); // finit le traçé au cas ou ça ne tombe pas pile poil
 
}
La fonction me trace une espèce de patate qui ressemble à cercle, quand je diminue l'incrémentation de t ça ressemble plus à un cercle mais c'est du coup c'est segmenté.

Une idée?