Olivier Pécheux
opecheux@multimania.com |
>0) Introduction |
>I) Les exigences des tracés informatiques |
>II) Le segment de droite défini par deux points |
>II.1) Variables de calcul |
deltaX = x2 - x1 deltaY = y2 - y1 | l |
>II.2) Les premières droites |
>II.3) Les belles droites |
l | Il faut dessiner une belle droite! |
*** < (x2,y2) ****** ****** ****** *** ^ (x1,y1) | l |
l | Il ne doit pas y avoir de trous |
*** *** *** <- il va y avoir un problème! *** | l |
l | Les points de départ et d'arrivé doivent être dessinés |
l | Il ne doit pas y avoir 2 points dans un même colonne |
**** ******* ******* **** | l |
l | Les marches doivent être régulières |
**** *** | l |
>III) L'algorithme de Bresenham |
>III.1) Le départ |
>III.2) Points suivants |
*** ****** ****** *** | l |
>III.3) Calcul avec des réels |
l |
Pour dessiner un nouveau point:
|
l | L'erreur doit être inférieure à un demi-pixel |
l | On ne montera jamais deux fois car justement on a choisi des droites qui montent peu (deltaX>=deltaY). |
l |
Pour dessiner une droite:
|
>III.4) Calcul avec des entiers |
l | Ne jamais utiliser des réels! |
l |
Pour dessiner une droite:
|
>III.5) Le test |
l |
Quel est le bon test?
|
l | ** ** |
>III.6) Le chiffre 2. |
l | Si deltaX est impair? |
erreur > ou >= deltaX | l |
erreur > deltaX | l |
2 n > 2 p +1 | l |
2 n > 2 p | l |
l |
Pour dessiner une droite:
|
>III.7) La comparaison |
l | Que peut-on améliorer? |
l |
Pour dessiner une droite:
|
>III.8) Bresenham est mort, vive Martin |
>IV) Algorithme de Martin |
>IV.1) Première astuce de Martin: une seule addition |
l | On va trop loin! On ne peut pas savoir si il faut ajouter deltaY ou deltaY_moins_deltaX que si on fait la comparaison, or pour faire la comparaison, il faut avoir fait l'addition! |
l |
Pour dessiner une droite:
|
>IV.2) Deuxième astuce de Martin: brûler la chandelle par les deux bouts |
l | Que peut-on améliorer? |
l | Oui, mais si deltaX est impair? |
*** < (6,1) *** ^(0,0) | l |
l |
Pour dessiner une droite:
|
>V) Martin est mort vive ??? |
>VI) Toutes les droites quelconques |
l | Et les droites qui descendent? Et celle qui montent beaucoup? Et celles qui vont dans l'autre sens? |
^y \ 3 | 2 / \ | / \ | / 4 \ | / 1 \|/ -----*----->x /|\ 5 / | \ 8 / | \ / | \ / 6 | 7 \ | l |
>VI.1) Directions 1 et 2 |
>VI.2) Les directions opposées |
>VI.3) Directions 1 et 8 |
>VI.4) Ma méthode c'est la meilleure! |
>VII) Conclusion |