à dessiner des chapeaux

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 07 mars 2018 09:42

En fait, tu dois avoir un tableau aussi grand qu'il y a de points dans une "ligne"?

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1990
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: à dessiner des chapeaux

Message par C.Ret » 07 mars 2018 10:08

C'est bien cela:
DIM Y%(319) pour mémoriser l'ordonnée la plus basse de x%=0 à x%=319 inclus :)
bernouilli92 a écrit :
07 mars 2018 01:02
Pourquoi ne pas juste avoir un tableau Y qui contient les coordonnées Y des points les plus hauts tracés et ensuite n'afficher le point que s'il est plus haut que la valeur correspondante dans Y.
Mais il faut commencer le tracé par l'avant et aller vers l'arrière.
De cette manière, il n'est pas nécessaire d'effacer des points, il suffit juste de ne pas les dessiner.
Je vais méditer cette suggestion qui me parait bien sensée !
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator |HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 07 mars 2018 13:26

C.Ret a écrit :
06 mars 2018 23:38
chapeau_C128D_03.png
C'est marrant, tu as un bout de chapeau en plus que le calcul sur Apple II, sans changer les bornes ??
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1990
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: à dessiner des chapeaux

Message par C.Ret » 07 mars 2018 20:43

jvernet a écrit :
07 mars 2018 13:26
C.Ret a écrit :
06 mars 2018 23:38
chapeau_C128D_03.png
C'est marrant, tu as un bout de chapeau en plus que le calcul sur Apple II, sans changer les bornes ??
Remarque pertinente, je viens de me rendre compte que j'avais arrondi les bornes comme s'il s'agissait d'angles en degré, mais comme l'Apple, le Commodore trigone en radian.
D'où le début "bourrelet supplémentaire" !

Mais j'ai eut du mal à trouver le problème et faire disparaître ce "bourrelet".
En effet, même en prenant des variables au format flottant et en suivant rigoureusement les coefficients utilisés dans le code original, je n'obtenais pas le bon résultat.
J'ai d'abord suspecté une erreur dans le calcul de T (XT sur l'original). Mais non. Puis une erreur d'intervalle pour la boucle sur I. Notamment lors du calcul (ou de l'arrondi de L% (XL sur Apple). Mais non !

Le problème provient surtout de F (v.o. XF) et même en utilisant 4.71238905 ça ne colle pas, je n'obtient pas exactement la forme du chapeau original. J'en étais à suspecter un disfonctionnement des fonctions SIN() qui ne sont pas très bonne sur C=. C'est alors que je me suis souvenu d'une discussion ancienne initié par ben qui se plaignait, à juste titre, des mauvais calcul avec nombre fractionnaires sur les C= 8 bits!

C'est bien ça, le défaut vient des erreurs de calculs que produisent l'utilisation d'un facteur F que mon pauvre Commodore ne peut pas bien représenter un mémoire. D'où une erreur systémique qui surestime T est fait donc apparaître le "bourrelet supplémentaire".

En arrondissant F à 0.032 (qui est un nombre rond pour la représentation interne d'un CBM) au lieur de 5/139 ou même 4.71238905/139, les calculs de T sont bien plus justes (en fait moins faux - rappelons nous que nous tentons de faire des calculs sur un Commodore C= !! ) et j'obtient un chapeau "conforme" à l'original.


bernouilli92 a écrit :
07 mars 2018 01:02
[...]De cette manière, il n'est pas nécessaire d'effacer des points, il suffit juste de ne pas les dessiner.
Je teste cela à l'instant, il suffit de très peu de modifications en fait.

Code : Tout sélectionner

10 dim y%(319) : color 0,1 : color 1,14 : color 4,1 : graphic 1,1 : slow
20 for z=-64 to 64 : z%=5*z*z : l%=sqr(20736-z%)
30 :  for i=-l% to l% :  t=5*sqr(i*i+z%)/139 : y=(sin(t)+sin(3*t)*.4)*56
40 :  :  x%=i-z+160 : y%=90-y-z : if y%<y%(x%) or y%(x%)=0 then y%(x%)=y% : draw 1,x%,y%  
50 next i,z
Pour gagner du temps, je préfère cependant initialiser les éléments du tableau Y%() à 200, ce qui évite le test avec clause OR.
J'en profite pour passer en mode 4 Mhz avec la commande FAST. L'affichage de chapeau disparaît pendant le tracé. Mais réapparait a près 40 bonnes minutes.

En restant en mode SLOW, on peut profiter de l'apparition très lente du chapeau, mais dans ce sens, le tracé est moins hypnotique car non-continu. et on se demande parfois pourquoi rien n'apparait pendant de longues minutes.
Il faut en effet 1h32 pour finir le dessin. Donc l'astuce, qui évite d'effacer, ne fait gagner que 10 min. Et fait perdre le plaisir langoureux de voir chaque strates apparaitre et s'éclipser sous la strate suivante.

D'où d'ailleurs ma version "aveugle" en mode FAST, dont je donne ici la version "chapeau conforme" où F est arrondi comme expliqué ci-dessus:

Code : Tout sélectionner

10 fast : dim y%(319) : color0,1 : color1,14 : color4,16 : graphic1,1 : for i=0 to 319 : y%(i)=200 : next : f=.032
20 for z=-64 to 64 : z%=5*z*z : l%=sqr(20480-z%) : for i=-l% to l% : t=f*sqr(i*i+z%) : y=56*(sin(t)+.4*sin(3*t))
30 x%=160+i-z : y%=90-y-z : if y%<y%(x%) then y%(x%)=y% : draw 1,x%,y%
40 next i,z : color4,1 : slow
chapeau_C128D_04.png
Commodore C128D - Avant vers arrière - Fast - F=.032
chapeau_C128D_04.png (79.38 Kio) Consulté 3869 fois
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator |HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 09 mars 2018 10:22

Une version Apple II. ca ne trace pas le chapeau, mais c'est très paramètrable. D'ailleurs, c'est quoi, les equations du chapeau ?

Source: Microcomputer Graphics for Apple II, un bon bouquin. Qui n'existe pas en PDF, si quelqu'un l'a et peut le scanner, la communauté vous remercie.
1 REM PROGRAM 7.6 (HIDDEN LINES)
2 REM HIDDEN LINE ELIMINATION FOR SURFACES: Z=F(X,Y)
10 REM INITIALIZATION
20 HGR2 : HCOLOR= 3:RHO = 30:THETA = .4:PHI = 1.25:D = 420:CX = 140:CY = 96
30 S1 = SIN (THETA):C1 = COS (THETA)
40 S2 = SIN (PHI):C2 = COS (PHI)
50 DEF FN Z(X) = 7 * EXP ( - .1 * (X ^ 2 + Y ^ 2))
60 DIM YN(280),YX(280)
70 FOR I = 0 TO 279:YN(I) = 191: NEXT I
80 REM POINT GENERATING LOOP
90 FOR X = 8 TO - 8 STEP - 1
100 FL = 0
110 FOR Y = - 8 TO 8 STEP .5
120 Z = FN Z(X)
130 GOSUB 190
140 NEXT Y,X
150 HCOLOR= 2
160 HPLOT 0,0 TO 278,0 TO 278,191 TO 0,191 TO 0,0
170 END
180 REM PLOTTING SUBROUTINE
190 XE = - X * S1 + Y * C1
200 YE = - X * C1 * C2 - Y * S1 * C2 + Z * S2
210 ZE = - X * S2 * C1 - Y * S2 * S1 - Z * C2 + RHO
220 SX = D * (XE / ZE) + CX
230 SY = - D * (YE / ZE) + CY
240 IF FL = 0 THEN FL = 1:F = 0: GOTO 360
250 DX = OX - SX: IF DX = 0 THEN DX = 1
260 SL = (OY - SY) / DX:YP = OY
270 FOR XP = INT (OX) + 1 TO SX
280 FG = 1
290 YP = YP + SL
300 IF XP < 0 OR XP > 279 THEN FG = 0:F = 0: GOTO 350
310 IF YP > 191 OR YP < 0 THEN FG = 0:F = 0
320 IF YP < = YN(XP) THEN 370
330 IF YP > = YX(XP) THEN 420
340 F = 0
350 NEXT XP
360 OX = SX:OY = SY: RETURN
370 YN(XP) = YP
380 IF FG = 0 THEN 410
390 IF F = 0 THEN HPLOT XP,YP:F = 1
400 HPLOT TO XP,YP
410 IF YP < YX(XP) THEN 350
420 YX(XP) = YP
430 IF FG = 0 THEN 460
440 IF F = 0 THEN HPLOT XP,YP:F = 1
450 HPLOT TO XP,YP
460 GOTO 350
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 09 mars 2018 12:11

Sympa le programme! :-)

Quelques petites adaptations pour le faire tourner sur le C-128

Code : Tout sélectionner

1 rem program 7.6 (hidden lines)
2 rem hidden line elimination for surfaces: z=f(x,y)
10 rem initialization
20 graphic 1,1:color 0,1:color 4,1:color 1,6:rho=30:theta=.4:phi=1.25:d=420:cx=1
60:cy=110
30 s1=sin(theta):c1=cos(theta)
40 s2=sin(phi):c2=cos(phi)
50 def fn z(x)=7*exp(-.1*(x^2+y^2))
60 dim yn(320),yx(320)
70 for i=0 to 319:yn(i)=191:next i
80 rem point generating loop
90 for x=8 to -8 step -1
100 fl=0
110 for y=-8 to 8 step .5
120 z = fn z(x)
130 gosub 190
140 next y,x
160 draw 1,0,0 to 319,0 to 319,199 to 0,199 to 0,0
170 end
180 rem plotting subroutine
190 xe=-x*s1+y*c1
200 ye=-x*c1*c2-y*s1*c2+z*s2
210 ze=-x*s2*c1-y*s2*s1-z*c2+rho
220 sx=d*(xe/ze)+cx
230 sy=-d*(ye/ze)+cy
240 if fl=0 then fl=1:f=0:goto 360
250 dx=ox-sx:if dx=0 then dx=1
260 sl=(oy-sy)/dx:yp=oy
270 for xp=int(ox)+1 to sx
280 fg=1
290 yp=yp+sl
300 if xp<0 or xp>319 then fg=0:f=0: goto 350
310 if yp>199 or yp<0 then fg = 0:f = 0
320 if yp<=yn(xp) then 370
330 if yp>=yx(xp) then 420
340 f=0
350 next xp
360 ox=sx:oy=sy:return
370 yn(xp)=yp
380 if fg=0 then 410
390 if f=0 then draw 1,xp,yp:f=1
400 draw 1 to xp,yp
310 if yp>199 or yp<0 then fg = 0:f = 0
320 if yp<=yn(xp) then 370
330 if yp>=yx(xp) then 420
340 f=0
350 next xp
360 ox=sx:oy=sy:return
370 yn(xp)=yp
380 if fg=0 then 410
390 if f=0 then draw 1,xp,yp:f=1
400 draw 1 to xp,yp
410 if yp<yx(xp) then 350
420 yx(xp)=yp
430 if fg=0 then 460
440 if f=0 then draw 1 to xp,yp:f=1
450 draw 1 to xp,yp
460 goto 350
GraphC128.png
GraphC128.png (42.52 Kio) Consulté 3811 fois

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 09 mars 2018 16:10

Il faut un peu tâtonner avec le programme de jvernet :-)
Ondul128.png
51 def fn z(x)=sin(2*(x*x+y*y)^(.5))
Ondul128.png (92.18 Kio) Consulté 3797 fois
Si on ressert un peu les lignes
Ondul128.1.png
Ondul128.1.png (118.96 Kio) Consulté 3791 fois
Le C128 met plus de 3h pour le tracer en mode slow

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 09 mars 2018 17:07

Tu peux jouer sur D (distance), PHI, THETA et RHO les angles de rotation. L'algorithme de face caché n'est toutefois pas optimal (voir en bas à droite de ton graph). Ou si en jouant sur les angles, tu "retourne" la figure: marche plus !
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 09 mars 2018 17:13

Un joli tracé sur mon Core i3 en QBASIC64, 800x600. temps de calcul inferieur au dixième de seconde ;)
des1.JPG
des1.JPG (95 Kio) Consulté 3785 fois
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 09 mars 2018 17:43

Ah oui, mais sur un I3! Moi, j'en suis encore au 8502 ;-)

Tu publies la source QB?

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 10 mars 2018 11:15

Version QB (QuickBasic, QB45 compilé, QB64) un peu pourrie :roll:
Une version en Turbo C pour Atari ST bientot ;)

Code : Tout sélectionner

REM PROGRAM 7.6 (HIDDEN LINES)
REM HIDDEN LINE ELIMINATION FOR SURFACES: Z=F(X,Y)
REM INITIALIZATION
DECLARE FUNCTION zdx! (x!, y!)

DIM SHARED SCLARG, SCHAUT AS INTEGER

SCREEN 12: SCLARG = 640: SCHAUT = 480

DIM SHARED YN(SCLARG), YX(SCLARG) AS INTEGER
DIM SHARED S1, S2, C1, C2 AS SINGLE
DIM RHO, THETA, PHI AS SINGLE
DIM I AS INTEGER
DIM x, y, z AS SINGLE

COUL = 12
RHO = 30: THETA = .5: PHI = 1
D = 800: CX = SCLARG / 2: CY = SCHAUT / 2

REM POINT GENERATING LOOP
S1 = SIN(THETA): C1 = COS(THETA)
S2 = SIN(PHI): C2 = COS(PHI)

CLS
FOR I = 0 TO SCLARG - 1: YN(I) = SCHAUT - 1: NEXT I

FOR x = 8 TO -8 STEP -.2
    FL = 0
    FOR y = -8 TO 8 STEP .1
        z = zdx(x, y)
        REM 7 * EXP(-.1 * (x ^ 2 + y ^ 2))
        GOSUB 190
NEXT y, x

LINE (1, 1)-(SCLARG - 1, SCHAUT - 1), 15, B

END

REM PLOTTING SUBROUTINE
190 XE = -x * S1 + y * C1
YE = -x * C1 * C2 - y * S1 * C2 + z * S2
ze = -x * S2 * C1 - y * S2 * S1 - z * C2 + RHO
SX = D * (XE / ze) + CX
SY = -D * (YE / ze) + CY
IF FL = 0 THEN FL = 1: F = 0: GOTO 360
DX = OX - SX: IF DX = 0 THEN DX = 1
SL = (OY - SY) / DX: YP = OY
270 FOR XP = INT(OX) + 1 TO SX
    FG = 1
    YP = YP + SL
    IF XP < 0 OR XP > SCLARG - 1 THEN FG = 0: F = 0: GOTO 350
    IF YP > SCHAUT - 1 OR YP < 0 THEN FG = 0: F = 0
    IF YP <= YN(XP) THEN 370
    IF YP >= YX(XP) THEN 420
    F = 0
350 NEXT XP
360 OX = SX: OY = SY: RETURN

370 YN(XP) = YP
380 IF FG = 0 THEN 410
390 IF F = 0 THEN PSET (XP, YP), COUL: F = 1
400 LINE -(XP, YP), COUL
410 IF YP < YX(XP) THEN 350
420 YX(XP) = YP
430 IF FG = 0 THEN 460
440 IF F = 0 THEN PSET (XP, YP), COUL: F = 1
450 LINE -(XP, YP), COUL
460 GOTO 350

FUNCTION zdx (x, y)
    REM zdx = 7 * EXP(-.1 * (x ^ 2 + y ^ 2))
    zdx = SIN(2 * (x * x + y * y) ^ (.5))
END FUNCTION

"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 10 mars 2018 12:11

Est-ce qu'il y aurait moyen de faire une version Amiga avec l'AmigaBASIC ? Il y a les fonctions nécessaire ? N'étant pas un grand spécialiste de l'Amiga.

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7727
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: à dessiner des chapeaux

Message par jvernet » 10 mars 2018 13:00

Sûrement! Connais pas du tout.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1348
Inscription : 21 août 2016 19:04

Re: à dessiner des chapeaux

Message par Ben » 10 mars 2018 16:39

jvernet a écrit :
09 mars 2018 17:13
Un joli tracé sur mon Core i3 en QBASIC64, 800x600. temps de calcul inferieur au dixième de seconde ;)
La commande Screen 12, ça donne du 640*480, non?

Sur le I5, on ne voit même pas que ça se dessine, j'ai du mettre la 2e boucle avec un step de 0.0005 pour voir quelque chose.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1990
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: à dessiner des chapeaux

Message par C.Ret » 10 mars 2018 21:30

Pour la version Amiga, je ne sais pas.

Mais je trouve ces derniers programmes bien sympa, en particulier l'étape utilisant la projection 3D de coordonnée (Xe Ye Ze) bien astucieuse.

par contre le code dessinant ou traçant les lignes est très mal foutu, un vrai code spaghetti, bien typique.

J'ai remis un peu d'ordre dans tout cela et j'en ait profité pour mettre les paramètres modifiable avant la ligne 10 comme cela j'ai juste à faire LIST-9 pour facilement les modifier.



L'avantage de cette version est de pouvoir choisir :
- les intervalles à dessiner [ XA XB ] et [ Ya YB] ainsi que la densité des points (NX% et NY% )
- la position de la caméra (RHo THéta et PHi
- le niveau de zoom DD% et les coordonnées pixels du centre de la figure XX% et YY%
- Deux options de rendu CC% qui permet d'éteindre des lignes et colonnes à intervalle régulière (multiple de 2) et mettre en épais les abscisse et coordonnées entières


En jouant avec ces paramètre, on obtient soit le même graphique que ceux de Ben, soit des effets de textures ou un tracé plus rigoureux indiquant avec plus ou moins de contraste les axes entiers.
DOT peak.png
DOT peak.png (53.92 Kio) Consulté 3715 fois
Je vous donne le listing (qui n'est pas TOP-SECRET car ne contient pas de PEEK/POKE/WAIT ou SYS
Mais c'est dommage, car ce n'est pas rapide
Heureusement on peut faire des essais avec peu de points !

Code : Tout sélectionner

1 DEF FN Z(X)=7*EXP(-(X*X+Y*Y)/10)
2 XA=-8 : XB=+8 : NX%=40  : YA=-8 : YB=+8 : NY%=40
3 RH=30 : TH=.4 : PH= 1.25 : DD%=420 : XX%=180 : YY%=110
4 CC%=0 : WW%=1
5 :
    rem ---------------------- INITIALIZE ----------------------
10 COLOR 0,1 : COLOR 4,1 : COLOR 1,2 : GRAPHIC 1,1 : SLOW : DIM YA%(319),YB%(319)
20 C1=COS(TH) : S1=SIN(TH) : C2=COS(PH) : S2=SIN(PH) : UX=(XB-XA)/NX% : UY=(YB-YA)/NY%
30 FOR P=0 TO 319 : YA%(P)=200 : NEXT P 
     rem ---------------------- MAIN LOOP  ----------------------
50 FOR I=0 TO NX% : X=XB-I*UX
60 :  FOR J=0 TO NY% : Y=YA+J*UY
70 :  :  Z=FNZ(X) : GOSUB100
80 NEXT J,I
     rem ---------------------- BOX and END  ----------------------
90 BOX 1,0,0,319,199 : LIST -9 : END


100 REM ---------------  COMPUTE C% X% Y%  (3D XE YE ZE) ----------------------
110 XE=Y*C1-X*S1 : YE=Z*S2-Y*S1*C2-X*C1*C2 : ZE=RH-Z*C2-Y*S1*S2-X*C1*S2
120 X%=XX%+DD%*(XE/ZE) : Y%=YY%-DD%*(YE/ZE)
130 IF CC% THEN C%=SGN((I AND CC%)*(J AND CC%)) : ELSE C%=1
140 WIDTH 1:IF WW% THEN IF ABS(X-INT(X))<.02 OR ABS(Y-INT(Y))<.02 THEN WIDTH 2

200 REM -------------- DRAW (C%) AT X% Y% ----------------------
210 IF X%<0 OR X%>319 THEN RETURN
220 IF Y%<YA%(X%) OR Y%>YB%(X%) THEN DRAW C%,X%,Y% : ELSE 410

300 REM -------------- UPGRADE DRAWING LIMITS YA%() & YB%() ------------------
310 I%=X% : J%=Y% : K%=0 : IF AX%<>X% THEN P=(Y%-AY%)/(X%-AX%) : ELSE P=0
320 DO
330 :  IF J%<YA%(I%) THEN YA%(I%)=J%
340 :  IF J%>YB%(I%) THEN YB%(I%)=J%
350 :  K%=K%+1 : I%=X%-K% : J%=Y%-P*K%
360 LOOP WHILE I%>AX%

400 REM ---------------MEMORIZE LAST POS ----------------------
410 AX%=X%:AY%=Y%:RETURN
C'est le même programme (ou presque) que celui que ben et jvernet et moi utilisons ci-dessus.
C'est jusque que j'ai un peu rangé les instructions, ordonné les numéros de lignes et évité les répétitions de codes et un bon nombre de GOTOs.

Autre différence aussi, il n'y a plus d'instruction DRAW TO c'est à dire plus de tracé de ligne continue. L'idée est de maitriser via les argument NX% et NY% l'apparition des lignes, des points ou de texture plus ou moins denses afin de créer différents effets de "surface"


tilt peak.png
tilt peak.png (119.36 Kio) Consulté 3715 fois
LINE peak.png
LINE peak.png (46.19 Kio) Consulté 3715 fois
WHITE peak.png
WHITE peak.png (75.6 Kio) Consulté 3715 fois
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator |HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Répondre

Revenir vers « A quoi t'as joué hier ? »