Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Algorithme de Bresenham
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#31 Message par francois77 » mer. 2 nov. 2022 06:18

Bonjour,

A vous lire je dois être maso, mais heureux de programmer en assembleur

Les macros, je limite au minimum

L’intérêt pour moi c’est de comprendre et de pouvoir faire du pas à pas dans mes programmes

Et il me semble que la rubrique ou je poste est l’assembleur

Bonne journée

A+

Francois

Ps : Merci ! a Temps-x pour son partage

Algorithme de Bresenham
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#32 Message par satinas » mer. 2 nov. 2022 07:23

Bonjour,

C'était de l'humour, et je parlais du cas ou l'on connaît plusieurs langages. En plus les microcontrôleurs sont un cas particulier car un programme C ne sera pas vraiment portable d'une cpu à l'autre, nos applis sont trop liées au hardware.

Temps-x le pic fait les opérations indifféremment sur des valeurs signées ou non signées. Si tu décides que le bit le plus haut représente un signe, et bien les opérations add et sub retourneront une valeur signée correcte.
Et une fois de plus si tu fais Diametre = 1 - rayon, la carry C en sortie de soustraction ne donne pas le signe de Diametre.
Si les 2 valeurs signées sont sur 16 bits, après soustraction 16 bits, le signe de Diametre est dans son bit b15.
Si rayon est signé 8 bits et Diametre signé 16 bits, après soustraction 8 bits, le signe de Diamètre est dans son bit b7, et il faut convertir le nombre 8 bits signé en nombre 16 bits signé :
0xxxxxx donne 00000000 0xxxxxx (nombre positif)
1xxxxxx donne 11111111 1xxxxxx (nombre négatif)
C'est donc plus simple de passer aussi rayon en 16 bits.

Algorithme de Bresenham
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#33 Message par Temps-x » jeu. 3 nov. 2022 01:39

Bonsoir paulfjujo, francois77, satinas, et tout le forum,

francois77 a écrit :Source du message Les macros, je limite au minimum


Une macro évite de réécrire des données, et permet de rendre plus lisible un programme, c'est ce que fait les langages de haut niveau.

Par contre dans certain cas, ça occupe plus de place en mémoire programme.

Quand on utilise des pics de grande capacité, faut pas s'en priver.

francois77 a écrit :Source du message Et il me semble que la rubrique ou je poste est l’assembleur


:+1:

satinas a écrit :Source du message Et une fois de plus si tu fais Diametre = 1 - rayon, la carry C en sortie de soustraction ne donne pas le signe de Diametre.


En retire 1 pixel pour un coté, et comme c'est un rayon en le multiplie par 2 pour avoir la diamètre, le pixel retiré sert à ce que la mesure soit juste.

diametre = 2 * (1 - rayon)

satinas a écrit :Source du message C'est donc plus simple de passer aussi rayon en 16 bits.

Rayon est utilisé qu'une seule fois, après on n'a plus besoin de lui, ok je vais le faire.

Un petit extrait de ce que Maître Bigonoff dit, qui est intéressant

Maintenant, si vous avez bien suivi, vous êtes en train de vous poser la question suivante :

Quand je vois B’11111101’, est-ce que c’est –3 ou est-ce que c’est 253 ?

Et bien vous ne pouvez pas le savoir sans connaître le contexte.

Sachez que les nombres signifient uniquement ce que le concepteur du programme a décidé qu’ils représentent.

S’il travaille avec des nombres signés ou non, ou si cet octet représente tout autre chose (une t°, un caractère, etc).

La seule chose qui importe c’est de respecter les conventions que vous vous êtes fixées lors de la création de cet octet.

C’est donc à vous de décider ce dont vous avez besoin pour tel type de données.

paulfjujo a écrit :Source du message On se croirait entre Ru.... et Uk.... ( ASM et C) , ou l'inverse ( C et ASM )


humour!! Le C à envahi ASM exit


==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Algorithme de Bresenham
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#34 Message par Temps-x » sam. 12 nov. 2022 03:10

Bonjour francois77, et tout le forum,

:-) J'ai mi une nouvelle version en post #1, avec une vidéo sur le rendu.

De plus j'explique les différentes fonctions du code Circle-3.asm, malgré cette version qui se rapproche de très près de la vérité, on peut encore améliorer la qualité du cercle, ce qui permettrais de remplir les cercle, je vais voir ce que je peux faire.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Algorithme de Bresenham
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#35 Message par Temps-x » dim. 13 nov. 2022 20:19

Bonsoir tout le forum,

Temps-x a écrit :Source du message on peut encore améliorer la qualité du cercle, ce qui permettrais de remplir les cercle, je vais voir ce que je peux faire.

oops Et ben non, on ne peut pas améliorer la qualité du cercle, pour faire des essais j'ai utilisé un langage de haut niveau (QuickBasic) ou la fonction circle existe déjà, je n'ai pas pu remplir un cercle en accoladant les cercles l'un à coté des autres, il y a toujours un petit jour.

J'ai refait un essai avec mspaint.exe de Windows XP, j'obtiens le même résultat, voyez par vous même

Cercle.jpg


il est donc impossible de remplir un cercle en accoladant les cercles l'un à coté des autres, à moins qu'un volontaire me démontre le contraire, je suis preneur.

Mais heureusement on peut le faire autrement, :sifflotte: faut juste écrire le code ASM .....

Autre chose, en modifiant la macro on peut maintenant faire des ronds ovale, l'ovalisation et comprise entre 2 et 4. le 1 représente un rond non ovalisé.

je mettrais le code pour cette nouvelle fonction dans le cours du mois

Voici ce que sa donne

Oval-2.jpg


==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Algorithme de Bresenham
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#36 Message par Claudius » lun. 14 nov. 2022 21:14

Bonsoir,
Temps-x à écrit:
... je n'ai pas pu remplir un cercle en accolant les cercles l'un à coté des autres, il y a toujours un petit jour.

Effectivement, l'algorithme de Besenham a une faiblesse intrinsèque et irrémédiable qui ne lui permet pas de paver le plan avec des cercles concentriques :-((

La preuve avec 40 quarts cercles concentriques centrés en (5;3) de rayon allant de 1 à 40 et numérotés A, B, C, ...Y, Z, a, b, c, ... m et n :

Code : Tout sélectionner

   x                    1                   2                   3                   4
 y  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
  0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3 . . . . . 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  4 . . . . . A . B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  5 . . . . . B B C D . E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  6 . . . . . C C D D E F G H I . J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  7 . . . . . D D . E F . G H I J K L M N O P . Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  8 . . . . . E E E F . G H I . J K L M N O P Q R S T U V W X Y . Z a b c d e f g h i j k l m n .
  9 . . . . . F F F G G H . I J K L . M N O P Q R S T U V W X Y Z a b c d e f g h i j . k l m n .
 10 . . . . . G G G H H I I J K . L M N O P Q . R S T U V W X Y Z a b c d e f g h i j k l m n . .
 11 . . . . . H H H I I . J K K L M N . O P Q R S T U V . W X Y Z a b c d e f g h i j k l m n . .
 12 . . . . . I I I . J J K . L M . N O P Q . R S T U V W X Y Z a . b c d e f g h i j k l m n . .
 13 . . . . . J J J J K K L L M . N O P . Q R S T U . V W X Y Z a b c d e f g h . i j k l m n . .
 14 . . . . . K K K K L L . M N N O . P Q R S . T U V W X Y . Z a b c d e f g h i j k l m n . . .
 15 . . . . . L L L L M M M N . O P P Q R . S T U V . W X Y Z a b c d . e f g h i j k l m n . . .
 16 . . . . . M M M M N N N O O P . Q R . S T U . V W X Y . Z a b c d e f g h i . j k l m n . . .
 17 . . . . . N N N N O O O P P Q Q R . S T . U V W X . Y Z a b c . d e f g h i j k l m n . . . .
 18 . . . . . O O O O P P P Q Q . R S S T . U V W . X Y Z a . b c d e f g . h i j k l m n . . . .
 19 . . . . . P P P P . Q Q . R R S . T U U V . W X Y Z . a b c d . e f g h i j k l . m n . . . .
 20 . . . . . Q Q Q Q Q R R R S S T T U . V W W X Y . Z a b c . d e f g h . i j k l m n . . . . .
 21 . . . . . R R R R R S S S T T U U V V W . X Y . Z a b . c d e f . g h i j k l . m n . . . . .
 22 . . . . . S S S S S T T T U U . V . W X X Y . Z a . b c d e . f g h i . j k l m n . . . . . .
 23 . . . . . T T T T T U U U V V V W W X . Y Z Z a . b c d . e f g h . i j k l m . n . . . . . .
 24 . . . . . U U U U U V V V . W W X X Y Y Z . a b b c d . e f g . h i j k . l m n . . . . . . .
 25 . . . . . V V V V V W W W W X X Y Y . Z a a b . c d . e f . g h i j . k l m n . . . . . . . .
 26 . . . . . W W W W W X X X X Y Y . Z Z a . b c c d . e f . g h i . j k l m . n . . . . . . . .
 27 . . . . . X X X X X Y Y Y Y Z Z Z a a b b c . d e e f . g h i . j k l . m n . . . . . . . . .
 28 . . . . . Y Y Y Y Y . Z Z Z a a a b b c c d d e . f g g h i . j k . l m n . . . . . . . . . .
 29 . . . . . Z Z Z Z Z Z a a a . b b c c . d . e f f g . h i . j k . l m n . . . . . . . . . . .
 30 . . . . . a a a a a a b b b b c c d d d e e f . g h h i . j k . l m . n . . . . . . . . . . .
 31 . . . . . b b b b b b c c c c d d . e e f f g g h . i j j k . l m . n . . . . . . . . . . . .
 32 . . . . . c c c c c c d d d d e e e f f g g h h i i j . k l l m . n . . . . . . . . . . . . .
 33 . . . . . d d d d d d e e e e f f f g g . h . i . j k k l . m n n . . . . . . . . . . . . . .
 34 . . . . . e e e e e e f f f f g g g h h h i i j j k . l m m n . . . . . . . . . . . . . . . .
 35 . . . . . f f f f f f g g g g h h h i i i j j k k l l m . n . . . . . . . . . . . . . . . . .
 36 . . . . . g g g g g g h h h h . i i . j j k k l l m m n n . . . . . . . . . . . . . . . . . .
 37 . . . . . h h h h h h i i i i i j j j k k l l . m . n . . . . . . . . . . . . . . . . . . . .
 38 . . . . . i i i i i i j j j j j k k k l l . m m n n . . . . . . . . . . . . . . . . . . . . .
 39 . . . . . j j j j j j . k k k k l l l m m m n n . . . . . . . . . . . . . . . . . . . . . . .
 40 . . . . . k k k k k k k l l l l m m m n n n . . . . . . . . . . . . . . . . . . . . . . . . .
 41 . . . . . l l l l l l l m m m m n n n . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 42 . . . . . m m m m m m m n n n n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 43 . . . . . n n n n n n n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Pour dessiner des "couronnes" de cercles concentriques, il faut se tourner vers l'algorithme d'Andres qui lui, permet d'accoler exactement des cercles concentriques sans "trou" et permet ainsi de paver le plan :-)

La preuve avec les mêmes 40 quarts cercles concentriques centrés en (5;3) de rayon allant de 1 à 40 et numérotés A, B, C, ...Y, Z, a, b, c, ... m et n :

Code : Tout sélectionner

   x                    1                   2                   3                   4
 y  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
  0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3 . . . . . 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  4 . . . . . A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  5 . . . . . B B C D D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  6 . . . . . C C D D E F G H I I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  7 . . . . . D D D E F F G H I J K L M N O P P Q R S T U V W X Y Z a b c d e f g h i j k l m n .
  8 . . . . . E E E F F G H I I J K L M N O P Q R S T U V W X Y Y Z a b c d e f g h i j k l m n .
  9 . . . . . F F F G G H H I J K L M M N O P Q R S T U V W X Y Z a b c d e f g h i j j k l m n .
 10 . . . . . G G G H H I I J K K L M N O P Q Q R S T U V W X Y Z a b c d e f g h i j k l m n . .
 11 . . . . . H H H I I I J K K L M N N O P Q R S T U V V W X Y Z a b c d e f g h i j k l m n . .
 12 . . . . . I I I I J J K K L M M N O P Q Q R S T U V W X Y Z a b b c d e f g h i j k l m n . .
 13 . . . . . J J J J K K L L M M N O P P Q R S T U U V W X Y Z a b c d e f g h h i j k l m n . .
 14 . . . . . K K K K L L M M N N O P P Q R S S T U V W X Y Y Z a b c d e f g h i j k l m n . . .
 15 . . . . . L L L L M M M N N O P P Q R R S T U V V W X Y Z a b c d d e f g h i j k l m n . . .
 16 . . . . . M M M M N N N O O P P Q R R S T U U V W X Y Z Z a b c d e f g h i i j k l m n . . .
 17 . . . . . N N N N O O O P P Q Q R R S T U U V W X X Y Z a b c d d e f g h i j k l m n n . . .
 18 . . . . . O O O O P P P Q Q Q R S S T U U V W W X Y Z a a b c d e f g h h i j k l m n . . . .
 19 . . . . . P P P P P Q Q Q R R S S T U U V W W X Y Z Z a b c d e e f g h i j k l l m n . . . .
 20 . . . . . Q Q Q Q Q R R R S S T T U U V W W X Y Y Z a b c c d e f g h h i j k l m n . . . . .
 21 . . . . . R R R R R S S S T T U U V V W W X Y Y Z a b b c d e f f g h i j k l l m n . . . . .
 22 . . . . . S S S S S T T T U U U V V W X X Y Y Z a b b c d e e f g h i j j k l m n . . . . . .
 23 . . . . . T T T T T U U U V V V W W X X Y Z Z a b b c d d e f g h h i j k l m m n . . . . . .
 24 . . . . . U U U U U V V V V W W X X Y Y Z Z a b b c d d e f g g h i j k k l m n . . . . . . .
 25 . . . . . V V V V V W W W W X X Y Y Z Z a a b b c d d e f g g h i j j k l m n n . . . . . . .
 26 . . . . . W W W W W X X X X Y Y Y Z Z a a b c c d d e f g g h i i j k l m m n . . . . . . . .
 27 . . . . . X X X X X Y Y Y Y Z Z Z a a b b c c d e e f g g h i i j k l l m n . . . . . . . . .
 28 . . . . . Y Y Y Y Y Y Z Z Z a a a b b c c d d e e f g g h i i j k l l m n . . . . . . . . . .
 29 . . . . . Z Z Z Z Z Z a a a b b b c c d d e e f f g g h i i j k k l m n n . . . . . . . . . .
 30 . . . . . a a a a a a b b b b c c d d d e e f f g h h i i j k k l m n n . . . . . . . . . . .
 31 . . . . . b b b b b b c c c c d d d e e f f g g h h i j j k l l m n n . . . . . . . . . . . .
 32 . . . . . c c c c c c d d d d e e e f f g g h h i i j j k l l m n n . . . . . . . . . . . . .
 33 . . . . . d d d d d d e e e e f f f g g h h h i j j k k l l m n n . . . . . . . . . . . . . .
 34 . . . . . e e e e e e f f f f g g g h h h i i j j k k l m m n n . . . . . . . . . . . . . . .
 35 . . . . . f f f f f f g g g g h h h i i i j j k k l l m m n . . . . . . . . . . . . . . . . .
 36 . . . . . g g g g g g h h h h h i i i j j k k l l m m n n . . . . . . . . . . . . . . . . . .
 37 . . . . . h h h h h h i i i i i j j j k k l l l m m n n . . . . . . . . . . . . . . . . . . .
 38 . . . . . i i i i i i j j j j j k k k l l l m m n n . . . . . . . . . . . . . . . . . . . . .
 39 . . . . . j j j j j j j k k k k l l l m m m n n . . . . . . . . . . . . . . . . . . . . . . .
 40 . . . . . k k k k k k k l l l l m m m n n n . . . . . . . . . . . . . . . . . . . . . . . . .
 41 . . . . . l l l l l l l m m m m n n n n . . . . . . . . . . . . . . . . . . . . . . . . . . .
 42 . . . . . m m m m m m m n n n n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 43 . . . . . n n n n n n n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


A suivre...

Algorithme de Bresenham
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#37 Message par Temps-x » mar. 15 nov. 2022 02:06

Bonsoir Claudius, et tout le forum,

Claudius a écrit :Source du message Effectivement, l'algorithme de Besenham a une faiblesse intrinsèque et irrémédiable qui ne lui permet pas de paver le plan avec des cercles concentriques :-)

:+1: pour cette info et cette démonstration :-)

Claudius a écrit :Source du message Pour dessiner des "couronnes" de cercles concentriques, il faut se tourner vers l'algorithme d'Andres qui lui, permet d'accoler exactement des cercles concentriques sans "trou" et permet ainsi de paver le plan :-)


Je vais tester en (QuickBasic) pour voir le résultat, ça m'a l'air plus simple que l'algorithme de Bresenham pour écrire ça en ASM.

Je viens de faire un essai avec l'algorithme d'Andres en mode d'écran 320 x 200 j'ai encore des jours en accoladant les cercles.

:roll: Je vais voir d’où ça peut venir, le mode d'écran y est peut être pour quelque chose.

Merci !

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Algorithme de Bresenham
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#38 Message par francois77 » mar. 15 nov. 2022 15:27

Bonjour à tous

Ma conclusion pour des petits cercles ou des ronds sur un petit écran comme SDD1306

Pour faire des cercles = l'algorithme de Besenham

Pour faire des ronds = l'algorithme d'Andres

En copie j’ai regardé la tête des cercles de l’ algorithme d'Andres et c’est plutôt bof !

Merci à Claudius pour la démonstration et merci à Temps-x pour sa programmation

Perso j’utilise ma version bourrin ( excel > asm) pour faire mes 20 rond + cercles

A+
Francois
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Algorithme de Bresenham
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#39 Message par Temps-x » sam. 19 nov. 2022 02:19

Bonsoir tout le forum,

J'ai testé l'algorithme d'Andres en version ASM, et j'ai était étonné du résultat obtenu, voyez par vous mêmes.

Algorithme d'Andres.jpg


Je le trouve supérieur à l'algorithme de Besenham, la qualité et meilleur, et en plus on peu faire un diamètre bien plus important en 8 bits jusqu'à un rayon de 128 pixels :wink:

Je vous ferais parvenir la source quand je pourrais.

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Algorithme de Bresenham
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#40 Message par francois77 » sam. 19 nov. 2022 07:03

:bravo: :bravo: :bravo: :bravo:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 22 invités