Nº129 (1/2001)
Download :
|
2001, l?Espace de l?Oric commence bien. Tout d?abord, avec une très large participation à la visu du 13 janvier. Cette fois, la salle était carrément trop petite ! Ensuite, le portail Oric de Jérôme prend de l?ampleur et déménage. Ne manquez pas de visiter le nouveau site : . Vous deviez y trouver toutes les nouveautés au jour le jour. Bien Oricalement. A+
|
|
Le Monastère de Zagorsk : Version Française !
Le Concours O. R. I. C. : Roger Barbier a fait très fort. A vous de jouer !
Dans ce numéro commence une nouvelle série due au tandem inépuisable de Dominique Pessan et Claude Sittler. Nos deux compères vont nous entraîner dans les arcanes du synthétiseur vocal MEA 8000. C’est le moment de vous lancer !
Des Ronds ! Des Ronds ! Et une revendication bruyante de plus ! Si vous voulez des ronds ne manquez pas cet article de Roger Barbier !
|
|
|
|
|
|
sommaire
|
Adresses CEO / Sommaire / Editorial |
|
Page 2
|
Courrier Oricien / Petites annonces |
|
Page 3-7
|
La Libairie Oric (19) |
|
Page 8
|
Divertissements Mathématiques et Logiques |
|
Page 9
|
Des Rond ! Des Ronds ! |
|
Page 10-13
|
Des trucs pour tricher (5) «Circuit Oric» |
|
Page 14
|
Nostalgie... Nostalgie... |
|
Page 15
|
Nouvelles Adresses / Nouveaux Liens |
|
Page 16-17
|
Le Monastère de Zagorsk |
|
Page 18-19
|
Shoot Again (35) «Super Advanced Breakout» |
|
Page 20
|
Aide pour Rush Hour |
|
Page 22
|
Le Synthétiseur Vocal de Micro-Systèmes |
|
Page 23-26
|
Vaches Noires, Vaches Brunes... |
|
Page 27
|
Compte Rendu de l?Assemblée Générale |
|
Page 28-29
|
Abonnements, Anciens numéros, Anciennes disquettes |
|
Page 30
|
|
Non, il ne s?agit ni d?une revendication bruyante avec pancartes et slogans, ni d?un rappel impératif de l?Administration Fiscale, mais plus calmement de quelques infos et réflexions concernant l?instruction «CIRCLE». Tout d?abord, quelles sont les critiques que l?on peut faire:
-Le cercle est ovale.
-Le tracè n?est pas toujours parfaitement symétrique, ni bien centré.
-Il n?y a pas de protection contre le débordement d?écran. (sortie en erreur du programme).
Le cercle est ovale.
La question a déjà fait l?objet des articles suivants dans le CEOmag :
La quadrature du cercle N° 23 par Gilles BOUSSARD Basic utilisant les fonct.trigo.
Cercles et ellipses N° 26 par un certain R.B. Basic type Bresenham modifié.
Le cercle aplati N° 32 -idem- explication et tracés sur imprimante.
J?en avais donné une explication simplette et peu satisfaisante dans le n° 32. Voici, je l?espère, plus complet. Il faut d?abord préciser que les routines de tracé de cercle impliquent que, par unité de longueur, le nombre de points sur l? axe X soit identique au nombre de lignes sur l?axe Y ou, ce qui revient au même, que le point élémentaire théorique soit carré.
Voyons les normes de télévision 50 et 60 hz (valeurs approx.):
Système Lignes visibles Lignes par trame Durée ligne visible totale
525 lignes 60 hz 490 lignes 245 lignes 53 µs 63,5 µs
625 lignes 50 hz 585 lignes 292 lignes 52 µs 64 µs
Le format d?écran étant de 4/3, il faudrait donc, pour avoir un point théorique carré que, pour une trame (cas de l?Oric), le nombre de points par ligne soit 245 * 4/3 = 326 en 60 hz et 292 * 4/3 = 389 en 50 hz (valeurs arrondies), ce qui donne les durées du point théorique carré (= durée ligne visible / nombre de points) :
Système 60 hz : 0,162 µs
Système 50 hz : 0,133 µs
La durée du point généré par l?Oric (6 points par µs) est de 1/6 µs soit 0.166 µs. On voit donc que le système 60 hz donne un point théorique pratiquement carré (0.166 contre 0.162). L?électronique qui assure la génération de l?image a semble-t?il été conçue pour un standard 525 lignes à 60 hz. Il faut noter que les synchros Oric ne font que s?approcher des normes. Quand on regarde le diagramme des synchros Oric, on ne trouve pas 60 hz, mais 59,6 hz. (Voir ANNEXE). Curieux ! erreur de mesure de ma part ? Y a-t?il quelque chose dans la notice anglaise de l?Oric ?
En 50 hz, le point est rectangulaire, étiré en largeur (car il dure 0,166 µs alors qu?un point «carré» devrait durer 0,133 µs), dans un rapport de 0,166 / 0,133 soit 1,24. Ceci tasse donc l?image de l?ordre de 24% en hauteur. Un cercle devient un ovale.
Maintenant que la plupart des téléviseurs récents sont multi-systèmes et s?adaptent automatiquement aux divers modes de synchronisation et de codage, il est facile de faire l?expérience suivante: Nous avons généralement oublié, parmi les attributs disponibles, l?existence des attributs N°24, 26, 28 et 30 soit:
24 ESC X Synchro 60Â hz Texte
26 ESC Z Synchro 50 hz Texte
28 ESC ] Synchro 60Â hz HIRES
30 ESC DEL Synchro 50Â hz HIRES
Alors si l?on possède un téléviseur récent, même bas de gamme, on peut le raccorder à l?Oric soit par la prise Péritel, soit par la prise d?antenne (canal 36). Taper ce court programme (ou entrer en direct) :
10 HIRES : CURSET 120,100,1 : CIRCLE 90,1
20 PRINT «ET VOILA» : PRINT «LE BON» : PRINT «TEST»;
L?écran montre l?ovale habituel et les 3 lignes de texte.
Ensuite, touche ESC , puis touche ]
L?Oric passe en synchro 60Â hz HIRES. L?écran Oric s?étend en hauteur, l?ovale devient cercle. Les caractères sont étirés en hauteur. Avec mon téléviseur, il manque 4 lignes dans la partie texte, soit Å“ caractère en hauteur ?
Cela marche aussi en mode texte et, naturellement, il suffit d?insérer l?instruction convenable dans un programme pour basculer les modes de synchronisation. (FILL L,C,N°attribut et PLOT X,Y,N°attribut)
Le tracé n?est pas toujours bien symétrique, ni bien centré
Chaque point est calculé, sur les 360 degrès. Il y a d?inévitables erreurs dans les arrondis, qui peuvent décaler d?un pixel des points symétriques. Si le calcul était fait pour un arc de 45 degrès et que l?on trace pour chaque point calculé les 7 points ne nécessitant qu?une addition ou une soustraction (inversion des axes et symétriques), l?aspect serait très amélioré et le cercle parfaitement centré. Ceci est fait en partie (calcul sur 90 degrès) dans le programme que j?avais donné dans Cercles et ellipses, qui peut être très amélioré. (voir plus loin).
Pas de protection contre le débordement d?écran
Toutes les instructions graphiques du Basic Oric présentent ce défaut. Il y a bien un test, mais il fait sortir en erreur, ce qui interrompt le programme. Il aurait fallu, au moins, que l?instruction ne trace rien et retourne par exemple un indicateur à tester. Cependant, cela n?aurait pas permis le tracé de cercles débordants car le test actuel vérifie seulement que les données de départ (position du centre + valeur du rayon) ne débordent pas. Un vrai test devrait être fait pour chaque point tracé. Mais cela prend du temps et des octets !
Les programmes Basic cités ci-dessus intègrent cette protection, mais au prix d?un ralentissement notable.
Algorithmes
Les algorithmes permettant de tracer des figures élémentaires ont, dès le début de l?informatique, beaucoup fait travailler les cellules grises des programmeurs, toujours à la recherche, soit de la vitesse maximale pour pouvoir dessiner des figures de plus en plus complexes, soit du minimum de mémoire utilisée (aux temps anciens ou l?octet de mémoire était très coûteux). On sait depuis longtemps qu?il est rare que l?on puisse obtenir à la fois la plus grande vitesse d?exécution et le code machine le plus compact.
Quand on regarde comment est traitée l?instruction CIRCLE, en lisant les pages 332 à 337 de  L?ORIC A NU de Fabrice Broche - trois prosternations devant ce monument (pas Fabrice, mais le bouquin) - il est difficile de se faire une idée du degré d?optimisation de cette instruction. Pouvait-on, à l?époque de la réalisation du Basic Oric, faire mieux avec les contraintes imposées ? Il serait risqué de répondre à cette question, et ce n?est pas le but de cet article, mais on peut quand même y regarder d?un peu plus près.
Algorithme utilisé
La page 336 de l?Oric à nu décrit en cinq lignes Basic le puissant algorithme de calcul de différentielle utilisé, appliqué à la fonction mathématique décrivant une ellipse. Complété pour être utilisable et remis en forme, cela donne le programme suivant :
0 ?CIRCLE ORIC
10 HIRES
15 INPUT»Rayon,Coeff. (R,K) «;R,K
20 X=R:Y=0:N=0
21 ?
29 ? Boucle
30 REPEAT
40 X=X+Y/K
50 Y=Y-X/K
60 CURSET120-X,100-Y,1
65 N=N+1
70 UNTIL X>R
71 ?
80 PRINT N;» points calcules»
85 PRINT»Un autre ? (O/N)»:GET A$:IF A$=»N» THEN TEXT:END
90 GOTO10
Que voit-on ?
Il faut déterminer, pour chaque valeur du rayon, un coefficient K qui fixe les incréments des variables. S?ils sont trop grands, il y aura des points manquants, si trop faibles, certains points seront calculés deux fois, ou plus, ce qui allongera inutilement la durée du tracé. En faisant un test rapide, on voit que la valeur minimale de K, (pas de points manquants ) est légèrement inférieure à R, et qu?il y a toujours quelques points identiques inutiles.
Le tableau suivant donne le résultat pour un tracé sans manques et des valeurs entières de K.
R K calculés identiques
5 5 32 2
10 10 63 1
20 20 126 4
30 30 189 8
40 39* 246 9
50 50 315 19
60 59* 371 14
70 69* 434 13
80 79* 497 13
90 90 566 23
99 98* 616 27
On remarque que en prenant K=R, la marge doit être très faible puisque seulement au dessus d?un rayon de 30 on dispose d?une marge de 1 sur K, sauf pour R=90.
Pour tracer des points contigus un tel algorithme nécessite donc deux divisions par K, dont la valeur doit être au moins égale au rayon, et peu supérieure pour éviter des pas de calcul donnant des points identiques superflus.
En langage machine, il faudrait, pour calculer un point, effectuer deux divisions, ce qui serait lent, même en utilisant la routine de division entière existante dans le Basic Oric.
La lecture du code machine de l?instruction montre que pour éviter cela, l?approximation de K est faite en prenant la puissance de 2 immédiatement supérieure à R. Il en résulte que les deux divisions se réduisent à de simples décalages de bits, ce qui est bien plus rapide. Par contre, on aura en moyenne beaucoup plus de points redoublés. En effet dans un cas extrême, par exemple pour un rayon de 33, le calcul sera fait avec un K de 64 et non de 33 et au lieu de n?avoir que 208 points calculés, il y en aura 403, presque le double, ce qui semble logique puisque le pas de calcul sera presque deux fois plus faible. Bien que l?algorithme soit puissant, la routine est lente car le gain de temps obtenu en remplaçant la division par un décalage conduit à des pertes par calculs superflus.
Un autre algorithme
L?algorithme proposé ci-dessous est l?adaptation d?une procédure bien connue. Il est plus rapide que celui donné dans le N° 26 car il calcule les points par incréments sur un secteur de 45 degrès et trace les 7 autres secteurs par symétrie, ou par inversion des axes. Chaque point de calcul ne nécessite qu?une comparaison et des additions. Tout ceci peut être effectué en entiers sur un et deux octets dans le cas d?une traduction en code 6502.
Le nombre de points calculés pour un tracé est entre 0,7 et 0,8 R (contre environ 6*R de l?algorithme de l?Oric).
Voici le programme Basic correspondant. Les modifications de l?algorithme classique, qui peuvent sembler peu orthodoxes, permettent d?améliorer l?aspect du tracé dans le cas de la faible résolution de l?écran Oric.
0 ?CERCLE par méthode incrémentale
10 ? modifiée R.B
20 ?
30 ?Entree données,Initialisations
40 HIRES
50 X0=120:Y0=100' Position du centre
60 INPUT»Rayon «;R
70 F=1:CURSETX0,Y0,1
80 Y=0:Y2=0:X=R:R2=R*R:X2=R2+R
90 ?
100 ?Boucle de tracé
110 REPEAT
120 XM=X0-X:XP=X0+X:YM=Y0-Y:YP=Y0+Y
130 CURSETXP,YP,F:CURSETXM,YM,F:CURSETXM,YP,F:CURSETXP,YM,F
140 XM=X0-Y:XP=X0+Y:YM=Y0-X:YP=Y0+X
150 CURSETXP,YP,F:CURSETXM,YM,F:CURSETXM,YP,F:CURSETXP,YM,F
160 XS=X2-X-X+1
170 IF(Y2+XS+Y)>=R2 THEN X=X-1:X2=XS
180 Y2=Y2+Y+Y+1:Y=Y+1:UNTIL X
200 ?
210 PRINT»Presser une touche (Q -> quitter)»:GETA$:IFA$=»Q»THEN END
220 GOTO40
Naturellement, pour corriger l?ovale, on peut, comme dans les programmes cités plus haut, agir sur la valeur Y.
En conclusion
J?espère avoir un peu éclairci ce comportement parfois agaçant de l?instruction CIRCLE. Il reste à voir comment on pourrait y remedieren modifiant le code du Basic Oric, ou en écrivant une petite routine CERCLE, appelée par un CALL R,F mais est-ce vraiment nécessaire ? Après tout, nous y sommes habitués, au cercle aplati !
|
|
|
|
|
BROWSE
NUMEROS
[140] - [139] - [138] - [137] - [135] - [134] - [133] - [132] - [131] - [130] - [129]
YEAR
2013 - 2012 - 2011 - 2010 - 2009 - 2008 - 2007 - 2006 - 2005 - 2004 - 2003 - 2002 - 2001 - 2000 - 1999 - 1998 - 1997 - 1996 - 1995 - 1994 - 1993 - 1992 - 1991 - 1990
|