1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| void affiche_bezier( signed x1,signed y1,signed xi, signed yi,
signed x2,signed y2,uchar couleur)
{
char chaine[100];
long inc1x,inc2x;
long inc1y,inc2y;
long vx1,vx2,vy1,vy2;
long x,y,xc,yc;
unsigned i;
// Incrments sur les deux segments de l'armature
inc1x = ( (long)(xi-x1) <<16) >> prec;
inc2x = ( (long)(x2-xi) <<16) >> prec;
inc1y = ( (long)(yi-y1) <<16) >> prec;
inc2y = ( (long)(y2-yi) <<16) >> prec;
// Position variante sur les deux segments 1 et 2
vx1=long(x1)<<16; vy1=long(y1)<<16;
vx2=long(xi)<<16; vy2=long(yi)<<16;
x=vx1;
y=vy1;
// Segment variant porteur des points (de coord [(dx1,dy1),(dx2,dy2)] )
for (i=1;i<(1<<prec);i++)
{
xc=x; yc=y;
vx1+=inc1x; vy1+=inc1y;
vx2+=inc2x; vy2+=inc2y;
x=vx1+ ( (vx2-vx1)*i >> prec );
y=vy1+ ( (vy2-vy1)*i >> prec );
qline(xc>>16,yc>>16,x>>16,y>>16,couleur);
}
qline(x>>16,y>>16,x2,y2,couleur); // le dernier segment
} |
Partager