DATE
PROG
TRN
<
<
< D E F I N I T I O N S G E N E R A L E S :
<
<
XUNDEF:: VAL -1 < POUR NE DEFINIR QUE LES 'XX...' DANS LES
< FICHIERS DE DEFINITION...
CALL #SIP DEFINITION CTTE#
<
< PREPARATION DE L'APPEL DE #SIP UTILITAIRES# :
<
XXXDEF: VAL XUNDEF
XXXLOC: VAL XUNDEF
XXXTAB: VAL XUNDEF
XXXPRO: VAL XUNDEF
CALL #SIP UTILITAIRES#
<
<
< D E F I N I T I O N D E L ' I M A G E :
<
<
XXXVEC: VAL XUNDEF < AFIN DE NE DEFINIR QUE LES 'XXIMA'...
CALL #SIP VECTEUR 512#
XXXVEC: VAL XXVEC1 < DEFINITION DES CONSTANTES IMAGE/VECTEUR.
CALL #SIP VECTEUR 512#
<
<
< D E F I N I T I O N D E S E S P A C E S :
<
<
DIMGRA:: VAL 3 < ON TRACE DANS L'ESPACE EUCLIDIEN
< A 3 DIMENSIONS...
DIMGR2:: VAL DIMGRA-I < ET UNE DIMENSION DE MOINS...
DIMESP:: VAL 5 < DIMENSION MAXIMALE DE L'ESPACE MULTI-
< CONNECTE QUE L'ON VEUT REPRESENTER.
PAGE
<
<
< O P T I O N S D ' A S S E M B L A G E :
<
<
XOPT01: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'XOPT01'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
XOPT01:: VAL EXIST < TRACE GRAPHIQUE, ET VERIFICATIONS CROI-
< SEES DES EQUATIONS CALCULEES...
XEIF%: VAL ENDIF
PAGE
<
<
< B A S D E L A M E M O I R E :
<
<
ZERO: EQU $
DZS PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY: EQU $
LRM A,K
WORD DEBUT < POINT D'ENTREE DU PROGRAMME,
WORD STACK-DEPILE < INITIALISATION DE LA PILE.
PSR A
RSR < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
PAGE
<
<
< D E F I N I T I O N D U B L O C D E S C R I P T E U R
< D ' U N P O I N T :
<
<
NPOINT:: VAL 400 < NOMBRE DE POINTS DU NUAGE A GENERER...
DSEC
DESCPT: EQU $
DCS3D: EQU $ < DEBUT DE LA LISTE DES COORDONNEES
< TRI-DIMENSIONNELLES DANS L'ESPACE
< EUCLIDIEN DE LA REPRESENTATION GRA-
< PHIQUE :
DFXS: FLOAT <NILK<NILK<NILK < COORDONNEE 'X',
DFYS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Y',
DFZS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Z'.
IF $-DCS3D/DFLOT-DIMGRA,,XEIF%,
IF ATTENTION : LA LISTE DES COORDONNEES EST MAUVAISE !!!
XEIF%: VAL ENDIF
DFWORK: FLOAT <NILK<NILK<NILK < VARIABLE DE MANOEUVRE DESTINEE PAR EXEM-
< PLE A CONTENIR UNE DISTANCE...
NVOIS:: VAL W+W < NOMBRE DE VOISINS POSSIBLES POUR UN
< POINT LE LONG D'UNE DIMENSION.
DNVOIS: WORD NILK < NOMBRE DE VOISINS DU POINT COURANT
< DANS L'ESPACE 'DIMESP'-CONNECTE.
VOISEX:: VAL NEXIST < INDICATEUR DE VOISIN "INOCCUPPE".
IF VOISEX-K,,XEIF%,
IF ATTENTION : 'VOISEX' DOIT ETRE NUL !!!
XEIF%: VAL ENDIF
DLVOIS: EQU $ < LISTE DES VOISINS :
DO NVOIS*DIMESP
WORD VOISEX < IDENTITE DES VOISINS DU POINT COURANT.
<
< FIN DU DESCRIPTEUR :
<
LDESCP:: VAL $-DESCPT < LONGUEUR DU DESCRIPTEUR...
PAGE
<
<
< M E S S A G E S :
<
<
TABLE
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< MOT DESTINE AU BLOC FLOTTANT :
<
COMFLO: WORD NILK < MOT "BIDON" DESTINE AU BLOC FLOTTANT
< POUR QU'IL Y FIT SES MERDES...
ATSFLO: WORD TSFLO < POUR TESTER DE TEMPS EN TEMPS 'COMFLO'...
<
< INDICATEURS DE CONTROLE :
<
ANPOIN: WORD NPOINT < NOMBRE COURANT DE POINTS DU NUAGE.
ADIMGR: WORD DIMGRA < DIMENSION DE L'ESPACE GRAPHIQUE DE
< REPRESENTATION.
RDNMIN: WORD K < MIN(NOMBRE DE VOISINS),
RDNMAX: WORD NVOIS*DIMESP < MAX(NOMBRE DE VOISINS).
ANVOIS: WORD NVOIS*DIMESP < NOMBRE DE VOISINS MAXIMAL QUE PEUT
< POSSEDER UN POINT,
XEPAIS:: VAL 16*XXXMOY+Z < EPAISSEUR MAXIMALE DES RECTANGLES.
AEPAIS: WORD XEPAIS < EPAISSEUR COURANTE DES RECTANGLES.
XNIVP:: VAL 4 < PAS IMPLICITE DE PASSAGE D'UN NIVEAU
< A L'AUTRE.
AXNIVP: WORD XNIVP < PAS COURANT DE PASSAGE D'UN NIVEAU A
< L'AUTRE...
IERASE: WORD EXIST < EFFACER ('EXIST'), OU NON ('NEXIST')
< L'ECRAN 512...
IF XOPT01-EXIST,XOPT1,,XOPT1
IWGPT: WORD EXIST < TRACER ('EXIST') OU PAS ('NEXIST') LE
< NUAGE DE POINTS GENERE.
IWGVOI: WORD EXIST < TRACER ('EXIST') OU PAS ('NEXIST') LES
< VOISINS DU TYPE (P(I),P(J)).
XOPT1: VAL ENDIF
<
< CONSTANTES FLOTTANTES DE BASE :
<
F0: FLOAT <K<K<K < REMISE A ZERO FLOTTANTE...
F1: FLOAT <W<K<K < L'UNITE EN FLOTTANT...
XXXLOC: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
APWORK: EQU APFWOR < POUR LA COMPATIBILITE AVEC LES OVERLAYS
< DE " +" (CF. 'SIO...').
<
< DONNEES DE CALCUL D'UN
< PRODUIT SCALAIRE :
<
APRSCA: WORD PRSCA < CE SOUS-PROGRAMME CALCULE LE PRODUIT
< SCALAIRE DES 2 VECTEURS ARGUMENTS.
<
< POINT TRI-DIMENSIONNEL COURANT :
<
CS3D: EQU $ < DEBUT DES COORDONNEES 3D :
FXS: FLOAT <NILK<NILK<NILK < COORDONNEE 'X' 3D,
FYS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Y' 3D,
FZS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Z' 3D.
LBUF3D:: VAL $-CS3D < NOMBRE DE MOTS POUR UN POINT 3D...
IF LBUF3D/DFLOT-DIMGRA,,XEIF%,
IF ATTENTION : INCOHERENCE DANS LES
IF DIMENSIONS DE L'ESPACE DE TRACE GRAPHIQUE !!!
XEIF%: VAL ENDIF
<
< DONNEES DE 'MOVE' :
<
APMOV1: WORD PMOV1 < DEPLACEMENT DU POINT COURANT (DFXS,DFYS,
< DFZS) VERS (FXS,FYS,FZS).
<
< DONNEES DE LA PROJECTION :
<
FACT: FLOAT <NILK<NILK<NILK < FACTEUR D'ECHELLE...
SFACT: FLOAT <NILK<NILK<NILK < SAUVEGARDE DE 'FACT' A CAUSE DES
< ALT-MODES INTEMPESTIFS...
PZ: FLOAT <NILK<NILK<NILK < POSITION DU POINT DE VUE SUR L'AXE OZ,
< QUI EST DEVANT L'ECRAN...
TRX: WORD NILK < TRANSLATION DU
TRY: WORD NILK < TRACE (VISU ET RASTER).
CS2D: EQU $ < DEBUT DES COORDONNEES 2D :
YS: WORD NILK < COORDONNEES 2D DU
XS: WORD NILK < POINT 3D PROJETE...
LBUF2D:: VAL $-CS2D < NOMBRE DE MOTS NECESSAIRES POUR UN POINT,
LBUFGR:: VAL LBUF2D+LBUF2D < ET POUR UN VECTEUR.
COORDX:: VAL XS-CS2D < INDEX DE LA COORDONNEE 'X',
COORDY:: VAL YS-CS2D < INDEX DE LA COORDONNEE 'Y'.
APROJ: WORD PROJ < SOUS-PROGRAMME DE PROJECTION 3D --> 2D...
IF XOPT01-EXIST,XOPT1,,XOPT1
<
< DONNEES DU TRACE GRAPHIQUE :
<
BUFGR: EQU $
BUFGR1: DZS LBUF2D < ORIGINE D'UN VECTEUR,
BUFGR2: DZS LBUF2D < ET EXTREMITE.
DEMOG: BYTE NVPOUT;FAVOG < MISE EN GRAPHIQUE DE LA VISU.
DEMCG: BYTE NVPOUT;FAVCG < RETOUR EN ALPHA-NUMERIQUE DE LA VISU.
DEMWG: BYTE NVPOUT;FAVWG < ECRITURE GRAPHIQUE D'UN VECTEUR.
WORD BUFGR=FCTA*NOCMO
WORD LBUFGR*NOCMO
DEMWD0: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN MODE NORMAL...
BYTE KESC;'60;KEOT
DEMWD1: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN POINTILLES...
BYTE KESC;'61;KEOT
DEMWD2: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN TIRETES...
BYTE KESC;'63;KEOT
<
< DEMANDE D'EFFACEMENT
< DE L'ECRAN DE LA VISU :
<
DEMERA: BYTE NVPOUT;FAVER < DEMANDE D'EFFACEMENT DE L'ECRAN DE LA
< VISU DE DIALOGUE.
XOPT1: VAL ENDIF
<
< DEMANDE DE TEMPORISATION
< APRES EFFACEMENT :
<
TEMPO: BYTE NVPSER;FONDOR
WORD NILK < INUTILE...
WORD XXXMOY < 2 PETITES SECONDES...
XXXLOC: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXVEC: VAL XXVEC2 < DEFINITION DES DONNEES DU VECTEUR 512...
CALL #SIP VECTEUR 512#
<
< SOUS-PROGRAMMES COMPLEMENTAIRES :
<
VECTAS: WORD VECTP1 < POUR ATTEINDRE 'VECTP1', CAR LE RELAI
< GENERE PRECEDEMMENT VA ETRE ECRASE PAR
< UN APPEL A 'VECTPS' QUI GENERE 4 POINTS
< AU LIEU D'UN SEUL...
<
< COORDONNEES FLOTTANTES
< DU VECTEUR A TRACER :
<
FECGX1: FLOAT <NILK<NILK<NILK < X1,
FECGY1: FLOAT <NILK<NILK<NILK < Y1,
FECGX2: FLOAT <NILK<NILK<NILK < X2,
FECGY2: FLOAT <NILK<NILK<NILK < Y2.
FECGXP: FLOAT <NILK<NILK<NILK < PAS SUR 'X',
FECGYP: FLOAT <NILK<NILK<NILK < PAS SUR 'Y'.
<
< ACCES AUX REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
<
< DONNEES POUR LE GENERATEUR ALEATOIRE :
<
XTYPX:: VAL 3571 < TYPE "COORDONNEE X",
XTYPY:: VAL XTYPX+567 < TYPE "COORDONNEE Y",
XTYPZ:: VAL XTYPY+2391 < TYPE "COORDONNEE Z",
XTYPN:: VAL XTYPZ+12491 < TYPE "NOMBRE DE VOISINS".
RDN7: WORD 793 < DECOMPTEUR D'ACCES A LA SECONDE,
RDN8: WORD 1 < VALEUR COURANTE DE 'RDN7'.
RDN9: WORD 0 < SECONDE COURANTE...
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
RDN1: WORD 5189 < CONSTANTES DE CALCUL
RDN3:: VAL 19 < DES NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
KRDN1: WORD 0
KRDN2: WORD 0
XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'.
XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'.
ASPRDN: WORD SPRDN < GENERATEUR DE NOMBRES ALEATOIRES.
<
< DEFINITION DU NUAGE :
<
AMPOIN: WORD NPOINT < NOMBRE MAXIMAL DE POINTS DU NUAGE.
<
< DONNEES NECESSAIRES A LA
< RECHERCHE DES VOISINS :
<
ANVOIZ: WORD NVOIS*DIMESP+Z < NOMBRE DE VOISIN PAR EXCES MAXIMAL QUE
< PEUT POSSEDER UN POINT.
FWORK0: EQU $ < LISTE DE VARIABLES DE MANOEUVRE EN
< NOMBRE EGAL A LA DIMENSION DE L'ESPACE
< DE REPRESENTATION :
DO DIMGRA
FLOAT <NILK<NILK<NILK
FWORK1: EQU FWORK0
FWORK2: EQU FWORK1+DFLOT
FWORK3: EQU FWORK2+DFLOT
XWOR%1: VAL BASE10=K
XWOR%1: VAL NBITMO-B-XWOR%1 < RANG DU DERNIER BIT DE BASE10...
XWOR%1: VAL CORBT?XWOR%1=FMASK(K?BASE10=FCINST
XWOR%2: VAL XWOR%1=K
XWOR%2: VAL NBITMO-B-XWOR%2
XWOR%3: VAL CORBT?XWOR%2=FMASK(K?XWOR%1=FCINST
IF XWOR%3-K,,XEIF%,
IF ATTENTION : IL Y A PLUS DE 2 BITS A 1 DANS 'BASE10' !!!
XEIF%: VAL ENDIF
XWOR%4: VAL COSBT?XWOR%2=FMASK(K=FCINST
XWOR%4: VAL XWOR%4=K+E < 'XWOR%4' EST UNE VALEUR ENTIERE PAR
< EXCES DE LOG(BASE10) EN BASE2...
XWOR%5: VAL CORBT?BITPAR=FMASK(K?MOCD=FCINST
NTRN
XWOR%5: VAL XWOR%5/XWOR%4 < 'XWOR%5' EST UN EXPOSANT VOISIN DU
< PLUS GRAND...
XWOR%6: VAL XWOR%5/XXXMOY < AFIN DE PREVENIR UNE EVENTUELLE ELEVA-
< TION AU CARRE...
TRN
XWOR%6: VAL XWOR%6-W < AFIN D'AVOIR UNE MARGE DE SECURITE
< SUPPLEMENTAIRE...
FINFIN: FLOAT <W<K<+XWOR%6 < (A,B)=UN NOMBRE FLOTTANT TRES GRAND
< VOISIN DU PLUS GRAND NOMBRE
< FLOTTANT REPRESENTABLE...
<
< DEFINITION DES RECTANGLES :
<
DEPAIS: WORD XEPAIS-Z/XXXMOY < FONCTION DE L'EPAISSEUR COURANTE DES
< RECTANGLES.
XNIV0:: VAL 4 < PREMIER NIVEAU.
WEPAIS: WORD NILK < DONNE UNE VALEUR PROPORTIONNELLE A
< L'EPAISSEUR A DONNER AUX RECTANGLES.
<
< DEFINITION DES DISQUES :
<
SAVEX: WORD NILK < COORDONNEES DU
SAVEY: WORD NILK < CENTRE.
ACERCL: WORD CERCLE < REMPLISSAGE D'UN DISQUE...
PAGE
<
<
< P I L E D E T R A V A I L :
<
<
STACK: EQU $
DZS 64
PROG
USE W,DESCPT
XXXVEC: VAL XXVEC3 < DEFINITION DES PROGRAMMES VECTEUR 512...
CALL #SIP VECTEUR 512#
PAGE
<
<
< T R A C E D ' U N P A V E D E 4 P O I N T S :
<
<
< FONCTION :
< AFIN DE BOUCHER LES TROUS CREES
< LORS DU REMPLISSAGE DES RECTANGLES
< PAR DES VECTEURS PARALLELES, ON
< REMPLACE 'VECTP1' PAR 'VECTPS' QUI
< TRACE UN PAVE DE 4 POINTS...
<
<
VECTPS: EQU $ < PROGRAMME REMPLACANT 'VECTP1' DANS
< L'INTERPOLATEUR...
$EQU VECTA1
WORD VECTPS < POUR TROMPER L'INTERPOLATEUR : CROYANT
< APPELER 'VECTP1', C'EST EN FAIT 'VECTPS'
< QUI SERA REFERENCE...
$EQU VECTPS < RETOUR A 'VECTPS'...
<
< INITIALISATION :
<
PSR A
<
< TRACE DU PAVE ((X,Y),(X+1,Y),(X+1,Y+1),(X,Y+1)) :
<
BSR VECTAS < TRACE DE (X,Y).
LA VECTX1
ADRI I,A
STA VECTX1
BSR VECTAS < TRACE DE (X+1,Y).
LA VECTY1
ADRI I,A
STA VECTY1
BSR VECTAS < TRACE DE (X+1,Y+1).
LA VECTX1
ADRI -I,A
STA VECTX1
BSR VECTAS < TRACE DE (X,Y+1).
LA VECTY1
ADRI -I,A
STA VECTY1 < ET RETOUR A (X,Y)...
<
< ET RETOUR :
<
PLR A
RSR
PAGE
<
<
< T E S T P E R I O D I Q U E D E ' C O M F L O ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST
< APPELE DERRIERE CHAQUE
< 'FDV' EXPLICITE AINSI
< QU'APRES LES APPELS DE
< 'RAC' ET 'CRAMR'...
<
<
TSFLO: EQU $
PSR A
LA COMFLO < TEST DE 'COMFLO' PAR UN 'LA' AFIN DE NE
< PAS MODIFIER LES CODES (CARY & CO)...
JAE TSFLO1 < OK...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
< ON A :
< (A)=INDICATEURS FLOTTANTS...
< BIT 0 : UNDERFLOW,
< BIT 1 : OVERFLOW,
< BIT 2 : DIVISION PAR ZERO,
< BIT 3 : 'FIX' IMPOSSIBLE.
STZ COMFLO < PUIS RAZ, CAR CES INDICATEURS SONT
< REMANENTS...
TSFLO1: EQU $
PLR A
RSR
XXXPRO: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
PAGE
<
<
< D E P L A C E M E N T D U P O I N T C O U R A N T :
<
<
< ARGUMENTS :
< (W)=ADRESSE DU DESCRIPTEUR DE POINT COURANT.
<
<
PMOV1: EQU $
<
< INITIALISATIONS :
<
PSR A,B,X
<
< DEPLACEMENT :
<
LAD DCS3D < (A)=ADRESSE DE L'EMETTEUR (DESCRIPTEUR
< COURANT),
LRM B,X
WORD CS3D < (B)=ADRESSE DU POINT COURANT,
WORD LBUF3D < (X)=NOMBRE DE POINTS A DEPLACER.
MOVE < ET MOVE : DESCRIPTEUR --> (FXS,FYS,FZS).
<
< ET RETOUR :
<
PLR A,B,X
RSR
PAGE
<
<
< P R O J E C T I O N 3 D --> 2 D :
<
<
< ARGUMENT :
< (FXS,FYS,FZS)=POINT 3D.
<
<
< RESULTAT :
< (XS,YS)=POINT 2D PROJETE SUIVANT 'IPROJ'.
<
<
PROJ: EQU $
<
< INITIALISATIONS :
<
PSR A,B < SAUVEGARDES...
#/FLD# FZS
<
< PROJECTION PERSPECTIVE SUR 'OX' :
<
FDV PZ
BSR ATSFLO
FSB F1
BSR AFNEG
BSR ASFWOR < 1-(FZS/PZ)
BSR AFCAZ
JNE EOK3 < OK, 1-(FZS/PZ)#0...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
EOK3: EQU $
#/FLD# FXS
FDV FWORK < FXS/(1-(FZS/PZ))
BSR ATSFLO
<
< CALCUL DE 'XS' :
<
FDV FACT < MISE A L'ECHELLE 2D...
BSR AROND
AD TRX < TRANSLATION 2D...
STA XS
<
< PROJECTION PERSPECTIVE SUR 'OY' :
<
#/FLD# FYS
FDV FWORK < FYS/(1-(FZS/PZ))
BSR ATSFLO
<
< CALCUL DE 'YS' :
<
FDV FACT < MISE A L'ECHELLE 2D...
BSR AROND
AD TRY < TRANSLATION 2D...
STA YS
<
< SORTIE :
<
PLR A,B < RESTAURATIONS...
RSR
XXXPRO: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
PAGE
<
<
< P R O D U I T S C A L A I R E D E 2 V E C T E U R S :
<
<
< ARGUMENTS :
< (A)=ADRESSE DU PREMIER VECTEUR 'VECT1',
< (B)=ADRESSE DU DEUXIEME VECTEUR 'VECT2'.
<
<
< RESULTAT :
< (A,B)=VALEUR DU PRODUIT SCALAIRE...
<
<
< ATTENTION :
< AUX BASES 'L' ET 'W' !!!
<
<
PRSCA: EQU $
VECT1X:: MOT O < X(VECT1),
VECT1Y:: MOT VECT1X+DFLOT < Y(VECT1),
VECT1Z:: MOT VECT1Y+DFLOT < Z(VECT1).
VECT2X:: MOT O < X(VECT2),
VECT2Y:: MOT VECT2X+DFLOT < Y(VECT2),
VECT2Z:: MOT VECT2Y+DFLOT < Z(VECT2).
<
< INITIALISATIONS :
<
PSR Y,L,W < SAUVEGARDE DE 2 BASES ; MAIS 'C' NE DOIT
< PAS ETRE UTILISEE A CAUSE DU BLOC FLOT-
< TANT...
LR L,Y < SAUVEGARDE DE 'L' DANS 'Y' POUR POUVOIR
< ACCEDER EVENTUELLEMENT LE 'LOCAL'...
LR A,L < (L)=BASE DU VECTEUR 'VECT1',
LR B,W < (W)=BASE DU VECTEUR 'VECT2'.
<
< CALCUL DU PRODUIT SCALAIRE :
<
#/FLD# VECT1X,L < X(1),
FMP VECT2X,W < X(1)*X(2),
BSR ASFWOR < ET SAVE...
#/FLD# VECT1Y,L < Y(1),
FMP VECT2Y,W < Y(1)*Y(2),
BSR APFWOR < X(1)*X(2)+Y(1)*Y(2),
< ET SAVE...
#/FLD# VECT1Z,L < Z(1),
FMP VECT2Z,W < Z(1)*Z(2),
BSR APFWOR < (A,B)=X(1)*X(2)+Y(1)*Y(2)+Z(1)*Z(2),
< SOIT LE PRODUIT SCALAIRE DES 2
< VECTEURS 'VECT1' ET 'VECT2'...
< ET MISE DANS 'FWORK', ON NE SAIT
< JAMAIS...
<
< ET RETOUR :
<
PLR Y,L,W
RSR
PAGE
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
< ARGUMENT :
< (X)=FONCTION DU NUMERO DU POINT COURANT,
< (Y)=CODE FONCTION DU TYPE DE COORDONNEE (X/Y/Z).
<
<
< RESULTAT :
< (A,B)=NOMBRE ALEATOIRE FLOTTANT.
<
<
SPRDN: EQU $
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
MP RDN1
SCRD RDN3
JANE SPMOYC
LR B,A
JANE SPMOYC
LA KRDN1
ADRI XKRDN1,A
SCRS XKRDN2
STA KRDN1 < PROGRESSION DE 'KRDN1'...
SPMOYC: EQU $
EORR X,A
STA RDN
DC RDN8
LA RDN9 < (A)=RDN9 A PRIORI...
JNE SPRDN1 < ET BIEN OUI... CE N'EST PAS L'HEURE...
LA RDN7 < C'EST L'HEURE D'ALLER CHERCHER
STA RDN8 < LA SECONDE COURANTE ??!?!??!
ACTD XXXTIM < (A)=HEURE COURANTE EN MULTIPLE DE 2S.
STA RDN9 < ET MEMORISATION...
SPRDN1: EQU $
EOR RDN
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA KRDN2
ADRI -XKRDN2,A
SCRS XKRDN1
STA KRDN2 < PROGRESSION DE 'KRDN2'...
SPMOYF: EQU $
EORR Y,A
STA RDN4
EOR RDN
FLT < (A,B)=NOMBRE ALEATOIRE...
RSR
PAGE
<
<
< T R A C E D ' U N D I S Q U E :
<
<
< FONCTION :
< CE MODULE TRACE UN DISQUE EN
< DEGRADE DESTINE A ETE PLACE A
< CHAQUE EXTREMITE DE RECTANGLE
< TRACE.
<
<
< ARGUMENTS :
< (X,Y)=CENTRE DU DISQUE (LE RAYON EST XEPAIS-Z/XXXMOY).
<
<
CERCLE: EQU $
<
< INITIALISATIONS :
<
PSR X,Y
LR X,B < (B)='X' DU CENTRE,
PSR Y < SAUVEGARDE DE 'Y' DU CENTRE.
LA DEPAIS
SBR A,X < ON SE PLACE EN HAUT ET A GAUCHE
SBR A,Y < D'UN CARRE CIRCONSCRIT AU DISQUE.
STX VECTX1 < INITIALISATION DE L'ABSCISSE INITIALE
< DE CHAQUE LIGNE,
STY VECTY1 < INITIALISATION DE LA COORDONNEE 'Y'.
PLR Y < ON A :
< (B,Y)=COORDONNEES DU CENTRE.
<
< BALAYAGE VERTICAL :
<
LX DEPAIS < (X)=NOMBRE DE LIGNES A BALAYER.
ADRI Z,A
CERCL1: EQU $
LA VECTX1
PSR A,X < SAUVEGARDE DE L'ABSCISSE INITIALE
< DE CHAQUE LIGNE (A) ET DU NOMBRE DE
< LIGNES A TRACER (X).
<
< BALAYAGE HORIZONTAL :
<
LX DEPAIS < (X)=NOMBRE DE POINTS PAR LIGNE.
ADRI Z,A
CERCL2: EQU $
PSR B < SAUVEGARDE DE LA COORDONNEE 'X'
< DU CENTRE.
LA VECTX1 < X1,
SBR B,A < X1-XC,
BSR AFLT
#/FST# FWORK1 < X1-XC,
FMP FWORK1 < (X1-XC)**2,
BSR ASFWOR
LA VECTY1 < Y1,
SBR Y,A < Y1-YC ((XC,YC) DESIGNE LE CENTRE).
BSR AFLT
#/FST# FWORK2 < Y1-YC,
FMP FWORK2 < (Y1-YC)**2,
BSR APFWOR < (X1-XC)**2+(Y1-YC)**2,
BSR ARAC < ET CALCUL DE LA DISTANCE DU POINT
< COURANT (X1,Y1) AU CENTRE (XC,YC) :
BSR ATSFLO
BSR AROND
CP DEPAIS < EST-ON HORS DU DISQUE ??
JGE CERCL3 < OUI, ON IGNORE CE POINT...
SB DEPAIS < NON :
NGR A,A < ON CALCULE DONC LE NIVEAU DU
< POINT QUE L'ON VA TRACER :
MP AXNIVP
ADRI XNIV0,B
STB VENIVO < CE NIVEAU EST PROPORTIONNEL A LA
< DISTANCE AU CENTRE...
LA VECTX1
LB VECTY1
PSR A,B < SAUVEGARDE DE (X1,Y1) VISU...
SARS XXDEDX
STA VECTX1 < PASSAGE AUX
LR B,A
SARS XXDEDY
STA VECTY1 < COORDONNEES 512...
BSR VECTA1 < ET ON MARQUE LE POINT (X1,Y1)...
PLR A,B
STA VECTX1 < RESTAURE LES
STB VECTY1 < COORDONNEES VISU...
CERCL3: EQU $
PLR B < RESTAURE L'ABSCISSE DU CENTRE,
DO BIT>XXDEDX
IC VECTX1 < ET PROGRESSION SUR LA LIGNE,
JDX CERCL2 < A CONDITION DE N'ETRE POINT EN BOUT
< DE LIGNE...
PLR A,X < RESTAURE :
< (A)='VECTX1' DE DEBUT DE LIGNE,
< (X)=NOMBRE DE LIGNES A TRACER...
STA VECTX1 < ON SE PLACE EN DEBUT
DO BIT>XXDEDY
IC VECTY1 < DE LA NOUVELLE LIGNE,
JDX CERCL1 < SI ELLE EXISTE...
<
< ET RETOUR :
<
PLR X,Y
RSR
PAGE
<
<
< P O I N T D ' E N T R E E :
<
<
DEBUT: EQU $
<
< INITIALISATION DES REGISTRES :
<
LRM C,K
WORD COM+DEPBAS < POSITIONNEMENT DE 'C',
WORD STACK-DEPILE < ET DE 'K'.
<
< CONNEXION A LA 'CDA' :
<
LAI PAGER
BSR AGPCDA < AFIN D'ATTEINDRE LA MEMOIRE DU '68000'
< ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE
< AFIN D'Y METTRE 'BUF'...
<
<
< E N T R Y D E R E B O U C L A G E :
<
<
#/FLD# FACT < SAUVEGARDE DE 'FACT'
#/FST# SFACT < A CAUSE DES ALT-
< MODES INTEMPESTIFS...
DEBUT4: EQU $
#/FLD# SFACT
#/FST# FACT < AU CAS OU UN MALHEUREUX ALT-MODE...
<
< MODIFICATION A PRIORI DU 'PRESC' :
<
LRM A
WORD DEBUT5 < POUR 'XXXPRE'...
ACTD XXXPRE < ON CHANGE ALORS SYSTEMATIQUEMENT APRES
< PASSAGE ICI LE 'PRESC' DU PROGRAMME, AFIN
< DE REVENIR SUR LA VISUALISATION APRES
< CHAQUE ALT-MODE (VIA 'DEBUT5'...).
<
< VALIDATION DE 'ANVOIS' :
<
DEBUT6: EQU $
LA ANVOIS < ACCES A 'ANVOIS' :
JALE DEBUT7 < ERREUR...
CPI NVOIS*DIMESP < VALIDATION :
JLE DEBUT8 < OK...
DEBUT7: EQU $
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
JMP DEBUT6 < ET ON RE-TESTE !!!
DEBUT8: EQU $
ADRI Z,A
STA ANVOIZ < ET ON CALCULE 'ANVOIZ' AU CAS OU
< 'DIMESP' AURAIT ETE MODIFIE SOUS
< 'DEBUG' DANS 'ANVOIS'...
<
< VALIDATION DE 'ANPOIN' :
<
DEBUT9: EQU $
LA ANPOIN < ACCES A 'ANPOIN' :
JALE DEBUTA < ERREUR...
CP AMPOIN < VALIDATION :
JLE DEBUTB < OK...
DEBUTA: EQU $
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
JMP DEBUT9 < ET ON RE-TESTE !!!
DEBUTB: EQU $
<
< VALIDATION DE 'AEPAIS' :
<
DEBUTC: EQU $
LA AEPAIS < (A)=EPAISSEUR DEMANDEE POUR LES
< RECTANGLES,
JALE DEBUTE < ERREUR...
CPI XEPAIS
JG DEBUTE < ERREUR...
ADRI -Z,A
SLRS XXXMOY=K < CALCUL DE XEPAIS-Z/XXXMOY :
JALE DEBUTE < ERREUR...
JNC DEBUTD < OK, LA DIVISION TOMBE JUSTE...
DEBUTE: EQU $
QUIT XXQUIT < 'AEPAIS' DOIT ETRE IMPAIR ET DE VALEUR
< VALEUR CONVENABLE...
JMP DEBUTC < ET ON RE-TESTE...
DEBUTD: EQU $
STA DEPAIS < ET MEMORISATION DE XEPAIS-Z/XXXMOY...
<
< VALIDATION DE (RDNMIN,RDNMAX) :
<
DEBUTF: EQU $
LA RDNMIN
CP RDNMAX
JLE DEBUTG < OK : MIN <= MAX...
QUIT XXQUIT < POUR CORRIGER...
JMP DEBUTF < ET ON RE-TESTE...
DEBUTG: EQU $
<
<
< G E N E R A T I O N D U N U A G E D E P O I N T S :
<
<
LX ANPOIN < (X)=NOMBRE DE POINTS A GENERER,
LRM W
WORD LPOINT < (W)=ADRESSE DE BASE DE LA LISTE DES
< DESCIPTEURS DE POINTS.
GEN1: EQU $
<
< GENERATION DES COORDONNEES :
<
LRM Y
WORD XTYPX < (Y)=TYPE "COORDONNEE X".
BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE,
#/FST# DFXS < CE QUI DONNE 'X' ALEATOIRE.
LRM Y
WORD XTYPY < (Y)=TYPE "COORDONNEE Y",
BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE,
#/FST# DFYS < CE QUI DONNE 'Y' ALEATOIRE.
#/FLD# F0
#/FST# DFZS < DFZS=0 A PRIORI...
LA ADIMGR
CPI DIMGRA < COMBIEN DE DIMENSIONS POUR LA VISUALI-
< SATION ???
JNE GEN5 < 2...
LRM Y < 3...
WORD XTYPZ < (Y)=TYPE "COORDONNEE Z",
BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE,
#/FST# DFZS < CE QUI DONNE 'Z' ALEATOIRE.
GEN5: EQU $
<
< INITIALISATION DES
< DIVERS INDICATEURS :
<
PSR X
#/FLD# F0
#/FST# DFWORK < DFWORK=0.
STZ DNVOIS < DNVOIS=0.
LAD DLVOIS
LR A,L < (L)=BASE LA LISTE DES VOISINS.
LRM A
WORD VOISEX < (A)=INDICATEUR "PAS DE VOISIN",
LX ANVOIS < (X)=NOMBRE MAXIMAL DE VOISINS.
GEN4: EQU $
STA O,L < PAS DE VOISINS POUR LE POINT COURANT.
ADRI D,L
JDX GEN4
PLR X < RESTAURE :
< (X)=NOMBRE DE POINTS ENCORE A INITIALISER
ADRI LDESCP,W < PASSAGE AU DESCRIPTEUR SUIVANT,
JDX GEN1 < S'IL EXISTE...
IF XOPT01-EXIST,XOPT1,,XOPT1
<
<
< T R A C E D U N U A G E D E P O I N T S :
<
<
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ IWGPT < DOIT-ON TRACER LE NUAGE ???
JE GEN2 < NON...
#/FLD# FACT
PSR A,B < SAUVEGARDE DE 'FACT'...
FDV F05
#/FST# FACT < AFIN DE VOIR L'ENSEMBLE DU DESSIN...
LAD DEMERA < OUI :
SVC < ON EFFACE L'ECRAN.
LX ANPOIN < (X)=NOMBRE DE POINTS A TRACER,
LRM W
WORD LPOINT < (W)=ADRESSE DE LA LISTE DES DESCRIPTEURS.
GEN3: EQU $
PSR X
BSR APMOV1 < DEPLACEMENT DU DESCRIPTEUR COURANT (W)
< VERS LE POINT COURANT (FXS,FYS,FZS),
BSR APROJ < ET PROJECTION 2D --> 3D.
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE,
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'ORIGINE.
LRM B,X
WORD BUFGR2 < (B)=ADRESSE DU BUFFER EXTREMITE GRAPHIQUE
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'EXTREMITE.
LAD DEMOG
SVC < ET ON FAIT UNE MISE EN GRAPHIQUE, PERMET-
< TANT PAR LA MEME OCCASION DE NE PAS
< CHAINER LES POINTS ENTRE-EUX...
LAD DEMWG
SVC < TRACE DU POINT COURANT...
PLR X < RESTAURE LE DECOMPTE,
ADRI LDESCP,W < PASSAGE AU DESCRIPTEUR SUIVANT,
JDX GEN3 < S'IL EXISTE...
LAD DEMCG
SVC < ET RETOUR EN ALPHA-NUMERIQUE...
PLR A,B
#/FST# FACT < RESTAURATION DE 'FACT'...
GEN2: EQU $
XOPT1: VAL ENDIF
<
<
< G E N E R A T I O N D E S V O I S I N S D E
< C H A Q U E P O I N T D U N U A G E :
<
<
< FONCTION :
< ON VIENT DE GENERER LA LISTE
< DES POINTS P(I) DU NUAGE ; POUR
< CHAQUE POINT P(I) 0<I<N, ON VA
< RECHERCHER SES PLUS PROCHES
< VOISINS P(J) I<J<N ; DE PLUS,
< IL CONVIENT DE NE PAS OUBLIER
< LA RELATION : D(P(I),P(J))=D(P(J),P(I)),
< OU 'D' REPRESENTE LA DISTANCE
< EUCLIDIENNE...
<
<
LX ANPOIN < (X)=NOMBRE DE POINTS DU NUAGE,
LRM W
WORD LPOINT < (W)=ADRESSE DE LA LISTE DES DESCRIPTEURS
< DES POINTS.
<
< BOUCLE DE PARCOURS DES P(I) :
<
GEN10: EQU $
<
< GENERATION DU NOMBRE DE
< VOISINS AUTORISES POUR
< LE POINT COURANT P(I) :
<
GEN14: EQU $
LRM Y
WORD XTYPN < (Y)=TYPE "NOMBRE DE VOISINS",
BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE FLOTTANT,
BSR AFABS < (A,B)=NOMBRE ALEATOIRE POSITIF FLOTTANT,
BSR AROND < (A)=NOMBRE ALEATOIRE POSITIF ENTIER,
SARD NBITMO
DV ANVOIZ
LR B,A < (A)=NOMBRE ALEATOIRE SITUE DANS LE
< SEGMENT (0,NVOIS*DIMESP).
CP RDNMIN
JL GEN14 < ON SOUHAITE
CP RDNMAX
JG GEN14 < ETRE DANS (MIN,MAX)...
CP DNVOIS < P(I) N'AURAIT-IL PAS DEJA UN NOMBRE
< VOISINS SUFFISANT, OBTENUS LORS DE LA
< RECHERCHE DES P(J) DE P(I) ANTERIEURS ???
JLE GEN11 < OUI, PASSONS AU P(I) SUIVANT...
XM DNVOIS < NON, ON MET DONC DANS 'DNVOIS' LE MAX
< ENTRE LE NOMBRE ALEATOIRE (B), ET LE
< 'DNVOIS' ANTERIEUR,
SBR A,B < (B)=NOMBRE DE VOISINS ENCORE A GENERER,
LR B,Y < (Y)=NOMBRE DE VOISINS A GENERER POUR LE
< POINT P(I) COURANT.
LR W,L < (L)=ADRESSE DU DESCRIPTEUR DU POINT
< P(I) COURANT.
<
< BOUCLE DE PARCOURS DES
< P(J), AVEC I<J<N :
<
PSR X,W
ADRI -W,X < (X)=NOMBRE DE P(J) A TESTER (PUISQUE
< L'ON A I<J).
CPZR X < L'ENSEMBLE (P(J)) EST-IL VIDE ???
JE GEN12 < OUI, RIEN A FAIRE, ON A FINI...
ADRI LDESCP,W < (W)=ADRESSE DU DESCRIPTEUR DU PREMIER
< POINT P(J).
<
< CALCUL DE D(P(I),P(J))
< POUR TOUT J (I<J<N) :
<
PSR X,W < SAUVEGARDE DE LA BASE DES DESCRIPTEURS
< DES P(J) (W), ET DU CARDINAL DE CET
< ENSEMBLE (X).
GEN13: EQU $
#/FLD# DFXS
FSB DFXS-DESCPT,L
#/FST# FWORK1 < FWORK1=X(P(J))-X(P(I)).
#/FLD# DFYS
FSB DFYS-DESCPT,L
#/FST# FWORK2 < FWORK2=Y(P(J))-Y(P(I)).
#/FLD# DFZS
FSB DFZS-DESCPT,L
#/FST# FWORK3 < FWORK3=Z(P(J))-Z(P(I)).
LAD FWORK0
LR A,B < (A)=(B)=ADRESSE DE LA LISTE DES COOR-
< DONNEES DU VECTEUR (P(I),P(J)).
BSR APRSCA
BSR ARAC < (A,B)=D(P(I),P(J)),
BSR ATSFLO
#/FST# DFWORK < DFWORK(P(J)) <-- D(P(I),P(J)).
ADRI LDESCP,W < PASSAGE AU POINT P(J) SUIVANT,
JDX GEN13 < S'IL EXISTE...
PLR X,W < RESTAURE :
< (X)=CARDINAL DE L'ENSEMBLE (P(J)),
< (W)=ADRESSE DE BASE DES DESCRIPTEURS DE
< L'ENSEMBLE (P(J)).
<
< RECHERCHE DES (Y) PLUS
< PROCHES VOISINS DE P(I) :
<
GEN20: EQU $
CPZR Y < LES A-T'ON TOUS TROUVES ???
JE GEN21 < OUI, PASSONS AU POINT P(I) SUIVANT...
GEN24: EQU $
#/FLD# FINFIN < NON,
< (A,B)=MIN(D(P(I),P(J))) COURANT.
PSR X,Y,W
GEN22: EQU $
FCMZ DFWORK < EST-ON SUR P(I)=P(J) ???
JE GEN23 < OUI, ON DOIT DONC IGNORE CE POINT P(J)...
FCAM DFWORK < TEST DE D(P(I),P(J)) POUR P(J) COURANT :
JLE GEN23 < TROP GRAND...
#/FLD# DFWORK < OK, D(P(I),P(J)) DEVIENT LE 'MIN'
< COURANT,
LR W,Y < ET ON MEMORISE DANS 'Y' L'ADRESSE DU
< DESCRIPTEUR DE P(J).
GEN23: EQU $
ADRI LDESCP,W < PASSAGE AU POINT P(J) SUIVANT,
JDX GEN22 < S'IL EXISTE...
FCAM FINFIN < A-T'ON TROUVE UN MINIMUM ???
JE GEN50 < NON, ON DOIT SE TROUVER PRES DE LA
< FIN DE LA LISTE DES POINTS DU NUAGE...
LR Y,W < (W)=ADRESSE DU DESCRIPTEUR DU PLUS
< PROCHE VOISIN COURANT P(J) DU
< POINT P(I) :
#/FLD# FINFIN
#/FST# DFWORK < ON MAJORE LOURDEMENT LA DISTANCE, AFIN
< DE NE PLUS RETROUVER CE POINT P(J) LORS
< DE L'ITERATION SUIVANTE POUR P(I)...
LA DNVOIS < (A)=NOMBRE DE VOISINS COURANT DE P(J) :
CP RDNMAX < MAIS P(J) NE SERAIT-IL PAS DEJA SATURE
< EN VOISINS ???
JGE GEN79 < OUI, ON IGNORE P(J)...
CP ANVOIS < MEME QUESTION ???
JL GEN29 < NON...
GEN79: EQU $
PLR X,Y,W < OUI, RESTAURE :
< (X)=CARDINAL DE (P(J)),
< (Y)=NOMBRE DE VOISINS POUR P(I),
< (W)=BASE DES DESCRIPTEURS DE L'ENSEM-
< BLE (P(J)).
JMP GEN24 < VERS LA RECHERCHE D'UN AUTRE PLUS PROCHE
< VOISIN DE P(I) PUISQUE L'ON VIENT
< D'ECHOUER ICI...
GEN29: EQU $
IC DNVOIS < COMPTABILISONS LES VOISINS DE P(J),
< PUISQUE L'ON A LA RELATION :
< D(P(I),P(J))=D(P(J),P(I))...
ADRI DLVOIS-DESCPT,W < PLACONS NOUS SUR LA LISTE DES VOISINS
< DE P(J),
LX ANVOIS < (X)=NOMBRE DE VOISINS MAXIMAL.
GEN25: EQU $
IF VOISEX-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ O,W < ET CHERCHONS UN EMPLACEMENT LIBRE...
JE GEN26 < OK, TROUVE...
ADRI D,W < NON,
JDX GEN25 < AU SUIVANT...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
JMP GEN40 <ET ON SAUTE LA MISE A JOUR...
GEN26: EQU $
NGR L,A < (A)=ADRESSE DU DESCRIPTEUR DE P(I),
STA O,W < QUE L'ON INSERE DANS LA LISTE DES
< VOISINS DE P(J) ; CELLE-CI EST INSEREE
< EN NEGATIF, AFIN DE MEMORISER LE FAIT
< QU'ELLE FIGURE DANS LA LISTE DES VOI-
< SINS DE P(I)...
LR L,W < (W)=ADRESSE DU DESCRIPTEUR DE P(I),
ADRI DLVOIS-DESCPT,W < PLACONS-NOUS SUR LA LISTE DES VOISINS
< DE P(I),
LX ANVOIS < (X)=NOMBRE DE VOISINS MAXIMAL.
GEN27: EQU $
IF VOISEX-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ O,W < ET CHERCHONS UN EMPLACEMENT LIBRE...
JE GEN28 < OK...
ADRI D,W < NON,
JDX GEN27 < AU SUIVANT...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
JMP GEN41 < ET ON SAUTE LA MISE A JOUR...
GEN28: EQU $
STY O,W < ET L'ON INSERE L'ADRESSE DU DESCRIPTEUR
< DE P(J) (Y) DANS LA LISTE DES VOISINS
< DE P(I).
GEN40: EQU $
GEN41: EQU $
GEN50: EQU $
PLR X,Y,W < RESTAURE :
< (X)=CARDINAL DE L'ENSEMBLE (P(J)),
< (Y)=NOMBRE DE VOISINS A TROUVER POUR
< P(I),
< (W)=ADRESSE DE BASE DES DESCRIPTEURS
< DE L'ENSEMBLE (P(J)).
ADRI -I,Y < ET UN VOISINS DE MOINS A TROUVER POUR
< P(I)...
JMP GEN20 < VERS LES VOISINS SUIVANTS...
<
< BOUCLE DE BALAYAGE DES P(I) :
<
GEN21: EQU $
GEN12: EQU $
PLR X,W < RESTAURE :
< (X)=NOMBRE DE POINTS P(I),
< (W)=ADRESSE DU P(I) COURANT.
<
< CALCUL DU 'DNVOIS' REEL :
<
PSR X,W < RE-SAUVEGARDE TEMPORAIRE...
LX ANVOIS < (X)=NOMBRE DE VOISINS MAXIMAL,
LYI K < (Y)=COMPTEUR DES VOISINS GENERES,
ADRI DLVOIS-DESCPT,W < (W)=BASE DE LA LISTE DES VOISINS DE P(I),
GEN42: EQU $
IF VOISEX-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ O,W < A-T'ON ICI UN VOISIN ???
JE GEN43 < NON...
ADRI I,Y < OUI, ON LE COMPTE,
GEN43: EQU $
ADRI D,W < PASSAGE AU VOISIN SUIVANT EVENTUEL,
JDX GEN42 < S'IL EXISTE...
PLR X,W < RESTAURATIONS,
STY DNVOIS < ET MISE EN PLACE DU NOMBRE DE VOISINS
< REELLEMENT GENERE...
<
< TRI DES VOISINS PAR ADRESSE
< DECROISSANTE DES DESCRIPTEURS :
<
PSR X,W
LX DNVOIS < (X)=NOMBRE REEL DE VOISINS,
ADRI DLVOIS-DESCPT,W < (W)=ADRESSE DE LA LISTE DES VOISINS.
GEN73: EQU $
ADRI -I,X < (X)=NOMBRE DE TESTS A FAIRE POUR TRIER
< PAR PERMUTATION 2 A 2...
LR X,A
CPI W < Y-A-T'IL AU MOINS 1 VOISIN ???
JL GEN74 < NON...
PSR X,W
GEN71: EQU $
LA O,W < ACCES A L'ELEMENT COURANT,
CP O+D,W < ET COMPARAISON AU SUIVANT :
JGE GEN72 < OK, LE PLUS GRAND EST DEJA DEVANT...
XM O+D,W < NON,
STA O,W < ON LES PERMUTE...
GEN72: EQU $
ADRI D,W < PASSAGE A L'ELEMENT SUIVANT,
JDX GEN71 < S'IL EXISTE...
PLR X,W
JMP GEN73 < MAINTENANT QUE LE MINIMUMM EST EN QUEUE,
< PASSONS A UN UN MINIMUM INFERIEUR...
GEN74: EQU $
PLR X,W < NON, ON A FINI LE TRI...
GEN11: EQU $
ADRI LDESCP,W < PASSAGE AU POINT P(I) SUIVAT,
JDX GEN110 < S'IL EXISTE...
JMP GEN111 < VERS LA VISUALISATION...
GEN110: EQU $
BSR AGOTO
WORD GEN10 < VERS LE POINT P(I) SUIVANT...
GEN111: EQU $
IF XOPT01-EXIST,XOPT1,,XOPT1
<
<
< V I S U A L I S A T I O N D E S V O I S I N A G E S :
<
<
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ IWGVOI < DOIT-ON TRACER LES VOISINAGES ???
JE GEN32 < NON...
#/FLD# FACT
PSR A,B < SAUVEGARDE DE 'FACT'...
FDV F05
#/FST# FACT < AFIN DE VOIR L'ENSEMBLE DU DESIN...
LX ANPOIN < (X)=NOMBRE DE POINTS DANS LE NUAGE,
LRM W
WORD LPOINT < (W)=ADRESSE DE LA BASE DES DEXCRIPTEURS.
GEN30: EQU $
PSR X,W < SAUVEGARDES...
LX DNVOIS < (X)=NOMBRE DE VOISINS DE P(I) COURANT,
CPZR X < P(I) A-T'IL DES VOISINS ???
JE GEN31 < NON, RIEN A FAIRE...
PSR X < SAUVEGARDE DU NOMBRE DE VOISINS P(J)
< DE P(I).
BSR APMOV1 < DEPLACEMENT DE P(I) --> (FXS,FYS),
BSR APROJ < QUE L'ON PROJETTE,
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE,
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'ORIGINE P(I)...
PLR X < RESTAURE :
< (X)=NOMBRE DE VOISINS P(J) DE P(I).
LR W,L
ADRI DLVOIS-DESCPT,L < (L)=BASE DE LA LISTE DES VOISINS P(J)
< DE P(I).
GEN33: EQU $
PSR X < SAUVEGARDE DU NOMBRE DE VOISINS P(J)
< DE P(I) ENCORE A TRACER...
LA O,L < (A)=ADRESSE DU DESCRIPTEUR DE P(J).
IF VOISEX-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JALE GEN34 < ET ON SAUTE LE TRACE SI LE VOISIN N'EXIS-
< TE PAS, OU BIEN FIGURE DANS UNE LISTE
< ANTERIEURE...
LR A,W < (W)=ADRESSE D'UN VOISIN P(J) DE P(I),
BSR APMOV1 < DEPLACEMENT DE P(J) -- (FXS,FYS,FZS),
BSR APROJ < QUE L'ON PROJETTE,
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR2 < (B)=ADRESSE DU BUFFER EXTREMITE GRAPHIQUE
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'EXTREMITE P(J)...
LAD DEMOG
SVC < OUVERTURE GRAPHIQUE, AFIN DE DECHAINER
< LES VECTEURS.
LAD DEMWG
SVC < ET TRACE DU VECTEUR (P(I),P(J))...
GEN34: EQU $
PLR X < RESTAURE :
< (X)=NOMBRE DE VOISINS P(J) RESTANT A
< VISUALISER...
ADRI D,L < ACCES AU VOISIN P(J) SUIVANT,
JDX GEN33 < S'IL EXISTE...
GEN31: EQU $
PLR X,W < RESTAURE :
< (X)=NOMBRE DE POINTS P(I) A TRAITER,
< (W)=BASE COURANTE DE P(I).
ADRI LDESCP,W < PASSAGE AU POINT P(I) SUIVANT,
JDX GEN30 < S'IL EXISTE...
LAD DEMCG
SVC < ET RETOUR EN ALPHA-NUMERIQUE...
PLR A,B
#/FST# FACT < RESTAURATION DE 'FACT'...
GEN32: EQU $
XOPT1: VAL ENDIF
<
<
< G E N E R A T I O N D E L ' I M A G E :
<
<
GEN69: EQU $
QUIT XXQUIT < P O U R R E F L E C H I R ...
CPZ IERASE < FAUT-IL EFFACER ???
JE GEN69N < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
<
< EFFACEMENT DE L'ECRAN :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAD TEMPO
SVC < ET ON FAIT UN PETIT DODO...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
<
< INITIALISATION DES
< CONDITIONS DE TRACE :
<
GEN69N: EQU $
LAI VECTSB
STA VECTRS < MISE EN MODE 'SBT', SOIT 'OU-FLOU',
LRM A
WORD XXN255+Z=K+I
STA VEDECA < AFIN D'ECRASER LE NIVEAU ANTERIEUR...
<
< VISUALISATION DES POINTS DU NUAGE :
<
LX ANPOIN < (X)=NOMBRE DE POINTS DANS LE NUAGE,
LRM W
WORD LPOINT < (W)=ADRESSE DE LA BASE DES DEXCRIPTEURS.
GEN70: EQU $
PSR X < SAUVEGARDE DU NOMBRE DE POINTS...
BSR APMOV1 < DEPLACEMENT DE P(I) --> (FXS,FYS),
BSR APROJ < QUE L'ON PROJETTE,
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE,
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'ORIGINE P(I)...
LX BUFGR1+COORDX
LY BUFGR1+COORDY
BSR ACERCL < VISUALISATION DU POINT COURANT.
PLR X < RESTAURE :
< (X)=NOMBRE DE POINTS DU NUAGE...
ADRI LDESCP,W < PASSAGE AU POINT P(I) SUIVANT,
JDX GEN70 < S'IL EXISTE...
QUIT XXQUIT < POUR POUVOIR ADMIRER L'IMAGE DES POINTS
< DU NUAGE...
<
< PARCOURS DE LA LISTE
< DES VOISINAGES ET
< LEUR VISUALISATION :
<
LX ANPOIN < (X)=NOMBRE DE POINTS DANS LE NUAGE,
LRM W
WORD LPOINT < (W)=ADRESSE DE LA BASE DES DEXCRIPTEURS.
GEN80: EQU $
PSR X,W < SAUVEGARDES...
LX DNVOIS < (X)=NOMBRE DE VOISINS DE P(I) COURANT,
CPZR X < P(I) A-T'IL DES VOISINS ???
JG GEN181 < OUI, ALLONS LES VISUALISER...
BSR AGOTO
WORD GEN81 < NON, 'GOTO' RIEN FAIRE...
GEN181: EQU $
PSR X < SAUVEGARDE DU NOMBRE DE VOISINS P(J)
< DE P(I).
BSR APMOV1 < DEPLACEMENT DE P(I) --> (FXS,FYS),
BSR APROJ < QUE L'ON PROJETTE,
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE,
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'ORIGINE P(I)...
PLR X < RESTAURE :
< (X)=NOMBRE DE VOISINS P(J) DE P(I).
LR W,L
ADRI DLVOIS-DESCPT,L < (L)=BASE DE LA LISTE DES VOISINS P(J)
< DE P(I).
GEN83: EQU $
PSR X < SAUVEGARDE DU NOMBRE DE VOISINS P(J)
< DE P(I) ENCORE A TRACER...
LA O,L < (A)=ADRESSE DU DESCRIPTEUR DE P(J).
IF VOISEX-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAG GEN85 < OK...
BSR AGOTO
WORD GEN84 < ET ON SAUTE LE TRACE S'IL N'Y A PAS DE
< VOISINS OU BIEN S'IL FIGURE SUR UNE LISTE
< ANTERIEURE...
<
< VISUALISATION D'UNE LIAISON (P(I),P(J)) :
<
GEN85: EQU $
LR A,W < (W)=ADRESSE D'UN VOISIN P(J) DE P(I),
BSR APMOV1 < DEPLACEMENT DE P(J) -- (FXS,FYS,FZS),
BSR APROJ < QUE L'ON PROJETTE,
LRM A,B,X
WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT,
WORD BUFGR2 < (B)=ADRESSE DU BUFFER EXTREMITE GRAPHIQUE
WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER,
MOVE < ET MISE EN PLACE DE L'EXTREMITE P(J)...
<
< TRACE D'UN RECTANGLE :
<
PSR X,Y
LRM A,B,X
WORD BUFGR < (A)=ADRESSE DU VECTEUR PROJETE,
WORD VECGC < (B)=ADRESSE DU VECTEUR A TRACER EN 512,
WORD LBUFGR < (X)=NOMBRE DE MOTS A DEPLACER.
MOVE < PREPARATION DES ARGUMENTS DE L'INTER-
< POLATEUR.
< NOTA : LE VECTEUR (+(Y2-Y1),-(X2-X1))
< EST UN VECTEUR NORMAL AU VECTEUR
< ((X2-X1),(Y2-Y1)) A TRACER ; ON VA DONC
< LE REPRESENTER PAR UN RECTANGLE BALAYE
< LE LONG DE CE VECTEUR NORMAL...
<
< TRACE DES DISQUES
< DES 2 EXTREMITES :
<
LX VECGX1
LY VECGY1
BSR ACERCL < TRACE DU DISQUE DE CENTRE (X1,Y1).
LX VECGX2
LY VECGY2
BSR ACERCL < TRACE DU DISQUE DE CENTRE (X2,Y2).
<
< CALCUL DU PAS EN 'X' ET 'Y'
< DE GENERATION DU RECTANGLE :
<
LA VECGX2 < X2,
SB VECGX1 < X2-X1,
NGR A,Y < (Y)=-(X2-X1).
LA VECGY2 < Y2,
SB VECGY1 < Y2-Y1.
LR A,X < (X)=+(Y2-Y1).
PSR X,Y
CPZR X < RECHERCHE DE ABS(X).
JGE GEN93
NGR X,X
GEN93: EQU $
CPZR Y < RECHERCHE DE ABS(Y).
JGE GEN94
NGR Y,Y
GEN94: EQU $
LR X,A
CPR Y,X < RECHERCHE DU MAX((X),(Y)) :
JGE GEN90 < 'X' EST LE MAXIMUM...
LR Y,A < 'Y' EST LE MAXIMUM...
GEN90: EQU $
PLR X,Y
JANE GEN96 < OK, LE MAXIMUM EST NON NUL...
BSR AGOTO
WORD GEN97 < SI LE MAXIMUM EST NUL, CELA SIGNIFIE
< QUE LES 2 POINTS P(I) ET P(J) SONT TRES
< PROCHES (SANS ETRE CONFONDUS PUISQUE
< L'ON ELIMINE LES D(P(I),P(J)) QUI SONT
< NULLES...), ON N'A DONC PAS DE RECTANGLE
< A TRACER...
GEN96: EQU $
BSR AFLT
#/FST# FWORK1 < ET MEMORISATION DANS 'FWORK1'
< DE MAX(+(Y2-Y1),-(X2-X1)).
LR X,A < +(Y2-Y1),
BSR AFLT
FDV FWORK1
#/FST# FECGXP < PAS LE LONG DE 'X' :
< +(Y2-Y1)/MAX(+(Y2-Y1),-(X2-X1)).
LR Y,A
BSR AFLT
FDV FWORK1
#/FST# FECGYP < PAS LE LONG DE 'Y' :
< -(X2-X1)/MAX(+(Y2-Y1),-(X2-X1)).
LA VECGX1 < X1,
STA SAVEX < X(CENTRE DU DISQUE (X1,Y1)),
BSR AFLT
#/FST# FECGX1
LA VECGY1 < Y1.
STA SAVEY < Y(CENTRE DU DISQUE (X1,Y1)).
BSR AFLT
#/FST# FECGY1
LA VECGX2 < X2,
BSR AFLT
#/FST# FECGX2
LA VECGY2 < Y2.
BSR AFLT
#/FST# FECGY2
LAI XNIV0
STA VECTNI < INITIALISATION DU PREMIER NIVEAU...
<
< CALCUL DE L'EPAISSEUR :
<
#/FLD# FECGXP < XP (PAS LE LONG DE 'X'),
FMP FECGXP < XP*XP,
BSR ASFWOR
#/FLD# FECGYP < YP (PAS LE LONG DE 'Y'),
FMP FECGYP < YP*YP,
BSR APFWOR < XP*XP+YP*YP,
BSR ARAC < RAC(XP*XP+YP*YP),
BSR ATSFLO
#/FST# FWORK2 < FWORK2=RAC(XP*XP+YP*YP),
LA DEPAIS
BSR AFLT < EPAIS,
FDV FWORK2 < EPAIS/RAC(XP*XP+YP*YP),
BSR AROND
ADRI W,A < ON MAJORE D'UNE UNITE, AFIN DE FAVORISER
< LE TEST DE RACCORDEMENT DU RECTANGLE ET
< DES DISQUES D'EXTREMITE...
LR A,X < (X)=NOMBRE DE DECALAGE A FAIRE SUR LE
< VECTEUR ARGUMENT POUR L'AMENER SUR
< L'UN DES COTES DU RECTANGLE.
<
< RECHERCHE D'UN GRAND
< BORD DU RECTANGLE :
<
STX WEPAIS < (CORRESPOND A XEPAIS-Z/XXXMOY)
GEN91: EQU $
#/FLD# FECGX1
FSB FECGXP
#/FST# FECGX1 < TRANSLATION DE 'X1',
#/FLD# FECGY1
FSB FECGYP
#/FST# FECGY1 < TRANSLATION DE 'Y1'.
#/FLD# FECGX2
FSB FECGXP
#/FST# FECGX2 < TRANSLATION DE 'X2',
#/FLD# FECGY2
FSB FECGYP
#/FST# FECGY2 < TRANSLATION DE 'Y2'.
JDX GEN91 < UN PEU LOURD COMME METHODE, MAIS JE
< FAIS SIMPLE...
<
< GENERATION DU RECTANGLE :
<
LA WEPAIS
LR A,X
ADR X,X
ADRI Z,X < (X)=NOMBRE DE VECTEURS A TRACER POUR
< REMPLIR LE RECTANGLE,
< (CORRESPOND A XEPAIS)
ADRI Z,A
STA WEPAIS < POUR LE TEST DE MILIEU...
LY AXNIVP < (Y)=PAS INITIAL DE PROGRESSION DES
< NIVEAUX DES VECTEURS.
GEN92: EQU $
#/FLD# FECGX1
BSR AROND
STA VECGX1 < GENERATION DE 'X1',
#/FLD# FECGY1
BSR AROND
STA VECGY1 < GENERATION DE 'Y1'.
LA VECGX1 < X1,
SB SAVEX < X1-XC,
BSR AFLT
#/FST# FWORK1 < X1-XC,
FMP FWORK1 < (X1-XC)**2,
BSR ASFWOR
LA VECGY1 < Y1,
SB SAVEY < Y1-YC ((XC,YC) DESIGNE LE CENTRE.
BSR AFLT
#/FST# FWORK2 < Y1-YC,
FMP FWORK2 < (Y1-YC)**2,
BSR APFWOR < (X1-XC)**2+(Y1-YC)**2,
BSR ARAC < ET CALCUL DE LA DISTANCE DU POINT
< COURANT (X1,Y1) AU CENTRE (XC,YC) :
BSR ATSFLO
BSR AROND
CP DEPAIS < LE VECTEUR COURANT DE REMPLISSAGE
< TOMBE-T'IL DANS LE DISQUE (SAVEX,SAVEY) ?
JG GEN95 < NON, ON IGNORE CE VECTEUR...
#/FLD# FECGX2 < NON, ON TRACE CE VECTEUR...
BSR AROND
STA VECGX2 < GENERATION DE 'X2',
#/FLD# FECGY2
BSR AROND
STA VECGY2 < GENERATION DE 'Y2'.
BSR AVE512 < TRACE DU VECTEUR ((X1,Y1),(X2,Y2))
< COURANT...
LR X,A < (A)=INDEX DE LA BOUCLE :
CP WEPAIS < EST-ON AU MILIEU DU REMPLISSAGE ???
< (CORRESPOND A XEPAIS-Z/XXXMOY+Z)
JNE GEN86 < NON...
NGR Y,Y < OUI, ON INVERSE LE PAS DE PROGRESSION
< DES NIVEAUX DES VECTEURS AFIN D'AVOIR
< DU "RELIEF", ET D'EVITER A AVOIR A FAIRE
< DE L'ANTI-ALIASING SUR LES BORDS !!!
GEN86: EQU $
LA VECTNI
ADR Y,A
STA VECTNI < ET TRANSLATION DU NIVEAU DE TRACE...
GEN95: EQU $
#/FLD# FECGX1
FAD FECGXP
#/FST# FECGX1 < TRANSLATION DE 'X1',
#/FLD# FECGY1
FAD FECGYP
#/FST# FECGY1 < TRANSLATION DE 'Y1'.
#/FLD# FECGX2
FAD FECGXP
#/FST# FECGX2 < TRANSLATION DE 'X2',
#/FLD# FECGY2
FAD FECGYP
#/FST# FECGY2 < TRANSLATION DE 'Y2'.
JDX GEN92 < ET AU VECTEUR SUIVANT DE REMPLISSAGE
< DU RECTANGLE...
GEN97: EQU $
PLR X,Y
GEN84: EQU $
<
< PASSAGE A UN VECTEUR (P(I),P(J)) SUIVANT :
<
PLR X < RESTAURE :
< (X)=NOMBRE DE VOISINS P(J) RESTANT A
< VISUALISER...
ADRI D,L < ACCES AU VOISIN P(J) SUIVANT,
JDX GEN183 < S'IL EXISTE...
GEN81: EQU $
PLR X,W < RESTAURE :
< (X)=NOMBRE DE POINTS P(I) A TRAITER,
< (W)=BASE COURANTE DE P(I).
ADRI LDESCP,W < PASSAGE AU POINT P(I) SUIVANT,
JDX GEN180 < S'IL EXISTE...
<
< RELAIS :
<
JMP GEN200 < POUR LES SAUTER...
GEN183: EQU $
BSR AGOTO
WORD GEN83
GEN180: EQU $
BSR AGOTO
WORD GEN80
GEN200: EQU $
<
<
< E N T R Y A L T - M O D E :
<
<
DEBUT5: EQU $
QUIT XXQUIT < A T T E N T E ...
LRM C,K < ON REINITIALISE 'C' ET 'K' AU CAS
< D'UNE RE-ENTREE PAR UN 'ALT-MODE'...
WORD COM+DEPBAS < 'C',
WORD STACK-DEPILE < 'K'.
BSR AGOTO
WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE...
PAGE
<
<
< L I S T E D E S D E S C R I P T E U R S D E P O I N T S :
<
<
LPOINT: EQU $
IF LPOINT=FCTA,,,XEIF%
IF ATTENTION : A CAUSE DE 'VOISEX', TOUTES LES
IF ADRESSES DE 'LPOINT' DOIVENT ETRE STRICTEMENT
IF POSITIVES !!!
XEIF%: VAL ENDIF
DO NPOINT
DZS LDESCP
IF $=FCTA-K,,,XEIF%
IF ATTENTION : A CAUSE DE 'VOISEX',
IF TOUTES LES ADRESSES DE 'LPOINT'
IF DOIVENT ETRE STRICTEMENT POSITIVES !!!
XEIF%: VAL ENDIF
PAGE
<
<
< U P D A T E S :
<
<
$EQU PZ
FLOAT 1000 < POINT DE VUE DE L'OBSERVATEUR.
$EQU FACT
FLOAT 70 < FACTEUR D'ECHELLE DE LA PROJECTION.
$EQU TRX
WORD SIZXVI/XXXMOY < X-TRANSLATION GRAPHIQUE.
$EQU TRY
WORD SIZYVI/XXXMOY < Y-TRANSLATION GRAPHIQUE.
$EQU ADIMGR
WORD DIMGR2 < DIMENSION DE L'ESPACE GRAPHIQUE.
$EQU RDNMIN
WORD NVOIS*DIMGR2 < MIN(NOMBRE DE VOISINS).
$EQU RDNMAX
WORD NVOIS*DIMGR2 < MAX(NOMBRE DE VOISINS).
$EQU ANVOIS
WORD NVOIS*DIMGR2 < NOMBRE DE VOISINS MAXIMAL D'UN POINT.
PAGE
<
<
< T A B L E D E S S Y M B O L E S :
<
<
IF '00000000000@,XEIF%,,XEIF%
EST
XEIF%: VAL ENDIF
DATE
END DEBUT
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.