DF'SIOP CHAMP RDN 1'
ED'SIOP CHAMP RDN 1'
IN0
PAGE
IDP "SIOP CHAMP RDN 1"
<
<
< C H A M P R D N 1 :
<
<
< FONCTION :
< CE MODULE :
< 1 - EN CHAQUE POINT DE LA GRILLE
< ARGUMENT TIRE UN NOMBRE AU HASARD
< ET LE CUMULE A LA VALEUR COURANTE
< DU NOEUD CORRESPONDANT ;
< 2 - A L'INTERIEUR DE CHAQUE MAILLE
< IL INTERPOLE ENSUITE ;
< 3 - ON DISPOSE ALORS D'UN TABLEAU
< DE VALEURS ALEATOIRES MAIS CORRE-
< LEES QUI SONT ATTRIBUES EN NIVEAU
< DE GRIS A L'IMAGE VISUALISEE APRES
< CUMUL AVEC L'IMAGE RESIDENTE...
<
<
< ARGUMENT :
< A0000=BORNE SUPERIEURE DE RDN,
< A0001=BORNE INFERIEURE DE RDN,
< A0002=MULTIPLICATEUR DE RDN,
A0000:: VAL 0
A0001:: VAL A0000+1
A0002:: VAL A0001+1
A3:: VAL A0002+1 < ACTION SUR LE TABLEAU DE VALEURS ALEA-
< TOIRES CORRELEES (Z-BUFFER) :
< =0 : L'INITIALISER A 0,
< #0 : NE PAS L'INITIALISER.
A4:: VAL A3+1 < PAS EN X DE LA GRILLE,
A5:: VAL A4+1 < PAS EN Y DE LA GRILLE.
A6:: VAL A5+1 < POUR LE GENERATEUR ALEATOIRE...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
PREM: WORD -1 < INDICATEUR DE PREMIER PASSAGE.
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
POINTM: WORD 0 < POINT COURANT DANS LA MAILLE SOUS LA
< FORME (Y,X).
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
<
< OPTIMISATION DES ACCES AUX NOEUDS :
<
NOEUDS:: VAL 4 < NOMBRE DE NOEUDS D'UNE MAILLE,
ATOPTI: WORD TOPTI,X < COUPLE (Y,X) DES NOEUDS MEMORISES.
TOPTI: EQU $
DO NOEUDS
WORD 0
AVOPTI: WORD VOPTI,X < LISTE DES VALEURS ALEATOIRES DES NOEUDS.
VOPTI: EQU $
DO NOEUDS
WORD 0
ALOPTI: WORD LOPTI,X < TABLE DES OCCUPATIONS DE 'LOPTI'/'VOPTI'.
LOPTI: EQU $
DO NOEUDS
WORD -1 < INITIALEMENT INOCCUPE...
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA6: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0000: WORD 0 < BORNE SUPERIEURE,
XA0001: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < INTERPOLER...
<
< CONSTANTES DIVERSES :
<
FINFIN: FLOAT 100000
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
ASP1: WORD SP1 < ACCES AU Z-BUFFER...
ASPU1: WORD SPU1 < RELAI...
PROG
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN: EQU $
SPRDN1: EQU $
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
EOR MCDAR
MP RDN1
SCRD RDN3
JANE SPMOYC
LR B,A
JANE SPMOYC
LA F1 < REINITIALISATION...
EOR XS
AD F1+1 < ????
AD RDN2
SPMOYC: EQU $
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
EOR MCDAV
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA F1
EOR YS
EOR F1+1
AD RDN2
SPMOYF: EQU $
STA RDN4
EOR MCDAB
EOR RDN
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0000 < BORNE SUPERIEURE,
FLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0001 < BORNE INFERIEURE,
FLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FIX
CP XA0000 < ???
JG SPRDN3 < ERREUR...
CP XA0001 < ???
JL SPRDN3 < ERREUR...
FLT
FMP FMUL
BSR AROND < (A)=NOMBRE ALEATOIRE ENTIER...
PLR B
RSR
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
PSR B
LA YS
SWBR A,A
OR XS < ON FORME UNE COMBINAISON BIUNIVOQUE
< DE XS ET YS...
AD RDN1
EOR PASIX < POUR DONNER DES CHOSES
EOR PASIY < DIFFERENTES SUIVANT LA GRILLE...
EOR XA6 < PARAMETRE VARIABLE...
FLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
<
<
< A C C E S Z - B U F F E R :
<
<
< ARGUMENT :
< (X,Y)=POINT COURANT,
< (B)=NUMERO (1/2/3/4) DU NOEUD.
<
<
< RESULTAT :
< (A,B)=VALEUR FLOTTANTE ASSOCIEE A (X,Y)
< DANS LE TABLEAU ALEATOIRE CORRELE.
<
<
SP1: EQU $
SWBR Y,A
ORR X,A < (A)=POINT COURANT (Y,X).
PSR X,Y
LR B,X < (X)=NUMERO DU NOEUD :
CPZ &ALOPTI < Y-A-T'IL QUELQUE CHOSE DANS L'ACCELE-
< RATEUR D'ACCES ???
JL SP1A < NON, RIEN A TESTER...
CP &ATOPTI < OUI, EST-CE LE NOEUD QUE L'ON CHERCHE ???
LB &AVOPTI < (B)=VALEUR ALEATOIRE A PRIORI...
JE SP1B < OUI, LE NOEUD QUE L'ON CHERCHE EST
< DEJA LA, (B) EST BON...
SP1A: EQU $ < LE NOEUD CHERCHE (A) N'EST PAS LA :
STA &ATOPTI < ON L'Y MET (A),
STZ &ALOPTI < ET L'ON MEMORISE CE FAIT...
LYI YLOAD
BSR AGZB < ACCES DANS 'B' DE LA VALEUR ASSOCIEE
< AU COUPLE (Y,X)...
STB &AVOPTI < ET ON MEMORISE LA VALEUR...
SP1B: EQU $
LR B,A
FLT < ET ON CONVERTIT EN FLOTTANT...
PLR X,Y
RSR
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ PREM < EST-CE LA PREMIERE FOIS ???
JL SPU20 < OUI...
BR ASPU1 < NON...
SPU20: EQU $
IC PREM < ON LE MEMORISE...
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A0000
BSR ASPCT
FIX
STA XA0000 < BORNE SUPERIEURE,
LXI A0001
BSR ASPCT
FIX
STA XA0001 < ET BORNE INFERIEURE...
LXI A0002
BSR ASPCT
FCAZ
JLE $ < ????!?!
FST FMUL
LXI A6
BSR ASPCT
BSR AROND
STA XA6 < PARAMETRE D'INITIALISATION...
<
< INITAILISATION DU TABLEAU ???
<
LXI A3
BSR ASPCT
BSR AROND
JANE SPU2 < NON...
LBI 0 < OUI : (B)=VALEUR INITIALE,
LAI 0 < (A)=ADRESSE COURANTE,
LYI YSTORE < (Y)=FONCTION D'ECRITURE...
SPU3: EQU $
BSR AGZB < INITIALISATION DU TABLEAU ALEATOIRE...
ADRI 1,A < AU SUIVANT,
JANE SPU3 < SI EXISTE...
<
< ENTREE DE LA GRILLE :
<
SPU2: EQU $
LXI A4
BSR ASPCT
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
LXI A5
BSR ASPCT
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
<
< GENERATION ALEATOIRE AUX
< NOEUDS DE LA GRILLE :
<
LYI 0 < (Y)=COORDONNEE 'Y',
SPU4: EQU $
LXI 0 < (X)=COORDONNEE 'X'.
SPU5: EQU $
STX XS < POUR LA GENERATION
STY YS < ALEATOIRE...
PSR X,Y
SWBR Y,A
ORR X,A < (A)=POINT COURANT (Y,X),
PSR A < ET SAUVEGARDE...
LYI YLOAD
BSR AGZB < (B)=CONTENU ANTERIEUR DE (X,Y),
BSR ARDN < (A)=VALEUR ALEATOIRE COURANTE,
ADR A,B < ET CUMUL,
LYI YSTORE
PLR A
BSR AGZB < QUE L'ON REMET DANS LE TABLEAU EN (Y,X).
PLR X,Y < RESTAURATION DU POINT COURANT,
LR X,A
AD PASIX
LR A,X < PROGRESSION SUR LA GRILLE,
CPI NPOLM1
JLE SPU5 < SUR 'OX'...
LR Y,A < PUIS SUR 'OY'...
AD PASIY
LR A,Y < PROGRESSION SUR LA GRILLE,
CPI NLIGM1
JLE SPU4
<
< INTERPOLATION DANS CHAQUE MAILLE :
<
LYI 0 < (Y)=COORDONNEE 'Y',
SPU14: EQU $
LXI 0 < (X)=COORDONNEE 'X'.
SPU15: EQU $
STX XS < POUR TRACER LE
STY YS < POINT COURANT...
PSR X,Y < SAUVEGARDE DU POINT COURANT,
SWBR Y,A
ORR X,A
STA POINTM < POINT COURANT (Y,X).
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
LA POINTM < (A)=POINT COURANT (YS,XS),
LYI YLOAD
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA PASIX
FLT
FST FWORK
LR X,A
SB XNOEUD < X-XNOEUD,
FLT
FDV FWORK < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA PASIY
FLT
FST FWORK
LR Y,A
SB YNOEUD < Y-YNOEUD,
FLT
FDV FWORK < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
LBI 0 < PREMIER NOEUD :
BSR ASP1
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XNOEUD
AD PASIX
ANDI NPOLM1 < ON TRAVAILLE A PRIORI SUR UN TORE...
LR A,X
LBI 1 < DEUXIEME NOEUD :
BSR ASP1
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YNOEUD
AD PASIY
ANDI NLIGM1 < ON TRAVAILLE A PRIORI SUR UN TORE...
LR A,Y
LBI 2 < TROISIEME NOEUD :
BSR ASP1
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LX XNOEUD
LBI 3 < QUATRIEME NOEUD :
BSR ASP1
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
BSR AROND < CONVERSION ENTIERE,
LR A,B < (B)=VALEUR INTERPOLEE ENTRE LES 4
< SOMMETS POUR LE POINT COURANT,
LA POINTM
LYI YSTORE
SPU30: EQU $ < CAS DES NOEUDS...
BSR AGZB < QUE L'ON RANGE DANS LE TABLEAU...
LR B,A
SLRS NBITMO-NCOOL-1
ANDI NIVMAX
BSR ASPRPS < ET ON TRACE POUR PATIENTER...
PLR X,Y < RESTAURAYTION DU POINT COURANT,
ADRI 1,X < ET PASSAGE AU SUIVANT,
LR X,A
CPI NPOLM1
JLE SPU15 < LE LONG DE 'OX'...
ADRI 1,Y < PUIS DE 'OY'...
LR Y,A
CPI NLIGM1
JLE SPU14
<
< CAS DE TOUS LES POINTS (XR,YR) :
<
SPU1: EQU $
LA XR
STA XS
LA YR
STA YS
SWBR A,A
OR XR < POINT COURANT=(YR,XR)=(YS,XS),
LYI YLOAD
BSR AGZB < (B)=VALEUR ALEATOIRE ASSOCIEE,
BSR ASPGPR < (A)=NIVEAU(XR,YR),
XR A,B
SLRS NBITMO-NCOOL-1 < QUE L'ON CONVERTIT EN NIVEAU DE GRIS,
ADR B,A < ET CUMUL : NIVEAU(XR,YR)+RDN(XR,YR),
ANDI NIVMAX < ET CALCUL MODULO...
BSR ASPRPS < QUE L'ON FORCE EN (XS,YS)=(XR,YR)...
<
< SORTIE :
<
FLD FINFIN < AFIN DE FAIRE UN OVERS-SCREEN...
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FINFIN < AFIN DE FAIRE UN OVERS-SCREEN...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
:F
:F
< <<'SIOP CHAMP RDN 1'
DF'SIOP CHAMP RDN 2'
ED'SIOP CHAMP RDN 2'
IN0
PAGE
IDP "SIOP CHAMP RDN 2"
<
<
< C H A M P R D N 2 :
<
<
< FONCTION :
< CE MODULE :
< 1 - EN CHAQUE POINT DE LA GRILLE
< ARGUMENT TIRE UN NOMBRE AU HASARD
< ET LE CUMULE A LA VALEUR COURANTE
< DU NOEUD CORRESPONDANT ;
< 2 - A L'INTERIEUR DE CHAQUE MAILLE
< IL INTERPOLE ENSUITE ;
< 3 - ON DISPOSE ALORS D'UN TABLEAU
< DE VALEURS ALEATOIRES MAIS CORRE-
< LEES QUI SONT ATTRIBUES EN NIVEAU
< DE GRIS A L'IMAGE VISUALISEE APRES
< CUMUL AVEC L'IMAGE RESIDENTE...
<
<
< ARGUMENT :
< A0000=BORNE SUPERIEURE DE RDN,
< A0001=BORNE INFERIEURE DE RDN,
< A0002=MULTIPLICATEUR DE RDN,
A0000:: VAL 0
A0001:: VAL A0000+1
A0002:: VAL A0001+1
A3:: VAL A0002+1 < ACTION SUR LE TABLEAU DE VALEURS ALEA-
< TOIRES CORRELEES (Z-BUFFER) :
< =0 : L'INITIALISER A 0,
< #0 : NE PAS L'INITIALISER.
A4:: VAL A3+1 < PAS EN X DE LA GRILLE,
A5:: VAL A4+1 < PAS EN Y DE LA GRILLE.
A6:: VAL A5+1 < POUR LE GENERATEUR ALEATOIRE...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
PREM: WORD -1 < INDICATEUR DE PREMIER PASSAGE.
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
POINTM: WORD 0 < POINT COURANT DANS LA MAILLE SOUS LA
< FORME (Y,X).
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
<
< OPTIMISATION DES ACCES AUX NOEUDS :
<
NOEUDS:: VAL 4 < NOMBRE DE NOEUDS D'UNE MAILLE,
ATOPTI: WORD TOPTI,X < COUPLE (Y,X) DES NOEUDS MEMORISES.
TOPTI: EQU $
DO NOEUDS
WORD 0
AVOPTI: WORD VOPTI,X < LISTE DES VALEURS ALEATOIRES DES NOEUDS.
VOPTI: EQU $
DO NOEUDS
WORD 0
ALOPTI: WORD LOPTI,X < TABLE DES OCCUPATIONS DE 'LOPTI'/'VOPTI'.
LOPTI: EQU $
DO NOEUDS
WORD -1 < INITIALEMENT INOCCUPE...
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA6: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0000: WORD 0 < BORNE SUPERIEURE,
XA0001: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < INTERPOLER...
<
< CONSTANTES DIVERSES :
<
FINFIN: FLOAT 100000
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SPRDN < GENERATEUR ALEATOIRE.
ASP1: WORD SP1 < ACCES AU Z-BUFFER...
ASPU1: WORD SPU1 < RELAI...
PROG
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN: EQU $
PSR B
SPRDN1: EQU $
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
EOR XA6 < ET UN PARAMETRE VARIABLE D'APPEL...
EOR MCDAR
MP RDN1
SCRD RDN3
JANE SPMOYC
LR B,A
JANE SPMOYC
LA F1 < REINITIALISATION...
EOR XS
AD F1+1 < ????
AD RDN2
SPMOYC: EQU $
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
EOR MCDAV
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA F1
EOR YS
EOR F1+1
AD RDN2
SPMOYF: EQU $
STA RDN4
EOR MCDAB
EOR RDN
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0000 < BORNE SUPERIEURE,
FLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0001 < BORNE INFERIEURE,
FLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FIX
CP XA0000 < ???
JG SPRDN3 < ERREUR...
CP XA0001 < ???
JL SPRDN3 < ERREUR...
FLT
FMP FMUL
BSR AROND < CONVERSION EN ENTIER...
PLR B
RSR
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
<
<
< A C C E S Z - B U F F E R :
<
<
< ARGUMENT :
< (X,Y)=POINT COURANT,
< (B)=NUMERO (1/2/3/4) DU NOEUD.
<
<
< RESULTAT :
< (A,B)=VALEUR FLOTTANTE ASSOCIEE A (X,Y)
< DANS LE TABLEAU ALEATOIRE CORRELE.
<
<
SP1: EQU $
SWBR Y,A
ORR X,A < (A)=POINT COURANT (Y,X).
PSR X,Y
LR B,X < (X)=NUMERO DU NOEUD :
CPZ &ALOPTI < Y-A-T'IL QUELQUE CHOSE DANS L'ACCELE-
< RATEUR D'ACCES ???
JL SP1A < NON, RIEN A TESTER...
CP &ATOPTI < OUI, EST-CE LE NOEUD QUE L'ON CHERCHE ???
LB &AVOPTI < (B)=VALEUR ALEATOIRE A PRIORI...
JE SP1B < OUI, LE NOEUD QUE L'ON CHERCHE EST
< DEJA LA, (B) EST BON...
SP1A: EQU $ < LE NOEUD CHERCHE (A) N'EST PAS LA :
STA &ATOPTI < ON L'Y MET (A),
STZ &ALOPTI < ET L'ON MEMORISE CE FAIT...
LYI YLOAD
BSR AGZB < ACCES DANS 'B' DE LA VALEUR ASSOCIEE
< AU COUPLE (Y,X)...
STB &AVOPTI < ET ON MEMORISE LA VALEUR...
SP1B: EQU $
LR B,A
FLT < ET ON CONVERTIT EN FLOTTANT...
PLR X,Y
RSR
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ PREM < EST-CE LA PREMIERE FOIS ???
JL SPU20 < OUI...
BR ASPU1 < NON...
SPU20: EQU $
IC PREM < ON LE MEMORISE...
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A0000
BSR ASPCT
FIX
STA XA0000 < BORNE SUPERIEURE,
LXI A0001
BSR ASPCT
FIX
STA XA0001 < ET BORNE INFERIEURE...
LXI A0002
BSR ASPCT
FCAZ
JLE $ < ?!?!?!
FST FMUL
LXI A6
BSR ASPCT
BSR AROND
STA XA6 < POUR LE GENERATEUR...
<
< INITAILISATION DU TABLEAU ???
<
LXI A3
BSR ASPCT
BSR AROND
JANE SPU2 < NON...
LBI 0 < OUI : (B)=VALEUR INITIALE,
LAI 0 < (A)=ADRESSE COURANTE,
LYI YSTORE < (Y)=FONCTION D'ECRITURE...
SPU3: EQU $
BSR AGZB < INITIALISATION DU TABLEAU ALEATOIRE...
ADRI 1,A < AU SUIVANT,
JANE SPU3 < SI EXISTE...
<
< ENTREE DE LA GRILLE :
<
SPU2: EQU $
LXI A4
BSR ASPCT
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
LXI A5
BSR ASPCT
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
<
< GENERATION ALEATOIRE AUX
< NOEUDS DE LA GRILLE :
<
LYI 0 < (Y)=COORDONNEE 'Y',
SPU4: EQU $
LXI 0 < (X)=COORDONNEE 'X'.
SPU5: EQU $
STX XS < POUR LA GENERATION
STY YS < ALEATOIRE...
PSR X,Y
SWBR Y,A
ORR X,A < (A)=POINT COURANT (Y,X),
PSR A < ET SAUVEGARDE...
LYI YLOAD
BSR AGZB < (B)=CONTENU ANTERIEUR DE (X,Y),
BSR ARDN < (A)=VALEUR ALEATOIRE COURANTE,
ADR A,B < ET CUMUL,
LYI YSTORE
PLR A
BSR AGZB < QUE L'ON REMET DANS LE TABLEAU EN (Y,X).
PLR X,Y < RESTAURATION DU POINT COURANT,
LR X,A
AD PASIX
LR A,X < PROGRESSION SUR LA GRILLE,
CPI NPOLM1
JLE SPU5 < SUR 'OX'...
LR Y,A < PUIS SUR 'OY'...
AD PASIY
LR A,Y < PROGRESSION SUR LA GRILLE,
CPI NLIGM1
JLE SPU4
<
< INTERPOLATION DANS CHAQUE MAILLE :
<
LYI 0 < (Y)=COORDONNEE 'Y',
SPU14: EQU $
LXI 0 < (X)=COORDONNEE 'X'.
SPU15: EQU $
STX XS < POUR TRACER LE
STY YS < POINT COURANT...
PSR X,Y < SAUVEGARDE DU POINT COURANT,
SWBR Y,A
ORR X,A
STA POINTM < POINT COURANT (Y,X).
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
LA POINTM < (A)=POINT COURANT (YS,XS),
LYI YLOAD
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA PASIX
FLT
FST FWORK
LR X,A
SB XNOEUD < X-XNOEUD,
FLT
FDV FWORK < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA PASIY
FLT
FST FWORK
LR Y,A
SB YNOEUD < Y-YNOEUD,
FLT
FDV FWORK < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
LBI 0 < PREMIER NOEUD :
BSR ASP1
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XNOEUD
AD PASIX
ANDI NPOLM1 < ON TRAVAILLE A PRIORI SUR UN TORE...
LR A,X
LBI 1 < DEUXIEME NOEUD :
BSR ASP1
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YNOEUD
AD PASIY
ANDI NLIGM1 < ON TRAVAILLE A PRIORI SUR UN TORE...
LR A,Y
LBI 2 < TROISIEME NOEUD :
BSR ASP1
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LX XNOEUD
LBI 3 < QUATRIEME NOEUD :
BSR ASP1
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
BSR AROND < CONVERSION ENTIERE,
LR A,B < (B)=VALEUR INTERPOLEE ENTRE LES 4
< SOMMETS POUR LE POINT COURANT,
LA POINTM
LYI YSTORE
SPU30: EQU $ < CAS DES NOEUDS...
BSR AGZB < QUE L'ON RANGE DANS LE TABLEAU...
LR B,A
SLRS NBITMO-NCOOL-1
ANDI NIVMAX
BSR ASPRPS < ET ON TRACE POUR PATIENTER...
PLR X,Y < RESTAURAYTION DU POINT COURANT,
ADRI 1,X < ET PASSAGE AU SUIVANT,
LR X,A
CPI NPOLM1
JLE SPU15 < LE LONG DE 'OX'...
ADRI 1,Y < PUIS DE 'OY'...
LR Y,A
CPI NLIGM1
JLE SPU14
<
< CAS DE TOUS LES POINTS (XR,YR) :
<
SPU1: EQU $
LA XR
STA XS
LA YR
STA YS
SWBR A,A
OR XR < POINT COURANT=(YR,XR)=(YS,XS),
LYI YLOAD
BSR AGZB < (B)=VALEUR ALEATOIRE ASSOCIEE,
BSR ASPGPR < (A)=NIVEAU(XR,YR),
XR A,B
SLRS NBITMO-NCOOL-1 < QUE L'ON CONVERTIT EN NIVEAU DE GRIS,
ADR B,A < ET CUMUL : NIVEAU(XR,YR)+RDN(XR,YR),
ANDI NIVMAX < ET CALCUL MODULO...
BSR ASPRPS < QUE L'ON FORCE EN (XS,YS)=(XR,YR)...
<
< SORTIE :
<
FLD FINFIN < AFIN DE FAIRE UN OVERS-SCREEN...
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FINFIN < AFIN DE FAIRE UN OVERS-SCREEN...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
:F
:F
< <<'SIOP CHAMP RDN 2'
DF'SIOP MONTAGNE 1'
ED'SIOP MONTAGNE 1'
IN0
PAGE
IDP "SIOP MONTAGNE 1"
<
<
< G E N E R A T E U R D E M O N T A G N E S 1 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
<
<
< ARGUMENTS :
< A0000=FACTEUR D'AMPLIFICATION DE 'W'.
< A0001=DEPLACEMENT DE 'U',
< A0002=DEPLACEMENT DE 'V'.
< A0003=0 : FAIRE L'INTERPOLATION SUR UN CARRE "ENTIER",
< =1 : NE PRENDRE QUE LE SOMMET (XS,YS).
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
A3:: VAL A2+1
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XINDIC: WORD 0 < 0=INTERPOLER, 1=NE PAS INTERPOLER...
GNIV1: FLOAT 0 < NIVEAU(XS,YS),
GNIV2: FLOAT 0 < NIVEAU(XS+1,YS),
GNIV3: FLOAT 0 < NIVEAU(XS+1,YS+1),
GNIV4: FLOAT 0 < NIVEAU(XS,YS+1).
GINCU: FLOAT 0 < COORDONNEES RELATIVES D'UN POINT
GINCV: FLOAT 0 < DANS UN CARRE "ENTIER"...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
LXI A1
BSR ASPCT
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
LXI A2
BSR ASPCT
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
<
< CALCUL DU POINT COURANT :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
<
< POSITION DE CE POINT COURANT
< DANS UN CARRE A COORDONNEES
< ENTIERES :
<
FLD GXS
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD GYS
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
LXI A3
BSR ASPCT
BSR AROND
STA XINDIC < XINDIC=0/1.
LA CTCDA
STA XCTCDA < POUR ATTEINDRE 'TV2'...
BSR ASPGPS
FLT
CPZ XINDIC
JNE SPW1 < NON...
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPGPS
FLT
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPGPS
FLT
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPGPS
FLT
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DU DEPLACEMENT EN 'W' :
<
SPW1: EQU $
FST FWORK
LXI A0
BSR ASPCT
FMP FWORK
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RSR
:F
:F
< <<'SIOP MONTAGNE 1'
DF'SIOP MONTAGNE 2'
ED'SIOP MONTAGNE 2'
IN0
PAGE
IDP "SIOP MONTAGNE 2"
$EQU $-32 < A T T E N T I O N ...
IDP "ATTENTION : EST EN RECOUVREMENT DE -32 MOTS !!!"
<
<
< G E N E R A T E U R D E M O N T A G N E S 2 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE, EN CHAQUE POINT ARGUMENT
< (VARU,VARV), IL RECHERCHE UN QUADRILATERE
< DE L'IMAGE 'TV2' INCLUANT CE POINT ; BIEN
< ENTENDU C'EST LE PLUS PETIT QUADRILATERE
< QUE L'ON RECHERCHE...
<
<
< ARGUMENTS :
< A0000=FACTEUR D'AMPLIFICATION DE 'W'.
< A0001=DEPLACEMENT DE 'U',
< A0002=DEPLACEMENT DE 'V'.
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
LARG:: VAL A2+1*2 < NOMMBRE DE MOTS OCCUPES PAR LES ARGU-
< MENTS FLOTTANTS...
<
<
< C O N T E X T E D E S S O M M E T S :
<
<
DSEC
NIVO: EQU $
FNIVO: FLOAT 0 < NIVEAU FLOTTANT DU SOMMET COURANT,
XFNIVO:: VAL FNIVO-NIVO
FU: FLOAT 0 < VALEUR ABSOLUE DE LA DISTANCE SUR L'AXE
< DES 'X' ENTRE LE SOMMET COURANT ET 'GXS',
XFU:: VAL FU-NIVO
FV: FLOAT 0 < VALEUR ABSOLUE DE LA DISATNCE SUR L'AXE
< DES 'Y' ENTRE LE SOMMET COURANT ET 'GYS'.
XFV:: VAL FV-NIVO
LNIVO:: VAL $-NIVO < LONGUEUR DU CONTEXTE...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
GXS: EQU ZZZ061 < COORDONNEES ABSOLUES
GYS: EQU ZZZ062 < DE CE POINT...
BNIVO: EQU CT+LARG
NSOM:: VAL 4 < NOMBRE DE SOMMETS...
NIV1: EQU BNIVO < PREMIER SOMMET,
NIV2: EQU NIV1+LNIVO < DEUXIEME SOMMET,
NIV3: EQU NIV2+LNIVO < TROISIEME SOMMET,
NIV4: EQU NIV3+LNIVO < QUATRIEME SOMMET.
NIV5: EQU NIV4+LNIVO
SAVX: EQU FWORK2+0 < SAVE (XS,YS)
SAVY: EQU FWORK2+1 < DU POINT COURANT.
XSP: WORD 0 < SOMMET COURANT
YSP: WORD 0 < DU QUADRILATERE.
DELX: WORD 0 < PAS DE PARCOURS
DELY: WORD 0 < DU QUADRILATERE COURANT.
DELXP: WORD 0
DELYP: WORD 0
ASPIR: WORD SPIR < SOUS-PROGRAMME DE RECHERCHE D'UN SOMMET
< DE QUADRILATERE.
ACUMU: WORD CUMU < CUMUL SUR 'FWORK',
ACUMU1: WORD CUMU1 < CUMUL SUR 'FWORK1'.
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
LXI A1
BSR ASPCT
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
LXI A2
BSR ASPCT
FAD VARV
RSR < ???!?
<
<
< C U M U L S :
<
<
CUMU: EQU $
FAD FWORK
FST FWORK
RSR
CUMU1: EQU $
FAD FWORK1
FST FWORK1
RSR
<
<
< R E C H E R C H E D ' U N S O M M E T
< D U Q U A D R I L A T E R E C O U R A N T :
<
<
< ARGUMENTS :
< (GXS,GYS)=POINT COURANT FLOTTANT,
< (XS,YS)=POINT COURANT ENTIER,
< (DELX,DELY)=PAS DE PARCOURS DU QUADRILATERE
< A LA RECHERCHE DE L'UN DES 4 SOMMETS.
< W=ADRESSE DU CONTEXTE COURANT.
<
<
< RESULTATS :
< FNIVO=NIVEAU DE GRIS DU SOMMET TROUVE DANS 'TV2',
< (FU,FV)=DISTANCE (EN VALEUR ABSOLUE DONC)
< SUR LES 2 AXES ENTRE LE SOMMET
< COURANT ET LE POINT (GXS,GYS).
<
<
SPIR: EQU $
USE W,NIVO
<
< SAVE LE POINT COURANT :
<
LA XS
SB DELX
STA SAVX
LA YS
SB DELY
STA SAVY
<
< PARCOURS D'UN CARRE SUIVANT (DELX,DELY)
< ET DONT UN SOMMET EST (XS,YS) :
<
SPIR1: EQU $
LA XS
AD DELX
STA XSP
JAL SPIR2 < RIEN TROUVE (HORS-ECRAN) : ON ARRETE...
CPI NPOLM1
JG SPIR2 < RIEN TROUVE (HORS-ECRAN) : ON SORT...
LA YS
AD DELY
STA YSP < LE POINT (XSP,YSP) EST A L'OPPOSE (SUR
< UNE DIAGONALE) DU POINT (SAVX,SAVY)
< SUR LE CARRE COURANT...
JAL SPIR2 < RIEN TROUVE (HORS-ECRAN) : ON ARRETE...
CPI NLIGM1
JG SPIR2 < RIEN TROUVE (HORS-ECRAN) : ON SORT...
STZ DELXP < PREPARATION DU PARCOURS DES 2 COTES
STZ DELYP < DU CARRE ISSUS DU SOMMET (XSP,YSP).
<
< PARCOURS DES 2 COTES A LA
< RECHERCHE D'UN POINT SIGNIFICATIF
< A PARTIR DU SOMMET OPPOSE AU
< SOMMET (SAVX,SAVY) :
<
SPIR10: EQU $
LA XSP
SB DELXP
CP SAVX
JE SPIR3 < PASSAGE AU CARRE SUPERIEUR SUIVANT...
STA XS
LA YSP
STA YS
BSR ASPGPS < EXAMEM D'UN POINT SUR LE COTE
< HORIZONTAL COURANT...
JANE SPIR4 < ON S'ARRETE SUR LE PREMIER POINT
< RENCONTRE...
LA YSP < ET NON, ON PASSE AU COTE VERTICAL...
< (NOTA : ON PASSE DU COTE VERTICAL
< AU COTE HORIZONTAL EN BASCULE D'UN
< POINT A L'AUTRE)
SB DELYP
CP SAVY
JE SPIR3 < PASSAGE AU CARRE SUPERIEUR SUIVANT...
STA YS
LA XSP
STA XS
BSR ASPGPS < EXAMEM D'UN POINT SUR LE COTE
< VERTICAL COURANT...
JANE SPIR4 < ON S'ARRETE SUR LE PREMIER POINT
< RENCONTRE.
<
< POURSUITE DE L'EXAMEM DU
< CARRE COURANT :
<
LA DELXP
AD DELX
STA DELXP
LA DELYP
AD DELY
STA DELYP
JMP SPIR10 < VERS L'EXAMEM DE 2 POINTS SYMETRIQUES
< PAR RAPPORT A LA DIAGONALE ALLANT DU
< POINT (SAVX,SAVY) AU POINT (XSP,YSP).
<
< PASSAGE AU CARRE SUPERIEUR SUIVANT :
<
SPIR3: EQU $
LA XSP
STA XS < ON SE PLACE SUR LE SOMMET MOBILE
LA YSP
STA YS < COURANT,
JMP SPIR1 < VERS L'EXAMEM DE CE NOUVEAU CARRE...
<
< CAS OU L'ON A RIEN TROUVE
< (HORS-ECRAN) : ON PREND UN
< NIVEAU NOIR :
<
SPIR2: EQU $
LAI 0
JMP SPIR20 < VERS LE RENVOI DU NIVEAU DE NOIR
< ET D'UNE DISTANCE PLUS OU MOINS
< FOLKLORIQUE...
<
< CAS OU L'ON A TROUVE UN POINT :
<
SPIR4: EQU $
LB XS
STB XSP
LB YS
STB YSP
<
< RENVOI DE LA DISTANCE SUR LES 2 AXES
< DU POINT TROUVE AU POINT (GXS,GYS) :
<
SPIR20: EQU $
FLT
FST NIVO < RENVOI DU NIVEAU FLOTTANT.
LA XSP
FLT
FSB GXS
FABS
FST FU < DISTANCE SELON L'AXE DES 'X',
LA YSP
FLT
FSB GYS
FABS
FST FV < DISTANCE SELON L'AXE DES 'Y'.
<
< RETOUR :
<
LA SAVX
AD DELX
STA XS < RESTAURATION DU
LA SAVY
AD DELY
STA YS < POINT (XS,YS).
ADRI LNIVO,W < POUR LE CONTEXTE SUIVANT...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
PSR W
<
< CALCUL DU POINT COURANT :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < POINT ENTIER VOISIN...
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < POINT ENTIER VOISIN...
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
LA CTCDA
STA XCTCDA < POUR ATTEINDRE 'TV2'...
LRM W
WORD BNIVO < INITIALISATION DE LA BASE DES CONTEXTES
< DES 4 SOMMETS.
LAI 1
STA DELX
STA DELY
BSR ASPIR < RECHERCHE D'UN SOMMET DANS LE PREMIER
< QUADRANT (+1,+1).
LAI -1
STA DELX
BSR ASPIR < RECHERCHE D'UN SOMMET DANS LE DEUXIEME
< QUADRANT (-1,+1).
LAI -1
STA DELY
BSR ASPIR < RECHERCHE D'UN SOMMET DANS LE TROISIEME
< QUADRANT (-1,-1).
LAI 1
STA DELX
BSR ASPIR < RECHERCHE D'UN SOMMET DANS LE QUATRIEME
< QUADRANT (+1,-1).
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD NIV3+XFU-NIV5,W
FMP NIV3+XFV-NIV5,W
FST FWORK1 < INITIALISATION DE LA MISE A L'ECHELLE...
FMP NIV1+XFNIVO-NIV5,W
FST FWORK < N1*FU3*FV3,
FLD NIV1+XFU-NIV5,W
FMP NIV1+XFV-NIV5,W
PSR A,B
FMP NIV3+XFNIVO-NIV5,W
BSR ACUMU < +N3*FU1*FV1,
FLD NIV4+XFU-NIV5,W
FMP NIV4+XFV-NIV5,W
PSR A,B
FMP NIV2+XFNIVO-NIV5,W
BSR ACUMU < +N2*FU4*FV4,
FLD NIV2+XFU-NIV5,W
FMP NIV2+XFV-NIV5,W
PSR A,B
FMP NIV4+XFNIVO-NIV5,W
BSR ACUMU < +N4*FU2*FV2.
<
< CALCUL DU DEPLACEMENT EN 'W' :
<
PLR A,B
BSR ACUMU1 < FU3*FV3+FU2*FV2,
PLR A,B
BSR ACUMU1 < FU3*FV3+FU2*FV2+FU4*FV4,
PLR A,B
BSR ACUMU1 < FU3*FV3+FU2*FV2+FU4*FV4+FU1*FV1.
LXI A0
BSR ASPCT
FMP FWORK
FDV FWORK1 < ET MISE A L'ECHELLE...
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
PLR W
RSR
:F
:F
< <<'SIOP MONTAGNE 2'
DF'SIOP MONTAGNE 3'
ED'SIOP MONTAGNE 3'
IN0
PAGE
IDP "SIOP MONTAGNE 3"
<
<
< G E N E R A T E U R D E M O N T A G N E S 3 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE EN CHAQUE POINT
< (XS,YS) DE 'TV2' IL CENTRE UNE
< SPIRALE DE 'A3' POINTS, ET A
< PARTIR DE LA SOMME PONDEREE DES
< POINTS LA COMPOSANT, IL DEDUIT
< LA COMPOSANTE 'W'...
<
<
< ARGUMENTS :
< A0000=FACTEUR D'AMPLIFICATION DE 'W'.
< A0001=DEPLACEMENT DE 'U',
< A0002=DEPLACEMENT DE 'V'.
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< (RIEN A FAIRE SI =0)
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
A3:: VAL A2+1
A4:: VAL A3+1
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
PREM: WORD 0 < INDICATEUR DE PREMIER PASSAGE...
<
< DEFINITION DE LA SPIRALE :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
<
< PARAMETRES :
<
XFA0: FLOAT 0
XFA1: FLOAT 0
XFA2: FLOAT 0
<
< RELAIS :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ASPW2: WORD SPW2 < RELAI DE SORTIE DE 'SPW'...
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
CPZ PREM < PREMIER TOUR ???
JG SPU1 < OUI...
IC PREM < NON, ENTREE DES PARAMETRES...
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< DEFINITION DES TRANSLATIONS :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
LXI A0
BSR ASPCT
FST XFA0
SPU1: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG SPW3 < NON...
FLD F0 < OUI, DEPLACEMENT NUL...
BR ASPW2 < ET C'EST TOUT...
SPW3: EQU $
<
< CALCUL DU POINT COURANT :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
<
< POSITION DE CE POINT COURANT
< DANS UN CARRE A COORDONNEES
< ENTIERES :
<
FLD GXS
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD GYS
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DU DEPLACEMENT EN 'W' :
<
SPW1: EQU $
FMP XFA0
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
<
< SORTIE :
<
SPW2: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YS
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XS
AD DELTAX < CHANGEMENT DE
STA XS
LA YS
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
:F
:F
< <<'SIOP MONTAGNE 3'
DF'SIOP MONTAGNE 4'
ED'SIOP MONTAGNE 4'
IN0
PAGE
IDP "SIOP MONTAGNE 4"
IF NMPROC-" +",,XWOR%,
$EQU $-32 < A T T E N T I O N ...
IDP "ATTENTION : EST EN RECOUVREMENT DE -32 MOTS !!!"
XWOR%: VAL 0
<
<
< G E N E R A T E U R D E M O N T A G N E S 4 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE EN CHAQUE POINT
< (XS,YS) DE 'TV2' IL CENTRE UNE
< SPIRALE DE 'A3' POINTS, ET A
< PARTIR DE LA SOMME PONDEREE DES
< POINTS LA COMPOSANT, IL DEDUIT
< LA COMPOSANTE 'W'...
<
<
< NOTA :
< #SIOP MONTAGNE 4# N'EST QU'UNE
< VERSION OPTIMISEE DE #SIOP MONTAGNE 3#
< QUI MEMORISE DANS LE Z-BUFFER LES
< ASSOCIATIONS (YS,XS) --> (CUMUL SUR
< LA SPIRALE). AFIN DE NE PAS GENER
< L'ELIMINATION DES LIGNES CACHEES,
< LE BALAYAGE SE FERA D'ARRIERE EN
< AVANT...
<
<
< ARGUMENTS :
< A0000=FACTEUR D'AMPLIFICATION DE 'W'.
< A0001=DEPLACEMENT DE 'U',
< A0002=DEPLACEMENT DE 'V'.
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
A3:: VAL A2+1
A4:: VAL A3+1
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
AFADW: WORD FADW < 'FAD' PUIS 'FST' SUR 'FWORK'...
IPREM: WORD 0 < INDICATEUR DE PREMIERE ENTREE POUR
< L'INITIALISATION DU Z-BUFFER, ET PERMET
< DE FAIRE : (A)=0=(YS,XS)...
FA0: FLOAT 0 < AMPLIFICATEUR DE 'W'.
FA1: FLOAT 0 < DEPLACEMENT SUR 'U',
FA2: FLOAT 0 < ET SUR 'V'.
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DU Z-BUFFER :
<
ZVIDE:: VAL -1 < CODE INDIQUANT QUE LE Z-BUFFER EST VIDE.
LA IPREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC IPREM < OUI, ON NOTERA QU'ALORS :
< (A)=(YS,XS)=0 POUR 'AGZB'...
LYI YSTORE < C'EST LE PREMIER POINT :
< (Y)=FONCTION DE 'STORE Z-BUFFER',
LBI ZVIDE < (B)=VALEUR D'INITIALISATION,
SPU1: EQU $
BSR AGZB < INITIALISATION DU Z-BUFFER...
ADRI 1,A < PASSAGE AU (YS,XS) SUIVANT,
JANE SPU1 < S'IL EXISTE...
<
< DEPLACEMENT SUR X ET Y :
<
LXI A1
BSR ASPCT
FST FA1
LXI A2
BSR ASPCT
FST FA2
<
< AMPLIFICATEUR DE 'W' :
<
LXI A0
BSR ASPCT
FST FA0
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
BSR AROND
STA NPM < NOMBRE DE POINTS MAX...
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD FA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
<
< CALCUL DU POINT COURANT, ET POSITION
< DE CE POINT DANS UN CARRE A
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
BSR AFADW < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
BSR AFADW < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
BSR AFADW < +(1-FU)*FV*N4,
<
< CALCUL DU DEPLACEMENT EN 'W' :
<
FMP FA0
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< LE COUPLE (XS,YS) EXISTE-T'IL
< DEJA DANS LE Z-BUFFER ???
<
LA YS
SWBR A,A
OR XS < (A)=(YS,XS),
LYI YLOAD < (Y)=FONCTION DE 'LOAD Z-BUFFER',
BSR AGZB < (B)=VALEUR ASSOCIEE A (YS,XS) :
LR B,A
CPI ZVIDE < EXISTE-T'ELLE ???
JNE SPMOY6 < OUI, ELLE DEVIENT LE 'CUMUL'...
<
< NON, IL FAUT LA CALCULER :
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YS
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XS
AD DELTAX < CHANGEMENT DE
STA XS
LA YS
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< MEMORISATION DANS LE Z-BUFFER :
<
SWBR B,B
ORR B,A < (A)=(YS,XS),
LYI YSTORE < (Y)=FONCTION DE 'STORE Z-BUFFER',
LB CUMUL < (B)=CUMUL-SPIRALE ASSOCIE A (XS,YS),
BSR AGZB < QUE L'ON MET DANS LE Z-BUFFER...
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
SPMOY6: EQU $ < CAS OU LE Z-BUFFER CONNAIT DEJA (XS,YS) :
FLT
FDV FNP
RSR
<
<
< ' F A D ' + ' F S T ' S U R ' F W O R K ' :
<
<
FADW: EQU $
FAD FWORK
FST FWORK
RSR < ???!???!
:F
:F
< <<'SIOP MONTAGNE 4'
DF'SIOP MONTAGNE CHA 1'
ED'SIOP MONTAGNE CHA 1'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 1"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 1 :
<
<
< FONCTION :
< CE MODULE UTILISE LE TABLEAU
< ALEATOIRE CORRELEE GENERE DANS
< LE Z-BUFFER PAR 'CHAMP RDN 1'.
<
<
< NOTA :
< IL MEMORISE DANS LE Z-BUFFER LES
< VALEURS ALEATOIRES CORRELEES; AFIN DE NE PAS GENER
< L'ELIMINATION DES LIGNES CACHEES,
< LE BALAYAGE SE FERA D'ARRIERE EN
< AVANT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 1#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 1#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 1#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 1#
:F
:F
< <<'SIOP MONTAGNE CHA 1'
DF'SIOP MONTAGNE CHA 2'
ED'SIOP MONTAGNE CHA 2'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 2"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 2 :
<
<
< FONCTION :
< CE MODULE GENERE DES MONTAGNE
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 2'.
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 2#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 2#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 2#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 2#
:F
:F
< <<'SIOP MONTAGNE CHA 2'
DF'SIOP MONTAGNE CHA 3'
ED'SIOP MONTAGNE CHA 3'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 3"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 3 :
<
<
< FONCTION :
< CE MODULE GENERE DES MONTAGNE
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 3'.
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 3#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 3#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 3#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 3#
:F
:F
< <<'SIOP MONTAGNE CHA 3'
DF'SIOP MONTAGNE CHA 4'
ED'SIOP MONTAGNE CHA 4'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 4"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 4 :
<
<
< FONCTION :
< CE MODULE GENERE DES MONTAGNE
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 4' ; SA PARTICULA-
< RITE EST D'ETRE SCALANT : DE NOUVEAUX
< DETAILS APPARAISSENT A CHAQUE NOUVEL
< AGRANDISSEMENT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 4#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 4#
<
< RELAIS INTERNES :
<
ASPU2: WORD SPU2
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JAE SPU9 < OUI...
BR ASPU2 < NON...
SPU9: EQU $
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 4#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA6
LYI 'FF00 < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA1 < TRANSLATION,
FAD VARU < AINSI, ON DEFORME ET TRANSLATE LA
< GRILLE DE BASE...
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA7
LYI '00FF < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA2 < TRANSLATION,
FAD VARV < AINSI, ON DEFORME, ET TRANSLATE LA
< GRILLE DE BASE...
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD XFA8
LYI '0000 < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA4 < ET TRANSLATION...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 4#
:F
:F
< <<'SIOP MONTAGNE CHA 4'
DF'SIOP MONTAGNE CHA 5'
ED'SIOP MONTAGNE CHA 5'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 5"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 5 :
<
<
< FONCTION :
< CE MODULE GENERE DES MONTAGNE
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 5' ; SA PARTICULA-
< RITE EST D'ETRE SCALANT : DE NOUVEAUX
< DETAILS APPARAISSENT A CHAQUE NOUVEL
< AGRANDISSEMENT...
< LA DIFFERENCE ENTRE 'CHAMP 4' ET 'CHAMP 5'
< EST DANS LA FACON DE PONDERER LES FONCTIONS
< ALEATOIRES ADDITIVES, ET DE CALCULER LES
< MAILLES :
<
< CHAMP 4 : MAILLE=RAK(MAILLE),
< PONDERATION=RAK(PONDERATION),
<
< CHAMP 5 : MAILLE=RAC(MAILLE),
< PONDERATION=RAK(PONDERATION),
<
< OU 'RAC' DESIGNE LA RACINE CARREE, ET 'RAK',
< L'ELEVATION A LA PUISSANCE P/(2**Q)...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 5#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 5#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 5#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 5#
:F
:F
< <<'SIOP MONTAGNE CHA 5'
DF'SIOP MONTAGNE CHA 6'
ED'SIOP MONTAGNE CHA 6'
IN0
PAGE
IDP "SIOP MONTAGNE CHA 6"
<
<
< G E N E R A T E U R D E M O N T A G N E S C H A M P 6 :
<
<
< FONCTION :
< CE MODULE GENERE DES MONTAGNE
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 6' ; SA PARTICULA-
< RITE EST D'ETRE SCALANT : DE NOUVEAUX
< DETAILS APPARAISSENT A CHAQUE NOUVEL
< AGRANDISSEMENT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 6#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 6#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 6#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 6#
:F
:F
< <<'SIOP MONTAGNE CHA 6'
DF'SIOP MONTAGNE RDN 1'
ED'SIOP MONTAGNE RDN 1'
IN0
PAGE
IDP "SIOP MONTAGNE RDN 1"
<
<
< G E N E R A T E U R D E M O N T A G N E S R D N 1 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE EN CHAQUE POINT
< (XS,YS) DE 'TV2' IL CENTRE UNE
< SPIRALE DE 'A3' POINTS, ET A
< PARTIR DE LA SOMME PONDEREE DES
< POINTS LA COMPOSANT, IL DEDUIT
< LA COMPOSANTE 'W'... IL AJOUTE
< ENFIN UNE COMPOSANTE ALEATOIRE...
<
<
< NOTA :
< IL MEMORISE DANS LE Z-BUFFER LES
< ASSOCIATIONS (YS,XS) --> (CUMUL SUR
< LA SPIRALE). AFIN DE NE PAS GENER
< L'ELIMINATION DES LIGNES CACHEES,
< LE BALAYAGE SE FERA D'ARRIERE EN
< AVANT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 1#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 1#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 1#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 1#
:F
:F
< <<'SIOP MONTAGNE RDN 1'
DF'SIOP MONTAGNE RDN 2'
ED'SIOP MONTAGNE RDN 2'
IN0
PAGE
IDP "SIOP MONTAGNE RDN 2"
<
<
< G E N E R A T E U R D E M O N T A G N E S R D N 2 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE EN CHAQUE POINT
< (XS,YS) DE 'TV2' IL CENTRE UNE
< SPIRALE DE 'A3' POINTS, ET A
< PARTIR DE LA SOMME PONDEREE DES
< POINTS LA COMPOSANT, IL DEDUIT
< LA COMPOSANTE 'W'... IL AJOUTE
< ENFIN UNE COMPOSANTE ALEATOIRE...
< ET POUR CLORE LE SPECTACLE, IL
< REALISE DANS CHAQUE TRANSFORMEE DE
< CARRE ELEMENTAIRE, UNE HOMOTHETIE
< DE 'TV2'...
<
<
< NOTA :
< IL MEMORISE DANS LE Z-BUFFER LES
< ASSOCIATIONS (YS,XS) --> (CUMUL SUR
< LA SPIRALE). AFIN DE NE PAS GENER
< L'ELIMINATION DES LIGNES CACHEES,
< LE BALAYAGE SE FERA D'ARRIERE EN
< AVANT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 2#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 2#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 2#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 2#
:F
:F
< <<'SIOP MONTAGNE RDN 2'
DF'SIOP MONTAGNE RDN 3'
ED'SIOP MONTAGNE RDN 3'
IN0
PAGE
IDP "SIOP MONTAGNE RDN 3"
<
<
< G E N E R A T E U R D E M O N T A G N E S R D N 3 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< SITUEE EN 'TV2', ET TRANSFORME
< SES NIVEAUX DE GRIS EN ALTITUDES...
< POUR CE FAIRE EN CHAQUE POINT
< (XS,YS) DE 'TV2' IL CENTRE UNE
< SPIRALE DE 'A3' POINTS, ET A
< PARTIR DE LA SOMME PONDEREE DES
< POINTS LA COMPOSANT, IL DEDUIT
< LA COMPOSANTE 'W'... IL AJOUTE
< ENFIN UNE COMPOSANTE ALEATOIRE...
< ET POUR CLORE LE SPECTACLE, IL
< REALISE DANS CHAQUE TRANSFORMEE DE
< CARRE ELEMENTAIRE, UNE HOMOTHETIE
< DE 'TV2'...
<
<
< NOTA :
< IL MEMORISE DANS LE Z-BUFFER LES
< ASSOCIATIONS (YS,XS) --> (CUMUL SUR
< LA SPIRALE). AFIN DE NE PAS GENER
< L'ELIMINATION DES LIGNES CACHEES,
< LE BALAYAGE SE FERA D'ARRIERE EN
< AVANT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 3#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 3#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 3#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 3#
:F
:F
< <<'SIOP MONTAGNE RDN 3'
DF'SIOP PLANET 1'
ED'SIOP PLANET 1'
IN0
PAGE
IDP "SIOP PLANET 1"
<
<
< M I S E S U R U N E P L A N E T E 1 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=R*COS(V)*COS(U),
< Y=R*COS(V)*SIN(U),
< Z=R*SIN(V).
< OU :
< 'R' EST UNE FONCTION R(XR,YR) CALCULEE
< COMME LA COORDONNEE 'Z' DE LA FONCTION
< F(XR,YR) DE #SIOP MONTAGNE 3# :
< R=CONSTANTE5+F(XR,YR).
<
<
< ARGUMENTS :
< A0000=FACTEUR D'AMPLIFICATION DE L'EXTENSION
< F(XR,YR) DU RAYON.
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
< A0005=VALEUR MINIMALE DU RAYON.
A0:: VAL 0
A1:: VAL A0+1 < INUTILES (MAIS COMPATIBILITE
A2:: VAL A1+1 < AVEC #MONTAGNE# ET #MONTAGNE 4#)...
A3:: VAL A2+1
A4:: VAL A3+1
A5:: VAL A4+1
<
<
LOCAL
FLOC: EQU $
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
PREM: WORD 0 < INDICATEUR DE PREMIER PASSAGE.
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO3: WORD RAYON3 < RELAI...
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG RAYON1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
RAYON1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
<
<
< C A L C U L D U R A Y O N :
<
<
< RESULTAT :
< (A,B)=CONSTANTE5+F(XR,YR).
<
<
RAYON: EQU $
CPZ NPM < Y-A-T'IL DES MONTAGNE ???
JG RAYON2 < OUI...
BR ARAYO3 < NON, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
SPW1: EQU $
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON3: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
:F
:F
< <<'SIOP PLANET 1'
DF'SIOP PLANET 2'
ED'SIOP PLANET 2'
IN0
PAGE
IDP "SIOP PLANET 2"
<
<
< M I S E S U R U N E P L A N E T E 2 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=(A5+A0*F(XR,YR))*COS(V)*COS(U),
< Y=(A5+A0*F(XR,YR))*COS(V)*SIN(U),
< Z=(A5+A0*F(XR,YR))*SIN(V).
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 2#
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 2#
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 2#
SPU1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 2#
:F
:F
< <<'SIOP PLANET 2'
DF'SIOP PLANET 3'
ED'SIOP PLANET 3'
IN0
PAGE
IDP "SIOP PLANET 3"
<
<
< M I S E S U R U N E P L A N E T E 3 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=(A5+A0*F(XR,YR))*COS(V)*COS(U),
< Y=(A5+A0*F(XR,YR))*COS(V)*SIN(U),
< Z=(A5+A0*F(XR,YR))*SIN(V).
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 3#
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 3#
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 3#
SPU1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 3#
:F
:F
< <<'SIOP PLANET 3'
DF'SIOP PLANET BOY 1'
ED'SIOP PLANET BOY 1'
IN0
PAGE
IDP "SIOP PLANET BOY 1"
<
<
< M I S E S U R U N E P L A N E T E B O Y 1 :
<
<
< EQUATION :
< A(MU)=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI/6),
< B(MU)=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI/6),
< ALPHA=(PI/8)*SIN(A9*MU),
< X1=(A*A-B*B)/RAC(A*A+B*B)+A*COS(TETA)-B*SIN(TETA),
< Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA),
< X=(X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU))*(A5+A0*F(XR,YR))+A1,
< Y=(X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU))*(A5+A0*F(XR,YR))+A2,
< Z=(Z1*COS(ALPHA))*(A5+A0*F(XR,YR)).
< OU :
< A0000=FACTEUR D'AMPLIFICATION DE L'EXTENSION
< F(XR,YR) DU RAYON.
< A0001=DEPLACEMENT SUR L'AXE DES X,
< A0002=DEPLACEMENT SUR L'AXE DES Y,
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
< A0005=VALEUR MINIMALE DU RAYON.
< TETA=U, ET VARIE SUR (0,2*PI),
< MU=V, ET VARIE SUR (0,PI),
< A0006=PARAMETRE 'A6',
< A0007=PARAMETRE 'A7',
< A0008=PARAMETRE 'A8',
< A0009=PARAMETRE 'A9'.
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
A3:: VAL A2+1
A4:: VAL A3+1
A5:: VAL A4+1
A6:: VAL A5+1
A7:: VAL A6+1
A8:: VAL A7+1
A9:: VAL A8+1
<
<
LOCAL
FLOC: EQU $
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
PREM: WORD 0 < INDICATEUR DE PREMIER PASSAGE.
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< VARIABLES DE MANOEUVRE DE BOY :
<
WXF1: FLOAT 0 < A8*SIN(A9*MU-PI/6), RAC(A*A+B*B), SIN(MU)
WXF2: FLOAT 0 < A*COS(TETA), COS(MU).
WXF3: FLOAT 0 < B*SIN(TETA), Z1*SIN(ALPHA).
WXF4: FLOAT 0 < A*A, Z1*SIN(ALPHA)*SIN(MU),
< Z1*SIN(ALPHA)*COS(MU).
WXF5: FLOAT 0 < B*B.
XFA: FLOAT 0 < A.
XFB: FLOAT 0 < B.
XALPHA: FLOAT 0 < ALPHA.
XX1: FLOAT 0 < X1.
XZ1: FLOAT 0 < Z1.
<
< PARAMETRES DE BOY :
<
XF10: FLOAT 10 < A6.
XF141: FLOAT 1.41 < A7.
XF198: FLOAT 1.98 < A8.
XF3: FLOAT 3 < ARGUMENT 'A9'.
PI: EQU PI3141
XF8: FLOAT 8
XFPI6: FLOAT 0.5235987 < PI/6.
XFA1: FLOAT 0 < DEPLACEMENT SUR L'AXE DES X,
XFA2: FLOAT 0 < ET SUR L'AXE DES Y.
<
< PARAMETRES :
<
TETA: EQU VARU
MU: EQU VARV
<
< SOUS-PROGRAMMES :
<
ASP1: WORD SP1 < CALCUL DES VALEURS UTILES...
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
PROG
<
<
< C A L C U L D E S P A R A M E T R E S :
<
<
SP1: EQU $
<
< CALCUL DES VALEURS UTILISEES POUR
< LES 3 COMPOSANTES :
<
FLD MU
FMP XF3
FSB XFPI6
PSR A,B < A9*MU-PI/6,
BSR ASIN < SIN(A9*MU-PI/6),
FMP XF198
FST WXF1 < A8*SIN(A9*MU-PI/6).
PLR A,B < A9*MU-PI/6,
FDV F05 < 2*A9*MU-PI/3,
BSR ASIN < SIN(2*A9*MU-PI/3),
FMP XF141 < A7*SIN(2*A9*MU-PI/3),
FAD XF10 < A6+A7*SIN(2*A9*MU-PI/3),
PSR A,B
FAD WXF1
FST XFA < A=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI
PLR A,B < A6+A7*SIN(2*A9*MU-PI/3),
FSB WXF1
FST XFB < B=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI
FLD MU
FMP XF3
BSR ASIN
FMP PI
FDV XF8
FST XALPHA < ALPHA=(PI/8)*SIN(A9*MU).
FLD TETA
BSR ACOS
FMP XFA
FST WXF2 < A*COS(TETA).
FLD TETA
BSR ASIN
FMP XFB
FST WXF3 < B*SIN(TETA).
FLD XFA
FMP XFA
FST WXF4 < A*A.
FLD XFB
FMP XFB
FST WXF5 < B*B.
FAD WXF4 < A*A+B*B,
BSR ARAC
FST WXF1 < RAC(A*A+B*B).
FLD WXF4
FSB WXF5 < A*A-B*B,
FDV WXF1 < (A*A-B*B)/RAC(A*A+B*B),
FAD WXF2
FSB WXF3
FST XX1 < X1=(A*A-B*B)/RAC(A*A+B*B)+
< A*COS(TETA)-B*SIN(TETA).
FLD WXF1 < RAC(A*A+B*B),
FAD WXF2
FAD WXF3
FST XZ1 < Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA).
FLD MU
BSR ASIN
FST WXF1 < SIN(MU).
FLD MU
BSR ACOS
FST WXF2 < COS(MU).
FLD XALPHA
BSR ASIN
FMP XZ1
FST WXF3 < Z1*SIN(ALPHA).
RSR
<
<
< C O O R D O N N E E E N ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
<
< DEFINITION DE LA SURFACE DE BOY :
<
LXI A6
BSR ASPCT
FST XF10
LXI A7
BSR ASPCT
FST XF141
LXI A8
BSR ASPCT
FST XF198
LXI A9
BSR ASPCT
FST XF3
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
SPU1: EQU $
<
< CALCUL DES PARAMETRES DE BOY :
<
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA).
<
< COORDONNEE EN 'U' :
<
FMP WXF1 < Z1*SIN(ALPHA)*SIN(MU),
FST WXF4
FLD WXF2 < COS(MU),
FMP XX1 < X1*COS(MU),
FSB WXF4 < X=X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA1 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA),
FMP WXF2 < Z1*SIN(ALPHA)*COS(MU),
FST WXF4
FLD WXF1 < SIN(MU),
FMP XX1 < X1*SIN(MU),
FAD WXF4 < Y=X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA2 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
BSR ASP1 < CALCUL DES PARAMETRES...
FLD XALPHA
BSR ACOS
FMP XZ1 < Z=Z1*COS(ALPHA).
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(CONSTANTE5+F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
:F
:F
< <<'SIOP PLANET BOY 1'
DF'SIOP PLANET BOY 2'
ED'SIOP PLANET BOY 2'
IN0
PAGE
IDP "SIOP PLANET BOY 2"
<
<
< M I S E S U R U N E P L A N E T E B O Y 2 :
<
<
< EQUATION :
< A(MU)=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI/6),
< B(MU)=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI/6),
< ALPHA=(PI/8)*SIN(A9*MU),
< X1=(A*A-B*B)/RAC(A*A+B*B)+A*COS(TETA)-B*SIN(TETA),
< Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA),
< X=(X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU))*(A5+A0*F(XR,YR))+A1,
< Y=(X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU))*(A5+A0*F(XR,YR))+A2,
< Z=(Z1*COS(ALPHA))*(A5+A0*F(XR,YR)).
< OU :
< A0000=FACTEUR D'AMPLIFICATION DE L'EXTENSION
< F(XR,YR) DU RAYON.
< A0001=DEPLACEMENT SUR L'AXE DES X,
< A0002=DEPLACEMENT SUR L'AXE DES Y,
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
< A0005=VALEUR MINIMALE DU RAYON.
< TETA=U, ET VARIE SUR (0,2*PI),
< MU=V, ET VARIE SUR (0,PI),
< A0006=PARAMETRE 'A6',
< A0007=PARAMETRE 'A7',
< A0008=PARAMETRE 'A8',
< A0009=PARAMETRE 'A9'.
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 2#
A6:: VAL A5+1
A7:: VAL A6+1
A8:: VAL A7+1
A9:: VAL A8+1
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 2#
<
< VARIABLES DE MANOEUVRE DE BOY :
<
WXF1: FLOAT 0 < A8*SIN(A9*MU-PI/6), RAC(A*A+B*B), SIN(MU)
WXF2: FLOAT 0 < A*COS(TETA), COS(MU).
WXF3: FLOAT 0 < B*SIN(TETA), Z1*SIN(ALPHA).
WXF4: FLOAT 0 < A*A, Z1*SIN(ALPHA)*SIN(MU),
< Z1*SIN(ALPHA)*COS(MU).
WXF5: FLOAT 0 < B*B.
XFA: FLOAT 0 < A.
XFB: FLOAT 0 < B.
XALPHA: FLOAT 0 < ALPHA.
XX1: FLOAT 0 < X1.
XZ1: FLOAT 0 < Z1.
<
< PARAMETRES DE BOY :
<
XF10: FLOAT 10 < A6.
XF141: FLOAT 1.41 < A7.
XF198: FLOAT 1.98 < A8.
XF3: FLOAT 3 < ARGUMENT 'A9'.
PI: EQU PI3141
XF8: FLOAT 8
XFPI6: FLOAT 0.5235987 < PI/6.
<
< PARAMETRES :
<
TETA: EQU VARU
MU: EQU VARV
<
< SOUS-PROGRAMMES :
<
ASP1: WORD SP1 < CALCUL DES VALEURS UTILES...
PROG
<
<
< C A L C U L D E S P A R A M E T R E S :
<
<
SP1: EQU $
<
< CALCUL DES VALEURS UTILISEES POUR
< LES 3 COMPOSANTES :
<
FLD MU
FMP XF3
FSB XFPI6
PSR A,B < A9*MU-PI/6,
BSR ASIN < SIN(A9*MU-PI/6),
FMP XF198
FST WXF1 < A8*SIN(A9*MU-PI/6).
PLR A,B < A9*MU-PI/6,
FDV F05 < 2*A9*MU-PI/3,
BSR ASIN < SIN(2*A9*MU-PI/3),
FMP XF141 < A7*SIN(2*A9*MU-PI/3),
FAD XF10 < A6+A7*SIN(2*A9*MU-PI/3),
PSR A,B
FAD WXF1
FST XFA < A=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI
PLR A,B < A6+A7*SIN(2*A9*MU-PI/3),
FSB WXF1
FST XFB < B=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI
FLD MU
FMP XF3
BSR ASIN
FMP PI
FDV XF8
FST XALPHA < ALPHA=(PI/8)*SIN(A9*MU).
FLD TETA
BSR ACOS
FMP XFA
FST WXF2 < A*COS(TETA).
FLD TETA
BSR ASIN
FMP XFB
FST WXF3 < B*SIN(TETA).
FLD XFA
FMP XFA
FST WXF4 < A*A.
FLD XFB
FMP XFB
FST WXF5 < B*B.
FAD WXF4 < A*A+B*B,
BSR ARAC
FST WXF1 < RAC(A*A+B*B).
FLD WXF4
FSB WXF5 < A*A-B*B,
FDV WXF1 < (A*A-B*B)/RAC(A*A+B*B),
FAD WXF2
FSB WXF3
FST XX1 < X1=(A*A-B*B)/RAC(A*A+B*B)+
< A*COS(TETA)-B*SIN(TETA).
FLD WXF1 < RAC(A*A+B*B),
FAD WXF2
FAD WXF3
FST XZ1 < Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA).
FLD MU
BSR ASIN
FST WXF1 < SIN(MU).
FLD MU
BSR ACOS
FST WXF2 < COS(MU).
FLD XALPHA
BSR ASIN
FMP XZ1
FST WXF3 < Z1*SIN(ALPHA).
RSR
<
<
< C O O R D O N N E E E N ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
<
< DEFINITION DE LA SURFACE DE BOY :
<
LXI A6
BSR ASPCT
FST XF10
LXI A7
BSR ASPCT
FST XF141
LXI A8
BSR ASPCT
FST XF198
LXI A9
BSR ASPCT
FST XF3
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 2#
SPU1: EQU $
<
< CALCUL DES PARAMETRES DE BOY :
<
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA).
<
< COORDONNEE EN 'U' :
<
FMP WXF1 < Z1*SIN(ALPHA)*SIN(MU),
FST WXF4
FLD WXF2 < COS(MU),
FMP XX1 < X1*COS(MU),
FSB WXF4 < X=X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA1 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA),
FMP WXF2 < Z1*SIN(ALPHA)*COS(MU),
FST WXF4
FLD WXF1 < SIN(MU),
FMP XX1 < X1*SIN(MU),
FAD WXF4 < Y=X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA2 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
BSR ASP1 < CALCUL DES PARAMETRES...
FLD XALPHA
BSR ACOS
FMP XZ1 < Z=Z1*COS(ALPHA).
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 2#
:F
:F
< <<'SIOP PLANET BOY 2'
DF'SIOP PLANET BOY 3'
ED'SIOP PLANET BOY 3'
IN0
PAGE
IDP "SIOP PLANET BOY 3"
<
<
< M I S E S U R U N E P L A N E T E B O Y 3 :
<
<
< EQUATION :
< A(MU)=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI/6),
< B(MU)=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI/6),
< ALPHA=(PI/8)*SIN(A9*MU),
< X1=(A*A-B*B)/RAC(A*A+B*B)+A*COS(TETA)-B*SIN(TETA),
< Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA),
< X=(X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU))*(A5+A0*F(XR,YR))+A1,
< Y=(X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU))*(A5+A0*F(XR,YR))+A2,
< Z=(Z1*COS(ALPHA))*(A5+A0*F(XR,YR)).
< OU :
< A0000=FACTEUR D'AMPLIFICATION DE L'EXTENSION
< F(XR,YR) DU RAYON.
< A0001=DEPLACEMENT SUR L'AXE DES X,
< A0002=DEPLACEMENT SUR L'AXE DES Y,
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
< A0005=VALEUR MINIMALE DU RAYON.
< TETA=U, ET VARIE SUR (0,2*PI),
< MU=V, ET VARIE SUR (0,PI),
< A0006=PARAMETRE 'A6',
< A0007=PARAMETRE 'A7',
< A0008=PARAMETRE 'A8',
< A0009=PARAMETRE 'A9'.
XXXRDN: VAL 1
EOT #SIOP RAYON RDN 3#
A6:: VAL A5+1
A7:: VAL A6+1
A8:: VAL A7+1
A9:: VAL A8+1
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON RDN 3#
<
< VARIABLES DE MANOEUVRE DE BOY :
<
WXF1: FLOAT 0 < A8*SIN(A9*MU-PI/6), RAC(A*A+B*B), SIN(MU)
WXF2: FLOAT 0 < A*COS(TETA), COS(MU).
WXF3: FLOAT 0 < B*SIN(TETA), Z1*SIN(ALPHA).
WXF4: FLOAT 0 < A*A, Z1*SIN(ALPHA)*SIN(MU),
< Z1*SIN(ALPHA)*COS(MU).
WXF5: FLOAT 0 < B*B.
XFA: FLOAT 0 < A.
XFB: FLOAT 0 < B.
XALPHA: FLOAT 0 < ALPHA.
XX1: FLOAT 0 < X1.
XZ1: FLOAT 0 < Z1.
<
< PARAMETRES DE BOY :
<
XF10: FLOAT 10 < A6.
XF141: FLOAT 1.41 < A7.
XF198: FLOAT 1.98 < A8.
XF3: FLOAT 3 < ARGUMENT 'A9'.
PI: EQU PI3141
XF8: FLOAT 8
XFPI6: FLOAT 0.5235987 < PI/6.
<
< PARAMETRES :
<
TETA: EQU VARU
MU: EQU VARV
<
< SOUS-PROGRAMMES :
<
ASP1: WORD SP1 < CALCUL DES VALEURS UTILES...
PROG
<
<
< C A L C U L D E S P A R A M E T R E S :
<
<
SP1: EQU $
<
< CALCUL DES VALEURS UTILISEES POUR
< LES 3 COMPOSANTES :
<
FLD MU
FMP XF3
FSB XFPI6
PSR A,B < A9*MU-PI/6,
BSR ASIN < SIN(A9*MU-PI/6),
FMP XF198
FST WXF1 < A8*SIN(A9*MU-PI/6).
PLR A,B < A9*MU-PI/6,
FDV F05 < 2*A9*MU-PI/3,
BSR ASIN < SIN(2*A9*MU-PI/3),
FMP XF141 < A7*SIN(2*A9*MU-PI/3),
FAD XF10 < A6+A7*SIN(2*A9*MU-PI/3),
PSR A,B
FAD WXF1
FST XFA < A=A6+A7*SIN(2*A9*MU-PI/3)+A8*SIN(A9*MU-PI
PLR A,B < A6+A7*SIN(2*A9*MU-PI/3),
FSB WXF1
FST XFB < B=A6+A7*SIN(2*A9*MU-PI/3)-A8*SIN(A9*MU-PI
FLD MU
FMP XF3
BSR ASIN
FMP PI
FDV XF8
FST XALPHA < ALPHA=(PI/8)*SIN(A9*MU).
FLD TETA
BSR ACOS
FMP XFA
FST WXF2 < A*COS(TETA).
FLD TETA
BSR ASIN
FMP XFB
FST WXF3 < B*SIN(TETA).
FLD XFA
FMP XFA
FST WXF4 < A*A.
FLD XFB
FMP XFB
FST WXF5 < B*B.
FAD WXF4 < A*A+B*B,
BSR ARAC
FST WXF1 < RAC(A*A+B*B).
FLD WXF4
FSB WXF5 < A*A-B*B,
FDV WXF1 < (A*A-B*B)/RAC(A*A+B*B),
FAD WXF2
FSB WXF3
FST XX1 < X1=(A*A-B*B)/RAC(A*A+B*B)+
< A*COS(TETA)-B*SIN(TETA).
FLD WXF1 < RAC(A*A+B*B),
FAD WXF2
FAD WXF3
FST XZ1 < Z1=RAC(A*A+B*B)+A*COS(TETA)+B*SIN(TETA).
FLD MU
BSR ASIN
FST WXF1 < SIN(MU).
FLD MU
BSR ACOS
FST WXF2 < COS(MU).
FLD XALPHA
BSR ASIN
FMP XZ1
FST WXF3 < Z1*SIN(ALPHA).
RSR
<
<
< C O O R D O N N E E E N ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
<
< DEFINITION DE LA SURFACE DE BOY :
<
LXI A6
BSR ASPCT
FST XF10
LXI A7
BSR ASPCT
FST XF141
LXI A8
BSR ASPCT
FST XF198
LXI A9
BSR ASPCT
FST XF3
XXXRDN: VAL 3
EOT #SIOP RAYON RDN 3#
SPU1: EQU $
<
< CALCUL DES PARAMETRES DE BOY :
<
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA).
<
< COORDONNEE EN 'U' :
<
FMP WXF1 < Z1*SIN(ALPHA)*SIN(MU),
FST WXF4
FLD WXF2 < COS(MU),
FMP XX1 < X1*COS(MU),
FSB WXF4 < X=X1*COS(MU)-Z1*SIN(ALPHA)*SIN(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA1 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
BSR ASP1 < CALCUL DES PARAMETRES ; RENVOIE :
< Z1*SIN(ALPHA),
FMP WXF2 < Z1*SIN(ALPHA)*COS(MU),
FST WXF4
FLD WXF1 < SIN(MU),
FMP XX1 < X1*SIN(MU),
FAD WXF4 < Y=X1*SIN(MU)+Z1*SIN(ALPHA)*COS(MU).
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA2 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
BSR ASP1 < CALCUL DES PARAMETRES...
FLD XALPHA
BSR ACOS
FMP XZ1 < Z=Z1*COS(ALPHA).
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON RDN 3#
:F
:F
< <<'SIOP PLANET BOY 3'
DF'SIOP PLANET CHAMP 3'
ED'SIOP PLANET CHAMP 3'
IN0
PAGE
IDP "SIOP PLANET CHAMP 3"
<
<
< M I S E S U R U N E P L A N E T E C H A M P 3 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=(A5+A0*F(XR,YR))*COS(V)*COS(U),
< Y=(A5+A0*F(XR,YR))*COS(V)*SIN(U),
< Z=(A5+A0*F(XR,YR))*SIN(V).
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 3#
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 3#
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 3#
SPU1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 3#
:F
:F
< <<'SIOP PLANET CHAMP 3'
DF'SIOP PLANET CHAMP 4'
ED'SIOP PLANET CHAMP 4'
IN0
PAGE
IDP "SIOP PLANET CHAMP 4"
<
<
< M I S E S U R U N E P L A N E T E C H A M P 4 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=(A5+A0*F(XR,YR))*COS(V)*COS(U),
< Y=(A5+A0*F(XR,YR))*COS(V)*SIN(U),
< Z=(A5+A0*F(XR,YR))*SIN(V).
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 4#
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 4#
<
< RELAIS INTERNES :
<
ASPU1: WORD SPU1
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JLE SPU9 < OUI...
BR ASPU1 < NON...
SPU9: EQU $
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 4#
SPU1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 4#
:F
:F
< <<'SIOP PLANET CHAMP 4'
DF'SIOP PLANET CHAMP 6'
ED'SIOP PLANET CHAMP 6'
IN0
PAGE
IDP "SIOP PLANET CHAMP 6"
<
<
< M I S E S U R U N E P L A N E T E C H A M P 6 :
< ( D ' A X E Z )
<
<
< EQUATION :
< X=(A5+A0*F(XR,YR))*COS(V)*COS(U),
< Y=(A5+A0*F(XR,YR))*COS(V)*SIN(U),
< Z=(A5+A0*F(XR,YR))*SIN(V).
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 6#
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 6#
PROG
<
<
< C O M P O S A N T E ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 6#
SPU1: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*COS(U)...
RSR
<
<
< C O M P O S A N T E ' V ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
BSR ARAYON < CALCUL DE R(X,Y)*COS(V)*SIN(U)...
RSR
<
<
< C O M P O S A N T E ' W ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
BSR ARAYON < CALCUL DE R(X,Y)*SIN(V)...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 6#
:F
:F
< <<'SIOP PLANET CHAMP 6'
DF'SIOP PLANET CYL 1'
ED'SIOP PLANET CYL 1'
IN0
PAGE
IDP "SIOP PLANET CYL 1"
<
<
< M I S E S U R U N E P L A N E T E C Y L 1 :
< ( D ' A X E Z )
<
<
< EQUATION DU CYLINDRE :
< X=(A5+A0*F(XR,YR))*A12*COS(A10*U+A11*V),
< Y=(A5+A0*F(XR,YR))*A13*SIN(A10*U+A11*V),
< Z=(A5+A0*F(XR,YR))*A14*V.
<
<
< NOTA :
< LE PARAMETRE 'A11' INTRODUIT
< UN DEPHASAGE SUR 'U' QUI PERMET
< AINSI DE TORDRE LE CYLINDRE.
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON 1#
A10:: VAL '10
A11:: VAL A10+1
A12:: VAL A11+1
A13:: VAL A12+1
A14:: VAL A13+1
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON 1#
<
< DEFINITION DU CYLINDRE :
<
XFA10: FLOAT 0 < 'A10',
XFA11: FLOAT 0 < 'A11',
XFA12: FLOAT 0 < 'A12',
XFA13: FLOAT 0 < 'A13',
XFA14: FLOAT 0 < 'A14'.
PROG
<
<
< C O M P O S A N T E ' X ' :
<
<
SPU: EQU $
<
< ENTREE DES PARAMETRES AU PREMIER TOUR :
<
CPZ PREM < EST-CE LE PREMIER TOUR ???
JG SPU1 < NON...
IC PREM < OUI, ON ENTRE LES PARAMETRES...
XXXRDN: VAL 3
EOT #SIOP RAYON 1#
<
< DEFINITION DU CYLINDRE :
<
LXI A10
BSR ASPCT
FST XFA10
LXI A11
BSR ASPCT
FST XFA11
LXI A12
BSR ASPCT
FST XFA12
LXI A13
BSR ASPCT
FST XFA13
LXI A14
BSR ASPCT
FST XFA14
SPU1: EQU $
<
< CALCUL DE LA COMPOSANTE 'X' :
<
FLD VARU < U,
FMP XFA10 < A10*U,
FST FWORK
FLD VARV < V,
FMP XFA11 < A11*V,
FAD FWORK < A10*U+A11*V,
BSR ACOS < COS(A10*U+A11*V),
FMP XFA12 < X=A12*COS(A10*U+A11*V).
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
<
<
< C O M P O S A N T E ' Y ' :
<
<
SPV: EQU $
FLD VARU < U,
FMP XFA10 < A10*U,
FST FWORK
FLD VARV < V,
FMP XFA11 < A11*V,
FAD FWORK < A10*U+A11*V,
BSR ASIN < SIN(A10*U+A11*V),
FMP XFA13 < Y=A13*SIN(A10*U+A11*V).
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
<
<
< C O M P O S A N T E ' Z ' :
<
<
SPW: EQU $
FLD VARV < V,
FMP XFA14 < Z=A134V.
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON 1#
:F
:F
< <<'SIOP PLANET CYL 1'
DF'SIOP PLANET KLEIN 1'
ED'SIOP PLANET KLEIN 1'
IN0
PAGE
IDP "SIOP PLANET KLEIN 1"
<
<
< M I S E S U R U N E P L A N E T E K L E I N 1 :
<
<
< EQUATION :
< BETA=ALPHA/A13,
< A=SIN(TETA)*COS(BETA)+COS(TETA)*SIN(TETA)*SIN(BETA)+A9,
< X=A10*(A5+A0*F(XR,YR))*A*COS(A14*ALPHA)+A1,
< Y=A11*(A5+A0*F(XR,YR))*A*SIN(A15*ALPHA)+A2,
< Z=A12*(A5+A0*F(XR,YR))*(-SIN(TETA)*SIN(BETA)
< +COS(TETA)*SIN(TETA)*COS(BETA)),
< AVEC :
< ALPHA=U*(2*PI-A7*PI)/(2*PI),
< TETA=V*2*A8+PI-A8*PI,
< OU :
< U APPARTIENT A (0,2*PI),
< V APPARTIENT A (0,PI),
< ALPHA APPARTIENT A (0,2*PI-A7*PI),
< TETA APPARTIENT A (PI-A8*PI,PI+A8*PI).
< OU :
< A0000=FACTEUR D'AMPLIFICATION DE L'EXTENSION
< F(XR,YR) DU RAYON.
< A0001=DEPLACEMENT SUR L'AXE DES X,
< A0002=DEPLACEMENT SUR L'AXE DES Y,
< A0003=NOMBRE DE POINTS DE LA SPIRALE.
< A0004=PAS DE PARCOURS DE LA SPIRALE (1 EN GENERAL).
< A0005=VALEUR MINIMALE DU RAYON.
< A0007 A A000F SONT DES PARAMETRES DE CONTROLE
< DE LA BOUTEILLE DE KLEIN ET DU RUBAN DE MOBIUS,
< AVEC EN GENERAL :
< A0009=2, ET
< A000D=2,
< A000E=1,
< A000F=1.
A0:: VAL 0
A1:: VAL A0+1
A2:: VAL A1+1
A3:: VAL A2+1
A4:: VAL A3+1
A5:: VAL A4+1
A6:: VAL A5+1
A7:: VAL A6+1
A8:: VAL A7+1
A9:: VAL A8+1
A10:: VAL A9+1
A11:: VAL A10+1
A12:: VAL A11+1
A13:: VAL A12+1
A14:: VAL A13+1
A15:: VAL A14+1
<
<
LOCAL
FLOC: EQU $
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
PREM: WORD 0 < INDICATEUR DE PREMIER PASSAGE.
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< VARIABLES DE MANOEUVRE DE KLEIN :
<
WXFA1: FLOAT 0
WXFA2: FLOAT 0
WXFA3: FLOAT 0
WXFA4: FLOAT 0
WXFA5: FLOAT 0
<
< PARAMETRES DE KLEIN :
<
PI: EQU PI3141
FA7: FLOAT 0
FA8: FLOAT 0
FA9: FLOAT 0
FA10: FLOAT 0
FA11: FLOAT 0
FA12: FLOAT 0
FA13: FLOAT 0
FA14: FLOAT 0
FA15: FLOAT 0
XFA1: FLOAT 0 < DEPLACEMENT SUR L'AXE DES X,
XFA2: FLOAT 0 < ET SUR L'AXE DES Y.
<
< PARAMETRES :
<
TETA: FLOAT 0
ALPHA: FLOAT 0
<
< SOUS-PROGRAMMES :
<
ASP1: WORD SP1 < CALCUL DE LA FONCTION 'A'.
ASP2: WORD SP2 < CALCUL DE 'TETA' ET 'ALPHA'.
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
PROG
<
<
< C A L C U L D E S P A R A M E T R E S :
<
<
SP1: EQU $
<
< CALCUL DES 2 ANGLES-PARAMETRES :
< (TETA ET ALPHA)
<
BSR ASP2
<
< CALCUL DE LA FONCTION 'A' :
<
BSR ASIN < SIN(TETA),
FST WXFA1 < SIN(TETA),
FLD ALPHA
FDV FA13 < ALPHA/A13,
FST WXFA2 < ALPHA/A13,
BSR ACOS < COS(ALPHA/A13),
FMP WXFA1 < SIN(TETA)*COS(ALPHA/A13),
FST WXFA3 < SIN(TETA)*COS(ALPHA/A13),
FLD TETA
BSR ACOS < COS(TETA),
FMP WXFA1 < COS(TETA)*SIN(TETA),
FST WXFA4 < COS(TETA)*SIN(TETA),
FLD WXFA2 < ALPHA/A13,
BSR ASIN < SIN(ALPHA/A13),
FMP WXFA4 < COS(TETA)*SIN(TETA)*SIN(ALPHA/A13),
FAD WXFA3 < SIN(TETA)*COS(ALPHA/A13)
< +COS(TETA)*SIN(TETA)*SIN(ALPHA/13),
FAD FA9 < ET TRANSLATION DE +A9,
FST WXFA5 < CE QUI DONNE LA FONCTION 'A'...
RSR
<
<
< C A L C U L D E ' A L P H A ' E T ' T E T A ' :
<
<
SP2: EQU $
FLD DEUXPI
FSB FA7 < 2*PI-A7*PI,
FMP VARU < U*(2*PI-A7*PI),
FDV DEUXPI < U*(2*PI-A7*PI)/(2*PI),
FST ALPHA < SOIT 'ALPHA'...
FLD PI
FMP FA8 < PI*A8,
FST FWORK
FLD VARV
FMP FA8 < V*A8,
FDV F05 < V*2*A8 = (V/PI)*(2*PI*A8),
FAD PI < (V*2*A8)+PI,
FSB FWORK < (V*2*A8)+PI-PI*A8,
FST TETA < SOIT 'TETA'...
RSR
<
<
< C O O R D O N N E E E N ' U ' :
<
<
SPU: EQU $
<
< EST-CE LE PREMIER PASSAGE ???
<
CPZ PREM < ???
JG SPU1 < NON...
IC PREM < OUI, ON FAIT DES INITIALISATIONS...
<
< DEFINITION DE LA SURFACE DE KLEIN :
<
LXI A7
BSR ASPCT
FMP PI
FST FA7 < A7*PI...
LXI A8
BSR ASPCT
FST FA8
LXI A9
BSR ASPCT
FST FA9
LXI A10
BSR ASPCT
FST FA10
LXI A11
BSR ASPCT
FST FA11
LXI A12
BSR ASPCT
FST FA12
LXI A13
BSR ASPCT
FST FA13
LXI A14
BSR ASPCT
FST FA14
LXI A15
BSR ASPCT
FST FA15
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
SPU1: EQU $
<
< CALCUL DES PARAMETRES DE KLEIN :
<
BSR ASP1 < CALCUL DES PARAMETRES ET DE LA
< FONCTION 'A'.
<
< COORDONNEE EN 'U' :
<
FLD ALPHA < ALPHA,
FMP FA14 < A14*ALPHA,
BSR ACOS < COS(A14*ALPHA),
FMP WXFA5 < A*COS(A14*ALPHA),
FMP FA10 < A10*A*COS(A14*ALPHA)...
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA1 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
BSR ASP1 < CALCUL DES PARAMETRES ET DE LA
< FONCTION 'A'.
FLD ALPHA < ALPHA,
FMP FA15 < A15*ALPHA,
BSR ASIN < SIN(A15*ALPHA),
FMP WXFA5 < A*SIN(A15*ALPHA),
FMP FA11 < A11*A*SIN(A15*ALPHA)...
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD XFA2 < ET TRANSLATION.
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
BSR ASP2 < CALCUL DE 'TETA' ET 'ALPHA'.
FLD TETA
BSR ASIN < SIN(TETA),
FST WXFA1 < SIN(TETA),
FLD ALPHA
FDV FA13 < ALPHA/A13,
FST WXFA2 < ALPHA/A13,
BSR ASIN < SIN(ALPHA/A13),
FMP WXFA1 < SIN(TETA)*SIN(ALPHA/A13),
FST WXFA3 < SIN(TETA)*SIN(ALPHA/A13),
FLD TETA
BSR ACOS < COS(TETA),
FMP WXFA1 < COS(TETA)*SIN(TETA),
FST WXFA4 < COS(TETA)*SIN(TETA),
FLD WXFA2 < ALPHA/A13,
BSR ACOS < COS(ALPHA/A13),
FMP WXFA4 < COS(TETA)*SIN(TETA)*COS(ALPHA/A13),
FSB WXFA3 < -SIN(TETA)*SIN(ALPHA/A13)
< +COS(TETA)*SIN(TETA)*COS(ALPHA/A13),
FMP FA12 < A12*(...),
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(CONSTANTE5+F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
:F
:F
< <<'SIOP PLANET KLEIN 1'
DF'SIOP PLANET TORE 1'
ED'SIOP PLANET TORE 1'
IN0
PAGE
IDP "SIOP PLANET TORE 1"
<
<
< M I S E S U R U N E P L A N E T E T O R E 1 :
< ( D ' A X E Z )
<
<
< EQUATION DU TORE :
< X=(A6+A7*(A5+A0*F(XR+A1,YR))*COS(V))*COS(U)+A1,
< Y=(A6+A7*(A5+A0*F(XR+A2,YR))*COS(V))*SIN(U)+A2,
< Z=A7*(A5+A0*F(XR,YR))*SIN(V).
< OU
< 'A6' REPRESENTE LE GRAND RAYON, ET
< 'A7' LE PETIT...
<
<
XXXRDN: VAL 1
EOT #SIOP RAYON 1#
A6:: VAL A5+1 < GRAND RAYON,
A7:: VAL A6+1 < PETIT RAYON.
LOCAL
FLOC: EQU $
<
< RAYONS DU TORE :
<
R1: FLOAT 0
R2: FLOAT 0
XXXRDN: VAL 2
EOT #SIOP RAYON 1#
PROG
<
<
< C O O R D O N N E E ' X ' :
<
<
SPU: EQU $
<
< ENTREE DES PARAMETRES :
<
CPZ PREM < PREMIER PASSAGE ???
JG SPU1 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON 1#
LXI A6
BSR ASPCT
FST R1
LXI A7
BSR ASPCT
FST R2
<
< CALCUL DE LA COORDONNEE 'X' :
<
SPU1: EQU $
FLD VARV
BSR ACOS
FMP R2
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD R1
FST FWORK
FLD VARU
BSR ACOS
FMP FWORK
FAD XFA1 < TRANSLATION...
RSR
<
<
< C O O R D O N N E E ' Y ' :
<
<
SPV: EQU $
FLD VARV
BSR ACOS
FMP R2
BSR ARAYON < MODULATION MONTAGNEUSE...
FAD R1
FST FWORK
FLD VARU
BSR ASIN
FMP FWORK
FAD XFA2 < TRANSLATION...
RSR
<
<
< C O O R D O N N E E ' Z ' :
<
<
SPW: EQU $
FLD VARV
BSR ASIN
FMP R2
BSR ARAYON < MODULATION MONTAGNEUSE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON 1#
:F
:F
< <<'SIOP PLANET TORE 1'
DF'SIOP RAYON 1'
ED'SIOP RAYON 1'
IN0
NLS
IDP "SIOP RAYON 1"
< R A Y O N 1 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < NOMBRE DE POINTS DE LA SPIRALE ; SI
< CELUI-CI EST NUL, IL N'Y A PAS DE CALCUL
< DE FONCTION MONTAGNEUSE...
A4:: VAL A3+1 < PAS DE PARCOURS DE LA SPIRALE (+1 EN
< GENERAL...).
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON 1'
DF'SIOP RAYON 2'
ED'SIOP RAYON 2'
IN0
NLS
IDP "SIOP RAYON 2"
< R A Y O N 2 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XS,YS).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < INUTILE...
< (COMPATIBILITE AVEC #SIOP RAYON 1#)
A4:: VAL A3+1 < INUTILE...
< (COMPATIBILITE AVEC 'SIO RAYON 1')
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XS,YS).
A6:: VAL A5+1 < AMPLIFICATEUR PARTIEL DE FXG*FXD.
A7:: VAL A6+1 < AMPLIFICATEUR PARTIEL DE FYG*FYD.
A8:: VAL A7+1 < PAS DE PARCOURS SUR OX,
A9:: VAL A8+1 < ET SUR OY...
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
XA6: FLOAT 0 < AMPLI DE FXG*FXD,
XA7: FLOAT 0 < AMPLI DE FYG*FYD.
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< DONNEES D'INTERPOLATION :
<
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
<
< RECHERCHE DES POINTS NON NOIRS :
<
SXC: WORD 0 < SAUVEGARDE DU
SYC: WORD 0 < POINT COURANT (XS,YS).
FXG: FLOAT 0 < NOMBRE DE POINTS NON NOIRS SUR 'XG',
FXD: FLOAT 0 < SUR 'XD',
FYG: FLOAT 0 < SUR 'YG',
FYD: FLOAT 0 < ET SUR 'YD'.
XA8: WORD 0 < INCREMENT SUR OX,
XA9: WORD 0 < INCREMENT SUR OY.
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS :
<
ARAYON: WORD RAYON < BOURSOUFLURE...
ASPIR: WORD SPIR < RECHERCHE DANS 4 DIRECTIONS...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< PAS DE PARCOURS :
<
LXI A8
BSR ASPCT
BSR AROND
STA XA8 < SUR OX,
LXI A9
BSR ASPCT
BSR AROND
STA XA9 < ET SUR OY...
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A6
BSR ASPCT
FST XA6 < AMPLI DE FXG*FXD.
LXI A7
BSR ASPCT
FST XA7 < AMPLI DE FYG*FYD.
LXI A5
BSR ASPCT
FST FA5
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XS,YS))*(FONCTION COURANTE).
<
<
RAYON: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< R E C H E R C H E D A N S 4 D I R E C T I O N S :
<
<
SPIR: EQU $
<
< SAUVEGARDE DU POINT COURANT :
<
LA XS
LB YS
STB SYC
STA SXC
<
< RECHERCHE DE 'G' HORIZONTAL GAUCHE :
<
LAI -1
STA XS < INITIALISATION POINT DE DEPART.
LXI 0 < INITIALISATION DU COMPTAGE DE POINTS
< NON NOIRS RECONTRES JUSQU'A 'SXC'.
LYI 0 < COMPTAGE DES NOIRS...
RAY1: EQU $
LA XS < AU POINT SUIVANT :
AD XA8
STA XS
CP SXC < EST-CE LE POINT COURANT ???
JGE RAY2 < OUI, FIN DE LA RECHERCHE A GAUCHE...
BSR ASPGPS < NON, TEST DU POINT (XS,YS) :
ADRI 1,Y < A PRIORI...
JAE RAY1 < IL EST NOIR, ON L'IGNORE...
ADRI -1,Y < CORRECTION...
ADRI 1,X < ET ON LE COMPTE...
JMP RAY1 < VERS LE POINT SUIVANT...
RAY2: EQU $
LR X,A < (A)=NOMBRE DE POINTS NON NOIRS...
FLT
FST FXG < CE QUI DONNE LE 'G' HORIZONTAL GAUCHE...
<
< RECHERCHE DU 'G' HORIZONTAL DROITE :
<
LAI NPOLM1
ADRI 1,A
STA XS < INITIALISATION DU POINT DE DEPART.
LXI 0 < INITIALISATION DU COMPTAGE DE POINTS
< NON NOIRS RENCONTRES JUSQU'A 'SXC'.
LYI 0 < COMPTAGE DES NOIRS...
RAY3: EQU $
LA XS < AU POINT PRECEDENT :
SB XA8
STA XS
CP SXC < EST-CE LE POINT COURANT ???
JLE RAY4 < OUI, FIN DE LA RECHERCHE A DROITE...
BSR ASPGPS < NON, TEST DU POINT (XS,YS) :
ADRI 1,Y < A PRIORI...
JAE RAY3 < IL EST NOIR, ON L'IGNORE...
ADRI -1,Y < CORRECTION...
ADRI 1,X < ET ON LE COMPTE...
JMP RAY3 < VERS LE POINT PRECEDENT...
RAY4: EQU $
LR X,A < (A)=NOMBRE DE POINTS NON NOIRS...
FLT
FST FXD < CE QUI DONNE LE 'G' HORIZONTAL DROITE...
<
< RECHERCHE DE 'G' VERTICAL HAUT :
<
LA SXC
STA XS < RESTAURE 'XS'...
RAY20: EQU $ < CAS OU LES 'G' HORIZONTAUX NE SONT PAS
< A CALCULER...
LAI -1
STA YS < INITIALISATION POINT DE DEPART.
LXI 0 < INITIALISATION DU COMPTAGE DE POINTS
< NON NOIRS RECONTRES JUSQU'A 'SYC'.
LYI 0 < COMPTAGE DES POINTS NOIRS...
RAY5: EQU $
LA YS < AU POINT SUIVANT :
AD XA9
STA YS
CP SYC < EST-CE LE POINT COURANT ???
JGE RAY6 < OUI, FIN DE LA RECHERCHE EN HAUT...
BSR ASPGPS < NON, TEST DU POINT (XS,YS) :
ADRI 1,Y < A PRIORI...
JAE RAY5 < IL EST NOIR, ON L'IGNORE...
ADRI -1,Y < CORRECTION...
ADRI 1,X < ET ON LE COMPTE...
JMP RAY5 < VERS LE POINT SUIVANT...
RAY6: EQU $
LR X,A < (A)=NOMBRE DE POINTS NON NOIRS...
FLT
FST FYG < CE QUI DONNE LE 'G' VERTICAL HAUT...
<
< RECHERCHE DU 'G' VERTICAL BAS :
<
LAI NLIGM1
ADRI 1,A
STA YS < INITIALISATION DU POINT DE DEPART.
LXI 0 < INITIALISATION DU COMPTAGE DE POINTS
< NON NOIRS RENCONTRES JUSQU'A 'SYC'.
LYI 0 < COMPTAGE DES POINTS NOIRS...
RAY7: EQU $
LA YS < AU POINT PRECEDENT :
SB XA9
STA YS
CP SYC < EST-CE LE POINT COURANT ???
JLE RAY8 < OUI, FIN DE LA RECHERCHE EN BAS...
BSR ASPGPS < NON, TEST DU POINT (XS,YS) :
ADRI 1,Y < A PRIORI...
JAE RAY7 < IL EST NOIR, ON L'IGNORE...
ADRI -1,Y < CORRECTION...
ADRI 1,X < ET ON LE COMPTE...
JMP RAY7 < VERS LE POINT PRECEDENT...
RAY8: EQU $
LR X,A < (A)=NOMBRE DE POINTS NON NOIRS...
FLT
FST FYD < CE QUI DONNE LE 'G' VERTICAL BAS...
<
< RESTAURATION DU POINT COURANT :
<
LA SYC
STA YS
<
< RETOUR A TV1 :
<
STZ XCTCDA
<
< CALCUL DE L'AMPLITUDE :
<
FLD FXG
FMP FXD
FMP XA6 < SCALING...
FMP FYG
FMP FYD
FMP XA7 < SCALING...
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON 2'
DF'SIOP RAYON CHAMP 1'
ED'SIOP RAYON CHAMP 1'
IN0
NLS
IDP "SIOP RAYON CHAMP 1"
< R A Y O N C H A M P 1 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < INUTILISE...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JNE RAYON2 < NON, ON Y VA...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
LA YS
SWBR A,A
OR XS
LYI YLOAD
BSR AGZB < ACCES A LA VALEUR DU TABLEAU ALEATOIRE
< CORRELEE ASSOCIEE AU POINT (YS,XS),
LR B,A < QUE L'ON MET DANS 'A',
FLT
FMP FA3 < QUE L'ON NORMALISE...
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 1'
DF'SIOP RAYON CHAMP 2'
ED'SIOP RAYON CHAMP 2'
IN0
NLS
IDP "SIOP RAYON CHAMP 2"
< R A Y O N C H A M P 2 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < INUTILISE...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A10:: VAL '10 < BORNE SUP(RDN),
A11:: VAL A10+1 < BORNE INF(RDN),
A12:: VAL A11+1 < MULTIPLICATEUR(RDN).
A13:: VAL A12+1 < INUTILISE...
A14:: VAL A13+1 < PAS EN 'X' DE LA GRILLE DE DEPART,
A15:: VAL A14+1 < PAS EN 'Y' DE LA GRILLE DE DEPART.
A16:: VAL A15+1 < PARAMETRE DE DEFINITION DU GENERATEUR
< ALEATOIRE...
A17:: VAL A16+1 < NOMBRE DE RECURSION MAX LORS DE LA SOM-
< MATION DES FONCTIONS ALEATOIRES.
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
FCUMR: FLOAT 0 < SIGMA DES FONCTIONS ALEATOIRES
< SCALANTES.
FPOND: FLOAT 0 < POUR LES PONDERER...
FPOND0:: FLOAT 0 < VALEUR INITIALE DE LA PONDERATION :
< FPOND0=RAC(PASIX*PASIY).
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
POINTM: WORD 0 < POINT COURANT DANS LA MAILLE SOUS LA
< FORME (Y,X).
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
XA17: WORD 0 < PARAMETRE 'A17'.
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA16: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0010: WORD 0 < BORNE SUPERIEURE,
XA0011: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < INTERPOLER...
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
APRDN: WORD PRDN < CALCUL D'UNE VALEUR ALEATOIRE SUR LA
< GRILLE COURANTE...
ASP1: WORD SP1 < APPEL DE 'RDN' ET FLOTTAISON...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A10
BSR ASPCT
FIX
STA XA0010 < BORNE SUPERIEURE,
LXI A11
BSR ASPCT
FIX
STA XA0011 < ET BORNE INFERIEURE...
LXI A12
BSR ASPCT
FCAZ
JLE $ < ????!?!
FST FMUL
LXI A16
BSR ASPCT
BSR AROND
STA XA16 < PARAMETRE D'INITIALISATION...
<
< ENTREE DE LA GRILLE :
<
LXI A14
BSR ASPCT
FMP FK < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
FLT
FST FWORK5
LXI A15
BSR ASPCT
FMP FK < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
FLT
FMP FWORK5 < CALCUL DE LA SUPERFICIE DE LA MAILLE...
BSR ARAC
FST FPOND0 < LA PONDERATION INITIALE DES FONCTIONS
< ALEATOIRES EST EN FAIT LA TAILLE DE LA
< MAILLE...
LXI A17
BSR ASPCT
BSR AROND
JALE $ < ?!?!???
STA XA17 < NOMBRE DE RECURSION MAX LORS DE LA
< SOMMATION DES FONCTIONS ALEATOIRES.
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< C A L C U L D E R D N ( X S , Y S ) :
<
<
< ARGUMENT :
< (XS,YS)=POINT COURANT.
<
<
< RESULTAT :
< (A,B)=VALEUR ALEATOIRE ASSOCIEE A (XS,YS)
< ISSUE DIRECTEMENT DE 'RDN' SI (XS,YS)
< EST UN NOEUD DE LA GRILLE COURANTE,
< ET UNE VALEUR INTERPOLEE SINON...
<
<
PRDN: EQU $
PSR X,Y
LX XS < PLACONS NOUS AU
LY YS < POINT COURANT...
PSR X,Y < ET SAVE...
SWBR Y,A
ORR X,A
STA POINTM < POINT COURANT (Y,X).
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
BSR ASP1 < LE POINT COURANT EST UN NOEUD...
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA PASIX
FLT
FST FWORK
LR X,A
SB XNOEUD < X-XNOEUD,
FLT
FDV FWORK < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA PASIY
FLT
FST FWORK
LR Y,A
SB YNOEUD < Y-YNOEUD,
FLT
FDV FWORK < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
LBI 0 < PREMIER NOEUD :
BSR ASP1
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XS
AD PASIX
STA XS
LBI 1 < DEUXIEME NOEUD :
BSR ASP1
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YS
AD PASIY
STA YS
LBI 2 < TROISIEME NOEUD :
BSR ASP1
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LA XS
SB PASIX
STA XS
LBI 3 < QUATRIEME NOEUD :
BSR ASP1
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
<
< SORTIE :
<
SPU30: EQU $
PLR X,Y
STY YS < RESTAURE
STX XS < LE POINT COURANT...
PLR X,Y
RSR
<
<
< A C C E S R D N :
<
<
SP1: EQU $
BSR ARDN
FLT
RSR < FACILE...
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN: EQU $
SPRDN1: EQU $
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
EOR MCDAR
MP RDN1
SCRD RDN3
JANE SPMOYC
LR B,A
JANE SPMOYC
LA F1 < REINITIALISATION...
EOR XS
AD F1+1 < ????
AD RDN2
SPMOYC: EQU $
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
EOR MCDAV
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA F1
EOR YS
EOR F1+1
AD RDN2
SPMOYF: EQU $
STA RDN4
EOR MCDAB
EOR RDN
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0010 < BORNE SUPERIEURE,
FLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0011 < BORNE INFERIEURE,
FLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FIX
CP XA0010 < ???
JG SPRDN3 < ERREUR...
CP XA0011 < ???
JL SPRDN3 < ERREUR...
FLT
FMP FMUL
BSR AROND < (A)=NOMBRE ALEATOIRE ENTIER...
PLR B
RSR
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
PSR B
LA YS
SWBR A,A
OR XS < ON FORME UNE COMBINAISON BIUNIVOQUE
< DE XS ET YS...
AD RDN1
PSR A < SAVE F(XS,YS),
LA PASIX
FLT
FST FWORK5
LA PASIY
FLT
FMP FWORK5
FDV FK < AFIN D'AVOIR UNE FONCTION
FDV FK < SCALANTE...
SCRD RDN6
EORR A,B < (B)=G(PASIX,PASIY)
PLR A < (A)=F(XS,YS),
EORR B,A < (A)=H(XS,YS,PASIX,PASIY)...
EOR XA16 < PARAMETRE VARIABLE...
FLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JNE RAYON2 < NON, ON Y VA...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION ET SAUVEGARDES :
<
LA PASIX
LB PASIY
PSR A,B,X < SAUVEGARDE DE (PASIX,PASIY)...
FLD F0
FST FCUMR < INITIALISATION DU CUMUL DES FONCTIONS
< ALEATOIRES SCALANTES...
FLD FPOND0
FST FPOND < INITIALISATOON DE LA PONDERATTION DES
< FONCTIONS ALEATOIRES...
<
< ITERATION POUR CHAQUE
< FONCTION ALEATOIRE :
<
LX XA17 < (X)=NOMBRE D'ITERATIONS MAX...
SPIR1: EQU $
MAILLE:: VAL 1 < PLUS PETITE MAILLE...
LA PASIX
CPI MAILLE < A-T'ON ATTEINT LA DEFINITION DE L'ECRAN ?
JG SPIR2 < NON, ON SCALE...
LA PASIY
CPI MAILLE < ALORS ???
JLE SPIR3 < OUI, ON EST SUR UNE MAILLE (1,1), ON
< A FINI LA RECURSION...
SPIR2: EQU $
BSR APRDN < (A,B)=VALEUR ALEATOIRE ASSOCIEE AU
< POINT (XS,YS) ET A LA GRILLE COURANTE
< (PASIX,PASIY)...
FMP FPOND
FDV FPOND0 < ET ON LA PONDERE PAR FPOND/FPOND0,
< AFIN D'OBTENIR DES VALEURS ALEATOIRES
< DECROISSANTES STATISTIQUEMENT...
FAD FCUMR < QUE L'ON CUMULE,
FST FCUMR < ON A AINSI EN CHAQUE POINT UNE SOMME
< DE FONCTION ALEATOIRE DONT LA FREQUENCE
< AUGMENTE PROGRESSIVEMENT PAR REDUCTION
< DE LA MAILLE, MAIS DONT L'AMPLITUDE
< DIMINUE STATISTIQUEMENT...
FLD FPOND
BSR ARAC
FST FPOND < DECROISSANCE DES AMPLITUDES DES FONCTIONS
< ALEATOIRES...
LA PASIX
FLT
BSR ARAC < ON REDUIT LA MAILLE, PAR :
< MAILLE=RAC(MAILLE)...
BSR AROND
STA PASIX
LA PASIY
FLT
BSR ARAC
BSR AROND
STA PASIY
JDX SPIR1 < ET ON ITERE JUSQU'A ATTEINDRE LA
< DEFINITION DE L'ECRAN OU LE MAX DES
< ITERATIONS...
<
< FIN DE RECURSION :
<
SPIR3: EQU $
PLR A,B,X < ON RESTAURE
STB PASIY < LA GRILLE
STA PASIX < INITIALE...
FLD FCUMR < ET ON RENVOIE LA SOMME DES
< FONCTIONS ALEATOIRES...
FMP FA3 < QUE L'ON NORMALISE...
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 2'
DF'SIOP RAYON CHAMP 3'
ED'SIOP RAYON CHAMP 3'
IN0
NLS
IDP "SIOP RAYON CHAMP 3"
< R A Y O N C H A M P 3 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < INUTILISE...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A10:: VAL '10 < BORNE SUP(RDN),
A11:: VAL A10+1 < BORNE INF(RDN),
A12:: VAL A11+1 < MULTIPLICATEUR(RDN).
A13:: VAL A12+1 < INUTILISE...
A14:: VAL A13+1 < PAS EN 'X' DE LA GRILLE DE DEPART,
A15:: VAL A14+1 < PAS EN 'Y' DE LA GRILLE DE DEPART.
A16:: VAL A15+1 < PARAMETRE DE DEFINITION DU GENERATEUR
< ALEATOIRE...
A17:: VAL A16+1 < NOMBRE DE RECURSION MAX LORS DE LA SOM-
< MATION DES FONCTIONS ALEATOIRES.
A18:: VAL A17+1 < FACTEUR D'ECHELLE DES COORDONNEES...
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
XA18: FLOAT 0 < FACTEUR D'ECHELLE LOCAL DES COORDONNEES
< ENVOYEES PAR ' +'...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES FONCTIONS ALEATOIRES
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
FCUMR: FLOAT 0 < SIGMA DES FONCTIONS ALEATOIRES
< SCALANTES.
FPOND: FLOAT 0 < POUR LES PONDERER...
FPOND0:: FLOAT 0 < VALEUR INITIALE DE LA PONDERATION :
< FPOND0=RAC(PASIX*PASIY).
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ARCRD: WORD RCRD < CALCUL DU SIGMA SUR UNE RCRDALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
FPASIX: FLOAT 0 < DE MEME
FPASIY: FLOAT 0 < EN FLOTTANT...
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
XA17: WORD 0 < PARAMETRE 'A17'.
KITER: WORD 0 < COMPTAGE DES RECURSIONS...
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA16: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0010: WORD 0 < BORNE SUPERIEURE,
XA0011: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < L'INTERPOLATION...
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
APRDN: WORD PRDN < CALCUL D'UNE VALEUR ALEATOIRE SUR LA
< GRILLE COURANTE...
ASP1: WORD SP1 < APPEL DE 'RDN' ET FLOTTAISON...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A10
BSR ASPCT
FIX
STA XA0010 < BORNE SUPERIEURE,
LXI A11
BSR ASPCT
FIX
STA XA0011 < ET BORNE INFERIEURE...
LXI A12
BSR ASPCT
FCAZ
JLE $ < ????!?!
FST FMUL
LXI A16
BSR ASPCT
BSR AROND
STA XA16 < PARAMETRE D'INITIALISATION...
<
< ENTREE DE LA GRILLE :
<
LXI A18
BSR ASPCT
FCAZ
JLE $ < ??!?!??!
FST XA18 < FCATEUR D'ECHELLE LOCAL...
LXI A14
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
FLT
FST FWORK5 < FWORK5=PASIX...
LXI A15
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
FLT
FMP FWORK5 < CALCUL DE PASIX*PASIY*K*K CE QUI DONNE
< L'AIRE DE LA MAILLE ELEMENTAIRE...
BSR ARAC
FST FPOND0 < LA PONDERATION INITIALE DES FONCTIONS
< ALEATOIRES EST EN FAIT LA TAILLE DE LA
< MAILLE...
LXI A17
BSR ASPCT
BSR AROND
JALE $ < ?!?!???
STA XA17 < NOMBRE DE RECURSION MAX LORS DE LA
< SOMMATION DES FONCTIONS ALEATOIRES.
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< C A L C U L D E R D N ( X S , Y S ) :
<
<
< ARGUMENT :
< (XS,YS)=POINT COURANT.
<
<
< RESULTAT :
< (A,B)=VALEUR ALEATOIRE ASSOCIEE A (XS,YS)
< ISSUE DIRECTEMENT DE 'RDN' SI (XS,YS)
< EST UN NOEUD DE LA GRILLE COURANTE,
< ET UNE VALEUR INTERPOLEE SINON...
<
<
PRDN: EQU $
PSR X,Y
LX XS < PLACONS NOUS AU
LY YS < POINT COURANT...
PSR X,Y < ET SAVE...
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
BSR ASP1 < LE POINT COURANT EST UN NOEUD...
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA XNOEUD
NGR A,A
FLT
FAD GXS < X-XNOEUD,
FDV FPASIX < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA YNOEUD
NGR A,A
FLT
FAD GYS < Y-YNOEUD,
FDV FPASIY < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
LBI 0 < PREMIER NOEUD :
BSR ASP1
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XS
AD PASIX
STA XS
LBI 1 < DEUXIEME NOEUD :
BSR ASP1
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YS
AD PASIY
STA YS
LBI 2 < TROISIEME NOEUD :
BSR ASP1
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LA XS
SB PASIX
STA XS
LBI 3 < QUATRIEME NOEUD :
BSR ASP1
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
<
< SORTIE :
<
SPU30: EQU $
PLR X,Y
STY YS < RESTAURE
STX XS < LE POINT COURANT...
PLR X,Y
RSR
<
<
< A C C E S R D N :
<
<
SP1: EQU $
BSR ARDN
FLT
RSR < FACILE...
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0010 < BORNE SUPERIEURE,
FLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0011 < BORNE INFERIEURE,
FLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FIX
CP XA0010 < ???
JG SPRDN3 < ERREUR...
CP XA0011 < ???
JL SPRDN3 < ERREUR...
FLT
FMP FMUL
BSR AROND < (A)=NOMBRE ALEATOIRE ENTIER...
PLR B
RSR
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
PSR B
LA XS
FLT
FST FWORK4 < SAVE LE 'XS' FLOTTANT...
LA YS
FLT
FST FWORK5 < SAVE LE 'YS' FLOTTANT...
FMP FWORK4 < ET ON CONSTRUIT
FAD FWORK5 < UNE FONCTION UNIQUE
FAD FWORK4 < DU NOEUD COURANT...
EORR B,A
AD RDN1
MP KITER < AFIN DE GENERER TOUJOURS LES MEMES
< NOMBRES ALEATOIRES AU MEME NIVEAU DE
< RECURSION...
EORR B,A < (A)=F(XS,YS,PASIX INITIAL,PASIY INITIAL).
EOR XA16 < PARAMETRE VARIABLE...
FLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JNE RAYON2 < NON, ON Y VA...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FMP XA18 < SCALING...
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FMP XA18 < SCALING...
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ARCRD
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ARCRD
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ARCRD
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ARCRD
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RAYON1: EQU $
RSR
<
<
< G E N E R A T I O N D ' U N E S O M M A T I O N
< R E C U R S I V E D E F O N C T I O N S
< A L E A T O I R E S " D E C R O I S S A N T E S " :
<
<
RCRD: EQU $
<
< INITIALISATION ET SAUVEGARDES :
<
LA PASIX
LB PASIY
PSR A,B,X < SAUVEGARDE DE (PASIX,PASIY)...
FLD F0
FST FCUMR < INITIALISATION DU CUMUL DES FONCTIONS
< ALEATOIRES SCALANTES...
FLD FPOND0
FST FPOND < INITIALISATOON DE LA PONDERATTION DES
< FONCTIONS ALEATOIRES...
<
< ITERATION POUR CHAQUE
< FONCTION ALEATOIRE :
<
STZ KITER < INITIALISATION DES RECURSIONS...
LX XA17 < (X)=NOMBRE D'ITERATIONS MAX...
RCRD1: EQU $
IC KITER < COMPTAGE DES RECURSIONS...
MAILLE:: VAL 1 < PLUS PETITE MAILLE...
LA PASIX
CPI MAILLE < A-T'ON ATTEINT LA DEFINITION DE L'ECRAN ?
JG RCRD2 < NON, ON SCALE...
LA PASIY
CPI MAILLE < ALORS ???
JLE RCRD3 < OUI, ON EST SUR UNE MAILLE (1,1), ON
< A FINI LA RECURSION...
RCRD2: EQU $
LA PASIX
FLT
FST FPASIX
LA PASIY
FLT
FST FPASIY
BSR APRDN < (A,B)=VALEUR ALEATOIRE ASSOCIEE AU
< POINT (XS,YS) ET A LA GRILLE COURANTE
< (PASIX,PASIY)...
FMP FPOND
FDV FPOND0 < ET ON LA PONDERE PAR FPOND/FPOND0,
< AFIN D'OBTENIR DES VALEURS ALEATOIRES
< DECROISSANTES STATISTIQUEMENT...
FAD FCUMR < QUE L'ON CUMULE,
FST FCUMR < ON A AINSI EN CHAQUE POINT UNE SOMME
< DE FONCTION ALEATOIRE DONT LA FREQUENCE
< AUGMENTE PROGRESSIVEMENT PAR REDUCTION
< DE LA MAILLE, MAIS DONT L'AMPLITUDE
< DIMINUE STATISTIQUEMENT...
FLD FPOND
BSR ARAC
FST FPOND < DECROISSANCE DES AMPLITUDES DES FONCTIONS
< ALEATOIRES...
FLD FPASIX
BSR ARAC < ON REDUIT LA MAILLE, PAR :
< MAILLE=RAC(MAILLE)...
BSR AROND
STA PASIX
FLD FPASIY
BSR ARAC
BSR AROND
STA PASIY
JDX RCRD1 < ET ON ITERE JUSQU'A ATTEINDRE LA
< DEFINITION DE L'ECRAN OU LE MAX DES
< ITERATIONS...
<
< FIN DE RECURSION :
<
RCRD3: EQU $
PLR A,B,X < ON RESTAURE
STB PASIY < LA GRILLE
STA PASIX < INITIALE...
FLD FCUMR < ET ON RENVOIE LA SOMME DES
< FONCTIONS ALEATOIRES...
FMP FA3 < QUE L'ON NORMALISE...
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 3'
DF'SIOP RAYON CHAMP 4'
ED'SIOP RAYON CHAMP 4'
IN0
NLS
IDP "SIOP RAYON CHAMP 4"
< R A Y O N C H A M P 4 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < DEPLACEMENT SUR L'AXE DE 'Z', A LA
< CHARGE DU MODULE APPELANT...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A6:: VAL A5+1 < AMPLIFICATION POUR 'X' DE A5+A0*F(XR,YR),
A7:: VAL A6+1 < AMPLIFICATION POUR 'Y' DE A5+A0*F(XR,YR),
A8:: VAL A7+1 < AMPLIFICATION POUR 'Z' DE A5+A0*F(XR,YR).
A10:: VAL '10 < BORNE SUP(RDN),
A11:: VAL A10+1 < BORNE INF(RDN),
A12:: VAL A11+1 < MULTIPLICATEUR(RDN).
A13:: VAL A12+1 < INUTILISE...
A14:: VAL A13+1 < PAS EN 'X' DE LA GRILLE DE DEPART,
A15:: VAL A14+1 < PAS EN 'Y' DE LA GRILLE DE DEPART.
A16:: VAL A15+1 < PARAMETRE DE DEFINITION DU GENERATEUR
< ALEATOIRE...
A17:: VAL A16+1 < NOMBRE DE RECURSION MAX LORS DE LA SOM-
< MATION DES FONCTIONS ALEATOIRES.
A18:: VAL A17+1 < FACTEUR D'ECHELLE DES COORDONNEES...
A19:: VAL A18+1 < EXPOSANT 'P' DES EXPONENTIELLES,
A1A:: VAL A19+1 < ET 'Q', SACHANT QUE 'RAK' CALCULERA
< LES PUISSANCES P/(2**Q)...
A20:: VAL '20 < DISCRIMINATEUR DES CONTRAINTES INITIALES:
< =0 : NON, GENERATION PUREMENT ALEATOIRE,
< #0 : LA PREMIERE GENERATION (KITER=1)
< EST CONTRAINTE PAR 'TV2'...
A21:: VAL A20+1 < NOMBRE DE POINTS MAX DE LA SPIRALE,
A22:: VAL A21+1 < PAS DE PARCOURS DE LA SPIRALE,
A23:: VAL A22+1 < FACTEUR D'AMPLIFICATION DES CONTRAINTES
< APRES NORMALISATION...
A24:: VAL A23+1 < GENERATION ALEATOIRE SUR UN TORE :
< 0 : OUI, SUR UN TORE,
< 1 : NON, SUR UN PLAN.
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
XA18: FLOAT 0 < FACTEUR D'ECHELLE LOCAL DES COORDONNEES
< ENVOYEES PAR ' +'...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES FONCTIONS ALEATOIRES
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
FCUMR: FLOAT 0 < SIGMA DES FONCTIONS ALEATOIRES
< SCALANTES.
FPOND: FLOAT 0 < POUR LES PONDERER...
FPOND0:: FLOAT 0 < VALEUR INITIALE DE LA PONDERATION :
< FPOND0=RAC(PASIX*PASIY).
EXPOP: WORD 0 < POUR CALCULER
EXPOQ: WORD 0 < LES PUISSANCES P/(2**Q)...
<
< DONNEES DES CONTRAINTES INITIALES :
<
XA20: WORD 0 < =0 : PAS DE CONTRAINTES MAIS DU RDN,
< #0 : CONTRAINTES INITIALES PAR 'TV2'...
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
XA23: FLOAT 0 < AMPLIFICATEUR DES CONDITIONS INITIALES...
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
<
< TRANSLATION SUR LES 3 AXES :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < 'OY',
XFA4: FLOAT 0 < ET 'OZ'.
<
< AMPLIFICATION DE A5+A0*F(XR,YR) :
<
XFA6: FLOAT 0 < POUR 'OX',
XFA7: FLOAT 0 < POUR 'OY',
XFA8: FLOAT 0 < ET POUR 'OZ'.
<
< RELAIS MONTAGNEUX :
<
APRDN5: WORD SPRDN5 < REALI...
ARCRD: WORD RCRD < CALCUL DU CHAMP ALEATOIRE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
FPASIX: FLOAT 0 < DE MEME
FPASIY: FLOAT 0 < EN FLOTTANT...
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
XA17: WORD 0 < PARAMETRE 'A17'.
KITER: WORD 0 < COMPTAGE DES RECURSIONS...
TOREXY: WORD 0 < GENERATION ALEATOIRE SUR UN TORE :
< 0 : OUI, SUR UN TORE,
< 1 : NON, SUR UN PLAN.
MAXTOR: WORD 0 < CONTIENT LA "LONGUEUR" DU TORE APRES
< SCALING PAR 'XA18'...
MOYTOR: WORD 0 < MOYTOR=MAXTOR/2.
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA16: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
XA0010: WORD 0 < BORNE SUPERIEURE,
XA0011: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < L'INTERPOLATION...
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
APRDN: WORD PRDN < CALCUL D'UNE VALEUR ALEATOIRE SUR LA
< GRILLE COURANTE...
ARAK: WORD RAK < CALCUL DE LA PUISSANCE P/(2**Q) D'UN
< NOMBRE...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION LES 3 AXES :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
LXI A4
BSR ASPCT
FST XFA4
<
< AMPLIFICATION DE A5+A0*F(XR,YR) :
<
LXI A6
BSR ASPCT
FST XFA6
LXI A7
BSR ASPCT
FST XFA7
LXI A8
BSR ASPCT
FST XFA8
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A10
BSR ASPCT
BSR AFIX
STA XA0010 < BORNE SUPERIEURE,
LXI A11
BSR ASPCT
BSR AFIX
STA XA0011 < ET BORNE INFERIEURE...
LXI A12
BSR ASPCT
BSR AFCAZ
JLE $ < ????!?!
FST FMUL
LXI A16
BSR ASPCT
BSR AROND
STA XA16 < PARAMETRE D'INITIALISATION...
<
< ENTREE DE LA GRILLE :
<
LXI A18
BSR ASPCT
BSR AFCAZ
JLE $ < ??!?!??!
FST XA18 < FCATEUR D'ECHELLE LOCAL...
LXI A14
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
BSR AFLT
FST FWORK5 < FWORK5=PASIX...
LXI A15
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
BSR AFLT
FMP FWORK5 < CALCUL DE PASIX*PASIY*K*K CE QUI DONNE
< L'AIRE DE LA MAILLE ELEMENTAIRE...
BSR ARAC
FST FPOND0 < LA PONDERATION INITIALE DES FONCTIONS
< ALEATOIRES EST EN FAIT LA TAILLE DE LA
< MAILLE...
LXI A17
BSR ASPCT
BSR AROND
JALE $ < ?!?!???
STA XA17 < NOMBRE DE RECURSION MAX LORS DE LA
< SOMMATION DES FONCTIONS ALEATOIRES.
IF NLIGM1-NPOLM1,,XWOR%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%: VAL 0
LAI NLIGM1?NPOLM1
ADRI 1,A < PARCE QU'UNE INSTRUCTION IMMEDIATE NE
< PEUT CONTENIR QUE 8 BITS...
BSR AFLT < FLOTTAGE,
FMP XA18 < SCALING,
BSR AROND < FIXAGE,
STA MAXTOR < CE QUI DONNE LA "LONGUEUR" DU TORE...
SLRS 1
STA MOYTOR < MOYTOR=MAXTOR/2...
<
< ENTREE DU CHOIX PLAN/TORE ???
<
LXI A24
BSR ASPCT
BSR AROND
STA TOREXY < DEFINITION DU PLAN/TORE...
JAE SPU70 < TORE...
STZ MOYTOR < PLAN, ON SUPPRIME LE CENTRAGE DES
< GRILLES DE GENERATION ALEATOIRE...
SPU70: EQU $
<
< DEFINITION DES EXPONENTIATIONS :
<
LXI A19
BSR ASPCT
BSR AROND
JALE $ < ??!????!
STA EXPOP < NUMERATEUR DE L'EXPOSANT,
LXI A1A
BSR ASPCT
BSR AROND
STA EXPOQ < POUR CALCULER LE DENOMINATEUR 2**Q...
LR A,X
LAI 1
SLLS 0,X < CALCUL DE 2**Q,
CP EXPOP < A-T'ON : P<(2**Q) ???
JLE $ < ?!???!?!
<
< DEFINITION DE LA SPIRALE :
<
LXI A20
BSR ASPCT
BSR AROND
STA XA20 < CONTRAINTE OU PAS...
LXI A21
BSR ASPCT
FST FNP
BSR AROND
JALE $ < ?!??!?!
STA NPM < NOMBRE DE POINTS MAX...
LXI A22
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
LXI A23
BSR ASPCT
FST XA23 < AMPLIFICATEUR DES CONDITIONS INITIALES...
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< C A L C U L D E R D N ( X S , Y S ) :
<
<
< ARGUMENT :
< (XS,YS)=POINT COURANT.
<
<
< RESULTAT :
< (A,B)=VALEUR ALEATOIRE ASSOCIEE A (XS,YS)
< ISSUE DIRECTEMENT DE 'RDN' SI (XS,YS)
< EST UN NOEUD DE LA GRILLE COURANTE,
< ET UNE VALEUR INTERPOLEE SINON...
<
<
PRDN: EQU $
PSR X,Y
LX XS < PLACONS NOUS AU
LY YS < POINT COURANT...
PSR X,Y < ET SAVE...
<
< CALCUL DU "NOEUD SYMETRIQUE" :
<
LR X,A
SB MOYTOR < AFIN D'AVOIR UN ENSEMBLE DE GRILLES
< CENTREES SUR L'IMAGE, PERMETTANT LA SY-
< METRIE AU NIVEAU DES BORDS...
JAGE PRDN20 < A DOITE, OK...
ADRI 1,A < A GAUCHE, IL N'Y A PAS DE POINT MILIEU
< CAR 256 EST PAIR...
PRDN20: EQU $
SARD NBITMO
DV PASIX
MP PASIX
LR B,X < (X)="DISTANCE" AU CENTRE...
LR B,A
JAGE PRDN10 < OK, POSITIF...
NGR A,A < CAS DES TORES : ON FAIT UNE SYMETRIE...
PRDN10: EQU $
AD MOYTOR
STA XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SB MOYTOR < POUR LE CENTRAGE DES GRILLES...
JAGE PRDN21 < OK, A DROITE...
ADRI 1,A < A GAUCHE, IL N'Y A PAS DE POINT MILIEU...
PRDN21: EQU $
SARD NBITMO
DV PASIY
MP PASIY
LR B,Y < (Y)="DISTANCE" AU CENTRE...
LR B,A
JAGE PRDN11 < OK, POSITIF...
NGR A,A < CAS DES TORES : ON FAIT UNE SYMETRIE...
PRDN11: EQU $
AD MOYTOR
STA YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
<
< CALCUL DU "VRAI NOEUD" :
<
LA MOYTOR
ADR A,X < (X)=X-NOEUD AVANT SYMETRIE,
ADR A,Y < (Y)=Y-NOEUD AVANT SYMETRIE DU TORE...
<
< GENERATION ALEATOIRE :
<
LA XS
CPR A,X < EST-ON EN UN VRAI NOEUD (AVANT LA SYME-
< TRIE EVENTUELLE DU TORE) ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CPR A,Y < EST-ON EN UN VRAI NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
<
< GENERATION RDN EN UN NOEUD :
<
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
BSR ARDN < LE POINT COURANT EST UN NOEUD...
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
<
< GENERATION RDN EN UN POINT QUELCONQUE :
<
SPU31: EQU $
NGR X,A
BSR AFLT
FAD GXS < X-XNOEUD,
BSR AFABS < CAS DU TORE...
FDV FPASIX < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
NGR Y,A
BSR AFLT
FAD GYS < Y-YNOEUD,
BSR AFABS < CAS DU TORE...
FDV FPASIY < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
BSR ARDN
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XS
AD PASIX
STA XS
BSR ARDN
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YS
AD PASIY
STA YS
BSR ARDN
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LA XS
SB PASIX
STA XS
BSR ARDN
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
<
< SORTIE :
<
SPU30: EQU $
PLR X,Y
STY YS < RESTAURE
STX XS < LE POINT COURANT...
PLR X,Y
RSR
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN2: EQU $
BSR AFLT
SPRDN5: EQU $ < CAS DE L'ENTREE DES CONDITIONS INITIALES.
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0010 < BORNE SUPERIEURE,
BSR AFLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0011 < BORNE INFERIEURE,
BSR AFLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
BSR AFIX
CP XA0010 < ???
JG SPRDN2 < ON RECOMMENCE ; CE CAS PEUT SE PRODUIRE
< AVEC LES CONTRAINTES PAR 'TV2'...
CP XA0011 < ???
JL SPRDN2 < ON ITERE (CF. 'TV2')...
BSR AFLT
FMP FMUL
<
< RESTAURATIONS ET SORTIE :
<
FST FWORK < SAUVEGARDE DU 'RDN' COURANT,
PLR A,B
STB YS < RESTAURATION
STA XS < DU POINT (XS,YS),
FLD FWORK < ET DU NOMBRE ALEATOIRE GENERE...
RSR
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
<
< GESTION DU PLAN/TORE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DE (XS,YS) A PRIORI...
CPZ TOREXY < EST-ON SUR UN PLAN OU UN TORE ???
JNE SQRDN4 < UN PLAN...
< UN TORE, REDUCTION DE (XS,YS) :
SQRDN2: EQU $
JAGE SQRDN3 < OK, (XS) EST POSITIF...
AD MAXTOR < NEGATIF, ON LE REND POSITIF...
JMP SQRDN2
SQRDN3: EQU $
SARD NBITMO
DV MAXTOR
STB XS < ET ON CALCULE 'XS' MODULO 'MAXTOR'...
LA YS < REDUCTION DE 'YS' :
SQRDN5: EQU $
JAGE SQRDN6 < OK, POSITIF...
AD MAXTOR < NEGATIF, ON LE REND POSITIF...
JMP SQRDN5
SQRDN6: EQU $
SARD NBITMO
DV MAXTOR
STB YS < ET ON CALCULE 'YS' MODULO 'MAXTOR'...
SQRDN4: EQU $
<
< DISCRIMINATIONS INITIALES :
<
LA KITER
CPI 1 < EST-CE LA PREMIERE GENERATION ???
JNE SPRDN4 < NON, TIRAGE ALEATOIRE...
CPZ XA20 < OUI, FAUT-IL INITIALISER PAR DES
< CONTRAINTES 'TV2' ???
JNE SPIR < OUI...
<
<
< G E N E R A T I O N A L E A T O I R E :
<
<
SPRDN4: EQU $
LA XS
BSR AFLT
FST FWORK4 < SAVE LE 'XS' FLOTTANT...
LA YS
BSR AFLT
FST FWORK5 < SAVE LE 'YS' FLOTTANT...
FMP FWORK4 < ET ON CONSTRUIT
FAD FWORK5 < UNE FONCTION UNIQUE
FAD FWORK4 < DU NOEUD COURANT...
EORR B,A
AD RDN1
MP KITER < AFIN DE GENERER TOUJOURS LES MEMES
< NOMBRES ALEATOIRES AU MEME NIVEAU DE
< RECURSION...
EORR B,A < (A)=F(XS,YS,PASIX INITIAL,PASIY INITIAL).
EOR XA16 < PARAMETRE VARIABLE...
BSR AFLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
LA CTCDA
STA XCTCDA < PASSAGE SUR 'TV2'...
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
BSR AFLT
FDV XA18
BSR AROND
STA XS < RE-NORMALISATION...
LA YS
BSR AFLT
FDV XA18
BSR AROND
STA YS < IDEM...
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YS
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XS
AD DELTAX < CHANGEMENT DE
STA XS
LA YS
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
SPMOY6: EQU $ < CAS OU LE Z-BUFFER CONNAIT DEJA (XS,YS) :
BSR AFLT
FDV FNP
FMP XA23 < ET AMPLIFICATION...
<
< SORTIE :
<
STZ XCTCDA < RETOUR SUR 'TV1'...
BR APRDN5 < VERS LA SORTIE...
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE,
< (Y)=CONSTANTE POUR FAIRE UN 'EOR'
< SUR 'XA16' DE GENERATION 'RDN'.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON1: EQU $
RSR < SORTIE IMMEDIATE, PEU ELEGANTE, MAIS
< IMPOSEE PAR DES SAUTS > A 128 MOTS !!!
RAYON: EQU $
BSR AFCAZ < LA FONCTION COURANTE EST-ELLE NULLE ???
JE RAYON1 < OUI, RIEN A FAIRE...
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JE RAYON1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< MODIFICATION INVERSIBLE
< DU GENERATEUR 'RDN' :
<
LA XA16
EORR Y,A < 'EORR' EST INVERSIBLE...
STA XA16 < AINSI, LE GENERATEUR 'RDN' SERA FONCTION
< DE L'APPELANT, ET DONC DES 3 AXES...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
BSR AFLT
FAD FWORK
FMP XA18 < SCALING...
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
BSR AFIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
BSR AFLT
FSB GXS
BSR AFNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
BSR AFLT
FAD FWORK
FMP XA18 < SCALING...
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
BSR AFIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
BSR AFLT
FSB GYS
BSR AFNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ARCRD
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ARCRD
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ARCRD
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ARCRD
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
LA XA16
EORR Y,A < ON INVERSE LA MODIFICATION DU GENERATEUR
STA XA16 < ALEATOIRE...
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RSR
<
<
< G E N E R A T I O N D ' U N E S O M M A T I O N
< R E C U R S I V E D E F O N C T I O N S
< A L E A T O I R E S " D E C R O I S S A N T E S " :
<
<
RCRD: EQU $
<
< INITIALISATION ET SAUVEGARDES :
<
LA PASIX
LB PASIY
PSR A,B,X,Y < SAUVEGARDE DE (PASIX,PASIY)...
FLD F0
FST FCUMR < INITIALISATION DU CUMUL DES FONCTIONS
< ALEATOIRES SCALANTES...
FLD FPOND0
FST FPOND < INITIALISATOON DE LA PONDERATTION DES
< FONCTIONS ALEATOIRES...
<
< ITERATION POUR CHAQUE
< FONCTION ALEATOIRE :
<
STZ KITER < INITIALISATION DES RECURSIONS...
LX XA17 < (X)=NOMBRE D'ITERATIONS MAX...
RCRD1: EQU $
IC KITER < COMPTAGE DES RECURSIONS...
LA PASIX
BSR AFLT
FST FPASIX
LA PASIY
BSR AFLT
FST FPASIY
BSR APRDN < (A,B)=VALEUR ALEATOIRE ASSOCIEE AU
< POINT (XS,YS) ET A LA GRILLE COURANTE
< (PASIX,PASIY)...
FMP FPOND
FDV FPOND0 < ET ON LA PONDERE PAR FPOND/FPOND0,
< AFIN D'OBTENIR DES VALEURS ALEATOIRES
< DECROISSANTES STATISTIQUEMENT...
FAD FCUMR < QUE L'ON CUMULE,
FST FCUMR < ON A AINSI EN CHAQUE POINT UNE SOMME
< DE FONCTION ALEATOIRE DONT LA FREQUENCE
< AUGMENTE PROGRESSIVEMENT PAR REDUCTION
< DE LA MAILLE, MAIS DONT L'AMPLITUDE
< DIMINUE STATISTIQUEMENT...
FLD FPOND
BSR ARAK
FST FPOND < DECROISSANCE DES AMPLITUDES DES FONCTIONS
< ALEATOIRES...
FLD FPASIX
BSR ARAK < ON REDUIT LA MAILLE, PAR :
< MAILLE=RAK(MAILLE)...
BSR AROND
LY PASIX < (Y)=PASIX AVANT...
STA PASIX
FLD FPASIY
BSR ARAK
BSR AROND
CP PASIY < EST-ON AU PLANCHER ???
STA PASIY
JNE RCRD2 < NON, ON ITERE, A MOINS QUE LE COMPTE
< MAX SOIT ATTEINT...
LR Y,A
CP PASIX < PEUT-ETRE...
JE RCRD3 < ET OUI, ON ARRETE LA...
RCRD2: EQU $ < PAS ENCORE LE PLANCHER...
JDX RCRD1 < ET ON ITERE JUSQU'A ATTEINDRE LA
< DEFINITION DE L'ECRAN OU LE MAX DES
< ITERATIONS...
<
< FIN DE RECURSION :
<
RCRD3: EQU $
PLR A,B,X,Y < ON RESTAURE
STB PASIY < LA GRILLE
STA PASIX < INITIALE...
FLD FCUMR < ET ON RENVOIE LA SOMME DES
< FONCTIONS ALEATOIRES...
FMP FA3 < QUE L'ON NORMALISE...
RSR
<
<
< C A L C U L D ' U N E P U I S S A N C E
< Q U E L C O N Q U E P / ( 2 * * Q ) :
<
<
< ARGUMENT :
< (A,B)=NOMBRE 'N' ARGUMENT,
<
<
< RESULTAT :
< (A,B)='N' A LA PUISSANCE P/(2**Q).
<
<
RAK: EQU $
BSR AFCAZ
JE RAK2 < NOMBRE=0 ==> RAKINE=0...
JG RAK3 < OK, NOMBRE>0...
QUIT 1 < ??!??!?!
RAK3: EQU $
PSR X
<
< ELEVATION A LA PUISSANCE '1/(2**Q)' :
<
LX EXPOQ < (X)=EXPOSANT DE 2**Q,
RAK6: EQU $
BSR ARAC < ET ON CALCULE (A,B)**(1/(2**Q))...
JDX RAK6
<
< ELEVATION A LA PUISSANCE 'P' :
<
LX EXPOP < (X)=EXPOSANT 'P',
FST FWORK < (A,B)=NOMBRE ARGUMENT,
RAK4: EQU $
ADRI -1,X
CPZR X < EST-CE FINI ???
JE RAK5 < OUI...
FMP FWORK < NON, ON LE MULTIPLIE P-1 FOIS PAR
< LUI-MEME...
JMP RAK4
RAK5: EQU $
PLR X
RAK2: EQU $
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 4'
DF'SIOP RAYON CHAMP 5'
ED'SIOP RAYON CHAMP 5'
IN0
NLS
IDP "SIOP RAYON CHAMP 5"
< R A Y O N C H A M P 5 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < INUTILISE...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A10:: VAL '10 < BORNE SUP(RDN),
A11:: VAL A10+1 < BORNE INF(RDN),
A12:: VAL A11+1 < MULTIPLICATEUR(RDN).
A13:: VAL A12+1 < INUTILISE...
A14:: VAL A13+1 < PAS EN 'X' DE LA GRILLE DE DEPART,
A15:: VAL A14+1 < PAS EN 'Y' DE LA GRILLE DE DEPART.
A16:: VAL A15+1 < PARAMETRE DE DEFINITION DU GENERATEUR
< ALEATOIRE...
A17:: VAL A16+1 < NOMBRE DE RECURSION MAX LORS DE LA SOM-
< MATION DES FONCTIONS ALEATOIRES.
A18:: VAL A17+1 < FACTEUR D'ECHELLE DES COORDONNEES...
A19:: VAL A18+1 < EXPOSANT 'P' DES EXPONENTIELLES,
A1A:: VAL A19+1 < ET 'Q', SACHANT QUE 'RAK' CALCULERA
< LES PUISSANCES P/(2**Q)...
A20:: VAL '20 < DISCRIMINATEUR DES CONTRAINTES INITIALES:
< =0 : NON, GENERATION PUREMENT ALEATOIRE,
< #0 : LA PREMIERE GENERATION (KITER=1)
< EST CONTRAINTE PAR 'TV2'...
A21:: VAL A20+1 < NOMBRE DE POINTS MAX DE LA SPIRALE,
A22:: VAL A21+1 < PAS DE PARCOURS DE LA SPIRALE,
A23:: VAL A22+1 < FACTEUR D'AMPLIFICATION DES CONTRAINTES
< APRES NORMALISATION...
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
XA18: FLOAT 0 < FACTEUR D'ECHELLE LOCAL DES COORDONNEES
< ENVOYEES PAR ' +'...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES FONCTIONS ALEATOIRES
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
FCUMR: FLOAT 0 < SIGMA DES FONCTIONS ALEATOIRES
< SCALANTES.
FPOND: FLOAT 0 < POUR LES PONDERER...
FPOND0:: FLOAT 0 < VALEUR INITIALE DE LA PONDERATION :
< FPOND0=RAC(PASIX*PASIY).
EXPOP: WORD 0 < POUR CALCULER
EXPOQ: WORD 0 < LES PUISSANCES P/(2**Q)...
EXPEPS: FLOAT 0.01
<
< DONNEES DES CONTRAINTES INITIALES :
<
XA20: WORD 0 < =0 : PAS DE CONTRAINTES MAIS DU RDN,
< #0 : CONTRAINTES INITIALES PAR 'TV2'...
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
XA23: FLOAT 0 < AMPLIFICATEUR DES CONDITIONS INITIALES...
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
APRDN5: WORD SPRDN5 < REALI...
ARCRD: WORD RCRD < CALCUL DU CHAMP ALEATOIRE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
FPASIX: FLOAT 0 < DE MEME
FPASIY: FLOAT 0 < EN FLOTTANT...
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
XA17: WORD 0 < PARAMETRE 'A17'.
KITER: WORD 0 < COMPTAGE DES RECURSIONS...
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA16: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0010: WORD 0 < BORNE SUPERIEURE,
XA0011: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < L'INTERPOLATION...
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
APRDN: WORD PRDN < CALCUL D'UNE VALEUR ALEATOIRE SUR LA
< GRILLE COURANTE...
ARAK: WORD RAK < CALCUL DE LA PUISSANCE P/(2**Q) D'UN
< NOMBRE...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A10
BSR ASPCT
FIX
STA XA0010 < BORNE SUPERIEURE,
LXI A11
BSR ASPCT
FIX
STA XA0011 < ET BORNE INFERIEURE...
LXI A12
BSR ASPCT
FCAZ
JLE $ < ????!?!
FST FMUL
LXI A16
BSR ASPCT
BSR AROND
STA XA16 < PARAMETRE D'INITIALISATION...
<
< ENTREE DE LA GRILLE :
<
LXI A18
BSR ASPCT
FCAZ
JLE $ < ??!?!??!
FST XA18 < FCATEUR D'ECHELLE LOCAL...
LXI A14
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
FLT
FST FWORK5 < FWORK5=PASIX...
LXI A15
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
FLT
FMP FWORK5 < CALCUL DE PASIX*PASIY*K*K CE QUI DONNE
< L'AIRE DE LA MAILLE ELEMENTAIRE...
BSR ARAC
FST FPOND0 < LA PONDERATION INITIALE DES FONCTIONS
< ALEATOIRES EST EN FAIT LA TAILLE DE LA
< MAILLE...
LXI A17
BSR ASPCT
BSR AROND
JALE $ < ?!?!???
STA XA17 < NOMBRE DE RECURSION MAX LORS DE LA
< SOMMATION DES FONCTIONS ALEATOIRES.
<
< DEFINITION DES EXPONENTIATIONS :
<
LXI A19
BSR ASPCT
BSR AROND
JALE $ < ??!????!
STA EXPOP < NUMERATEUR DE L'EXPOSANT,
LXI A1A
BSR ASPCT
BSR AROND
STA EXPOQ < POUR CALCULER LE DENOMINATEUR 2**Q...
LR A,X
LAI 1
SLLS 0,X < CALCUL DE 2**Q,
CP EXPOP < A-T'ON : P<(2**Q) ???
JLE $ < ?!???!?!
<
< DEFINITION DE LA SPIRALE :
<
LXI A20
BSR ASPCT
BSR AROND
STA XA20 < CONTRAINTE OU PAS...
LXI A21
BSR ASPCT
FST FNP
BSR AROND
JALE $ < ?!??!?!
STA NPM < NOMBRE DE POINTS MAX...
LXI A22
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
LXI A23
BSR ASPCT
FST XA23 < AMPLIFICATEUR DES CONDITIONS INITIALES...
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< C A L C U L D E R D N ( X S , Y S ) :
<
<
< ARGUMENT :
< (XS,YS)=POINT COURANT.
<
<
< RESULTAT :
< (A,B)=VALEUR ALEATOIRE ASSOCIEE A (XS,YS)
< ISSUE DIRECTEMENT DE 'RDN' SI (XS,YS)
< EST UN NOEUD DE LA GRILLE COURANTE,
< ET UNE VALEUR INTERPOLEE SINON...
<
<
PRDN: EQU $
PSR X,Y
LX XS < PLACONS NOUS AU
LY YS < POINT COURANT...
PSR X,Y < ET SAVE...
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
BSR ARDN < LE POINT COURANT EST UN NOEUD...
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA XNOEUD
NGR A,A
FLT
FAD GXS < X-XNOEUD,
FDV FPASIX < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA YNOEUD
NGR A,A
FLT
FAD GYS < Y-YNOEUD,
FDV FPASIY < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
BSR ARDN
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XS
AD PASIX
STA XS
BSR ARDN
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YS
AD PASIY
STA YS
BSR ARDN
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LA XS
SB PASIX
STA XS
BSR ARDN
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
<
< SORTIE :
<
SPU30: EQU $
PLR X,Y
STY YS < RESTAURE
STX XS < LE POINT COURANT...
PLR X,Y
RSR
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN2: EQU $
FLT
SPRDN5: EQU $ < CAS DE L'ENTREE DES CONDITIONS INITIALES.
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0010 < BORNE SUPERIEURE,
FLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0011 < BORNE INFERIEURE,
FLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FIX
CP XA0010 < ???
JG SPRDN2 < ON RECOMMENCE ; CE CAS PEUT SE PRODUIRE
< AVEC LES CONTRAINTES PAR 'TV2'...
CP XA0011 < ???
JL SPRDN2 < ON ITERE (CF. 'TV2')...
FLT
FMP FMUL
RSR
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
<
< DISCRIMINATIONS INITIALES :
<
LA KITER
CPI 1 < EST-CE LA PREMIERE GENERATION ???
JNE SPRDN4 < NON, TIRAGE ALEATOIRE...
CPZ XA20 < OUI, FAUT-IL INITIALISER PAR DES
< CONTRAINTES 'TV2' ???
JNE SPIR < OUI...
<
<
< G E N E R A T I O N A L E A T O I R E :
<
<
SPRDN4: EQU $
LA XS
FLT
FST FWORK4 < SAVE LE 'XS' FLOTTANT...
LA YS
FLT
FST FWORK5 < SAVE LE 'YS' FLOTTANT...
FMP FWORK4 < ET ON CONSTRUIT
FAD FWORK5 < UNE FONCTION UNIQUE
FAD FWORK4 < DU NOEUD COURANT...
EORR B,A
AD RDN1
MP KITER < AFIN DE GENERER TOUJOURS LES MEMES
< NOMBRES ALEATOIRES AU MEME NIVEAU DE
< RECURSION...
EORR B,A < (A)=F(XS,YS,PASIX INITIAL,PASIY INITIAL).
EOR XA16 < PARAMETRE VARIABLE...
FLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
LA CTCDA
STA XCTCDA < PASSAGE SUR 'TV2'...
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
FLT
FDV XA18
BSR AROND
STA XS < RE-NORMALISATION...
LA YS
FLT
FDV XA18
BSR AROND
STA YS < IDEM...
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YS
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XS
AD DELTAX < CHANGEMENT DE
STA XS
LA YS
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
SPMOY6: EQU $ < CAS OU LE Z-BUFFER CONNAIT DEJA (XS,YS) :
FLT
FDV FNP
FMP XA23 < ET AMPLIFICATION...
<
< SORTIE :
<
STZ XCTCDA < RETOUR SUR 'TV1'...
BR APRDN5 < VERS LA SORTIE...
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JE RAYON1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FMP XA18 < SCALING...
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FMP XA18 < SCALING...
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ARCRD
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ARCRD
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ARCRD
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ARCRD
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RAYON1: EQU $
RSR
<
<
< G E N E R A T I O N D ' U N E S O M M A T I O N
< R E C U R S I V E D E F O N C T I O N S
< A L E A T O I R E S " D E C R O I S S A N T E S " :
<
<
RCRD: EQU $
<
< INITIALISATION ET SAUVEGARDES :
<
LA PASIX
LB PASIY
PSR A,B,X < SAUVEGARDE DE (PASIX,PASIY)...
FLD F0
FST FCUMR < INITIALISATION DU CUMUL DES FONCTIONS
< ALEATOIRES SCALANTES...
FLD FPOND0
FST FPOND < INITIALISATOON DE LA PONDERATTION DES
< FONCTIONS ALEATOIRES...
<
< ITERATION POUR CHAQUE
< FONCTION ALEATOIRE :
<
STZ KITER < INITIALISATION DES RECURSIONS...
LX XA17 < (X)=NOMBRE D'ITERATIONS MAX...
RCRD1: EQU $
IC KITER < COMPTAGE DES RECURSIONS...
LA PASIX
FLT
FST FPASIX
LA PASIY
FLT
FST FPASIY
BSR APRDN < (A,B)=VALEUR ALEATOIRE ASSOCIEE AU
< POINT (XS,YS) ET A LA GRILLE COURANTE
< (PASIX,PASIY)...
FMP FPOND
FDV FPOND0 < ET ON LA PONDERE PAR FPOND/FPOND0,
< AFIN D'OBTENIR DES VALEURS ALEATOIRES
< DECROISSANTES STATISTIQUEMENT...
FAD FCUMR < QUE L'ON CUMULE,
FST FCUMR < ON A AINSI EN CHAQUE POINT UNE SOMME
< DE FONCTION ALEATOIRE DONT LA FREQUENCE
< AUGMENTE PROGRESSIVEMENT PAR REDUCTION
< DE LA MAILLE, MAIS DONT L'AMPLITUDE
< DIMINUE STATISTIQUEMENT...
FLD FPOND
BSR ARAK
FST FPOND < DECROISSANCE DES AMPLITUDES DES FONCTIONS
< ALEATOIRES...
FLD FPASIX
BSR ARAC < ON REDUIT LA MAILLE, PAR :
< MAILLE=RAC(MAILLE)...
< A T T E N T I O N : ON UTILISE 'RAC'
< ET NON PAS 'RAK' COMME DANS #CHAMP 4#...
BSR AROND
LY PASIX < (Y)=PASIX AVANT...
STA PASIX
FLD FPASIY
BSR ARAC
BSR AROND
CP PASIY < EST-ON AU PLANCHER ???
STA PASIY
JNE RCRD2 < NON, ON ITERE, A MOINS QUE LE COMPTE
< MAX SOIT ATTEINT...
LR Y,A
CP PASIX < PEUT-ETRE...
JE RCRD3 < ET OUI, ON ARRETE LA...
RCRD2: EQU $ < PAS ENCORE LE PLANCHER...
JDX RCRD1 < ET ON ITERE JUSQU'A ATTEINDRE LA
< DEFINITION DE L'ECRAN OU LE MAX DES
< ITERATIONS...
<
< FIN DE RECURSION :
<
RCRD3: EQU $
PLR A,B,X < ON RESTAURE
STB PASIY < LA GRILLE
STA PASIX < INITIALE...
FLD FCUMR < ET ON RENVOIE LA SOMME DES
< FONCTIONS ALEATOIRES...
FMP FA3 < QUE L'ON NORMALISE...
RSR
<
<
< C A L C U L D ' U N E P U I S S A N C E
< Q U E L C O N Q U E P / ( 2 * * Q ) :
<
<
< ARGUMENT :
< (A,B)=NOMBRE 'N' ARGUMENT,
<
<
< RESULTAT :
< (A,B)='N' A LA PUISSANCE P/(2**Q).
<
<
RAK: EQU $
FCAZ
JE RAK2 < NOMBRE=0 ==> RAKINE=0...
JG RAK3 < OK, NOMBRE>0...
QUIT 1 < ??!??!?!
RAK3: EQU $
PSR X
<
< ELEVATION A LA PUISSANCE '1/(2**Q)' :
<
LX EXPOQ < (X)=EXPOSANT DE 2**Q,
RAK6: EQU $
BSR ARAC < ET ON CALCULE (A,B)**(1/(2**Q))...
JDX RAK6
<
< ELEVATION A LA PUISSANCE 'P' :
<
LX EXPOP < (X)=EXPOSANT 'P',
FST FWORK < (A,B)=NOMBRE ARGUMENT,
RAK4: EQU $
ADRI -1,X
CPZR X < EST-CE FINI ???
JE RAK5 < OUI...
FMP FWORK < NON, ON LE MULTIPLIE P-1 FOIS PAR
< LUI-MEME...
JMP RAK4
RAK5: EQU $
PLR X
RAK2: EQU $
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 5'
DF'SIOP RAYON CHAMP 6'
ED'SIOP RAYON CHAMP 6'
IN0
NLS
IDP "SIOP RAYON CHAMP 6"
< R A Y O N C H A M P 6 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
XXSPIR:: VAL 1 < 0 : GENERER LES CONTRAINTES INITIALES
< PAR DES SPIRALES SUR 'TV2',
< 1 : NE PAS PRENDRE EN COMPTE DE
< CONTRAINTES INITIALES.
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES.
A4:: VAL A3+1 < INUTILISE...
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A10:: VAL '10 < BORNE SUP(RDN),
A11:: VAL A10+1 < BORNE INF(RDN),
A12:: VAL A11+1 < MULTIPLICATEUR(RDN).
A13:: VAL A12+1 < INUTILISE...
A14:: VAL A13+1 < PAS EN 'X' DE LA GRILLE DE DEPART,
A15:: VAL A14+1 < PAS EN 'Y' DE LA GRILLE DE DEPART.
A16:: VAL A15+1 < PARAMETRE DE DEFINITION DU GENERATEUR
< ALEATOIRE...
A17:: VAL A16+1 < NOMBRE DE RECURSION MAX LORS DE LA SOM-
< MATION DES FONCTIONS ALEATOIRES.
A18:: VAL A17+1 < FACTEUR D'ECHELLE DES COORDONNEES...
A19:: VAL A18+1 < EXPOSANT 'P' DES EXPONENTIELLES,
A20:: VAL '20 < DISCRIMINATEUR DES CONTRAINTES INITIALES:
< =0 : NON, GENERATION PUREMENT ALEATOIRE,
< #0 : LA PREMIERE GENERATION (KITER=1)
< EST CONTRAINTE PAR 'TV2'...
A21:: VAL A20+1 < NOMBRE DE POINTS MAX DE LA SPIRALE,
A22:: VAL A21+1 < PAS DE PARCOURS DE LA SPIRALE,
A23:: VAL A22+1 < FACTEUR D'AMPLIFICATION DES CONTRAINTES
< APRES NORMALISATION...
A24:: VAL A23+1 < GENERATION ALEATOIRE SUR UN X-TORE :
< 0 : OUI, SUR UN X-TORE,
< 1 : NON, SUR UN X-PLAN.
A25:: VAL A24+1 < GENERATION ALEATOIRE SUR UN Y-TORE :
< 0 : OUI, SUR UN Y-TORE,
< 1 : NON, SUR UN Y-PLAN.
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
XA18: FLOAT 0 < FACTEUR D'ECHELLE LOCAL DES COORDONNEES
< ENVOYEES PAR ' +'...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES FONCTIONS ALEATOIRES
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA3: FLOAT 0 < AMPLIFICATEUR DES VALEURS ALEATOIRES
< CORRELEES...
FA5: FLOAT 0 < ET 'A5'.
FCUMR: FLOAT 0 < SIGMA DES FONCTIONS ALEATOIRES
< SCALANTES.
FPOND: FLOAT 0 < POUR LES PONDERER...
FPOND0:: FLOAT 0 < VALEUR INITIALE DE LA PONDERATION :
< FPOND0=RAC(PASIX*PASIY).
EXPOP: FLOAT 0 < EXPOSANT DE CALCUL DES EXPONENTIELLES.
IF XXSPIR,XWOR%7,,XWOR%7
<
< DONNEES DES CONTRAINTES INITIALES :
<
XA20: WORD 0 < =0 : PAS DE CONTRAINTES MAIS DU RDN,
< #0 : CONTRAINTES INITIALES PAR 'TV2'...
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
XA23: FLOAT 0 < AMPLIFICATEUR DES CONDITIONS INITIALES...
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
XWOR%7: VAL 0
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
IF XXSPIR,XWOR%7,,XWOR%7
APRDN5: WORD SPRDN5 < REALI...
XWOR%7: VAL 0
ARCRD: WORD RCRD < CALCUL DU CHAMP ALEATOIRE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
<
< DEFINITION DE LA GRILLE :
<
PASIX: WORD 0 < PAS SUR OX,
PASIY: WORD 0 < PAS SUR OY.
FPASIX: FLOAT 0 < DE MEME
FPASIY: FLOAT 0 < EN FLOTTANT...
XNOEUD: WORD 0 < X(NOEUD HAUT-GAUCHE) DE LA MAILLE,
YNOEUD: WORD 0 < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE.
AFNIV1: FLOAT 0
AFNIV2: FLOAT 0
AFNIV3: FLOAT 0
AFNIV4: FLOAT 0
XA17: WORD 0 < PARAMETRE 'A17'.
KITER: WORD 0 < COMPTAGE DES RECURSIONS...
TOREX: WORD 0 < GENERATION ALEATOIRE SUR UN X-TORE :
< 0 : OUI, SUR UN X-TORE,
< 1 : NON, SUR UN X-PLAN.
TOREY: WORD 0 < GENERATION ALEATOIRE SUR UN Y-TORE :
< 0 : OUI, SUR UN Y-TORE,
< 1 : NON, SUR UN Y-PLAN.
MAXTOR: WORD 0 < CONTIENT LA "LONGUEUR" DU TORE APRES
< SCALING PAR 'XA18'...
<
< PARAMETRES DU GENERATEUR ALEATOIRE :
<
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
XA16: WORD 0 < PARAMETRE VARIABLE...
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
XA0010: WORD 0 < BORNE SUPERIEURE,
XA0011: WORD 0 < BORNE INFERIEURE...
FMUL: FLOAT 0 < MULTIPLICATEUR...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFINI/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
HINCU: FLOAT 0 < POUR
HINCV: FLOAT 0 < L'INTERPOLATION...
<
< POUR LE CALCUL DU LOGARITHME :
<
ZZZ001: DZS 2 < NB FLOTTANT
ZZZ002: DZS 2
ZZZ003: DZS 2
ZZZ004: WORD '5A00;'8279 < RACINE(2)/2
ZZZ005: WORD '5201;'B046 < CSTES DU DEVELOPPEMENT
ZZZ006: WORD '5402;'79B7
ZZZ007: WORD '6A01;'0867
ZZZ008: EQU F05 < CSTE 0.5
ZZZ009: WORD '5800;'B90C < CSTE LN(2)
ZZZ010:: VAL 'FF00 < MASQUE.
<
< POUR LE CALCUL DE L'EXPONENTIELLE :
<
ZZZ021: EQU ZZZ001 < NB EN FLOTTANT
ZZZ022: EQU ZZZ002
ZZZ023: EQU ZZZ003
ZZZ024: WORD '5C01;'551E < LOG A BASE 2 DE E
ZZZ025: DZS 1 < RELEVE DE L'EXPOSANT
ZZZ026: EQU F1 < 1.0
ZZZ027: WORD '4002;'0000 < 2.0
ZZZ028: WORD '5707;'6AE1 < CSTES DU POLYNOME
ZZZ029: WORD '46FC;'FA70
ZZZ030: WORD 'BA0F;'5917
ZZZ031: WORD '4F04;'A303
ZZZ032:: VAL ZZZ010 < MASQUE
SIGNE: WORD 0 < POUR DETERMINER LE SIGNE DE X**Y...
<
< RELAIS DE SOUS-PROGRAMMES :
<
BINTER: WORD QINTER < MODULE D'INTERPOLATION...
AQWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'...
ARDN: WORD SQRDN < GENERATEUR ALEATOIRE.
APRDN: WORD PRDN < CALCUL D'UNE VALEUR ALEATOIRE SUR LA
< GRILLE COURANTE...
ARAK: WORD RAK < CALCUL DE LA PUISSANCE P/(2**Q) D'UN
< NOMBRE...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
LXI A3
BSR ASPCT
FST FA3
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< ENTREE DES PARAMETRES
< DE GENERATION ALEATOIRE :
<
LXI A10
BSR ASPCT
BSR AFIX
STA XA0010 < BORNE SUPERIEURE,
LXI A11
BSR ASPCT
BSR AFIX
STA XA0011 < ET BORNE INFERIEURE...
LXI A12
BSR ASPCT
BSR AFCAZ
JLE $ < ????!?!
FST FMUL
LXI A16
BSR ASPCT
BSR AROND
STA XA16 < PARAMETRE D'INITIALISATION...
<
< ENTREE DE LA GRILLE :
<
LXI A18
BSR ASPCT
BSR AFCAZ
JLE $ < ??!?!??!
FST XA18 < FCATEUR D'ECHELLE LOCAL...
LXI A14
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIX < PAS EN 'X',
BSR AFLT
FST FWORK5 < FWORK5=PASIX...
LXI A15
BSR ASPCT
FMP XA18 < POUR AVOIR UNE GENERATION SCALANTE...
BSR AROND
JALE $ < ???
STA PASIY < ET PAS EN 'Y'...
BSR AFLT
FMP FWORK5 < CALCUL DE PASIX*PASIY*K*K CE QUI DONNE
< L'AIRE DE LA MAILLE ELEMENTAIRE...
BSR ARAC
FST FPOND0 < LA PONDERATION INITIALE DES FONCTIONS
< ALEATOIRES EST EN FAIT LA TAILLE DE LA
< MAILLE...
LXI A17
BSR ASPCT
BSR AROND
JALE $ < ?!?!???
STA XA17 < NOMBRE DE RECURSION MAX LORS DE LA
< SOMMATION DES FONCTIONS ALEATOIRES.
IF NLIGM1-NPOLM1,,XWOR%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%: VAL 0
LAI NLIGM1?NPOLM1
ADRI 1,A < PARCE QU'UNE INSTRUCTION IMMEDIATE NE
< PEUT CONTENIR QUE 8 BITS...
BSR AFLT < FLOTTAGE,
FMP XA18 < SCALING,
BSR AROND < FIXAGE,
STA MAXTOR < CE QUI DONNE LA "LONGUEUR" DU TORE...
<
< ENTREE DES X/Y-TORES :
<
LXI A24
BSR ASPCT
BSR AROND
STA TOREX < DEFINITION DU X-TORE.
LXI A25
BSR ASPCT
BSR AROND
STA TOREY < DEFINITION DU Y-TORE.
<
< DEFINITION DES EXPONENTIATIONS :
<
LXI A19
BSR ASPCT
FST EXPOP
IF XXSPIR,XWOR%7,,XWOR%7
<
< DEFINITION DE LA SPIRALE :
<
LXI A20
BSR ASPCT
BSR AROND
STA XA20 < CONTRAINTE OU PAS...
LXI A21
BSR ASPCT
FST FNP
BSR AROND
JALE $ < ?!??!?!
STA NPM < NOMBRE DE POINTS MAX...
LXI A22
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
LXI A23
BSR ASPCT
FST XA23 < AMPLIFICATEUR DES CONDITIONS INITIALES...
XWOR%7: VAL 0
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< I N T E R P O L A T I O N :
<
<
< NOTA :
< ON N'UTILISE PAS 'PINTER' DE
< 'SI +', CAR CELUI-CI UTILISE
< LA BASE 'L' POUR APPELER LE
< SOUS-PROGRAMME 'PWORK' !!!
<
<
QINTER: EQU $
FLD F1
FSB HINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB HINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP AFNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD HINCU
FMP FWORK2
FMP AFNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD HINCU
FMP HINCV
FMP AFNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP HINCV
FMP AFNIV4
BSR AQWORK < +(1-FU)*FV*N4,
RSR
<
<
< C A L C U L D E R D N ( X S , Y S ) :
<
<
< ARGUMENT :
< (XS,YS)=POINT COURANT.
<
<
< RESULTAT :
< (A,B)=VALEUR ALEATOIRE ASSOCIEE A (XS,YS)
< ISSUE DIRECTEMENT DE 'RDN' SI (XS,YS)
< EST UN NOEUD DE LA GRILLE COURANTE,
< ET UNE VALEUR INTERPOLEE SINON...
<
<
PRDN: EQU $
PSR X,Y
LX XS < PLACONS NOUS AU
LY YS < POINT COURANT...
PSR X,Y < ET SAVE...
LR X,A
SARD NBITMO
DV PASIX
MP PASIX
STB XNOEUD < X(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE,
LR Y,A
SARD NBITMO
DV PASIY
MP PASIY
STB YNOEUD < Y(NOEUD HAUT-GAUCHE) DE LA MAILLE
< COURANTE.
LA XS
CP XNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON...
LA YS < PEUT-ETRE :
CP YNOEUD < EST-ON EN UN NOEUD ???
JNE SPU31 < NON, INTERPOLONS...
BSR ARDN < LE POINT COURANT EST UN NOEUD...
JMP SPU30 < VERS L'ACCES A LA VALEUR DU NOEUD...
SPU31: EQU $
LA XNOEUD
NGR A,A
BSR AFLT
FAD GXS < X-XNOEUD,
FDV FPASIX < (X-XNOEUD)/PASIX,
FST HINCU < DISTANCE NORMALISEE A 1 LE LONG DE OX,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LA YNOEUD
NGR A,A
BSR AFLT
FAD GYS < Y-YNOEUD,
FDV FPASIY < (Y-YNOEUD)/PASIY,
FST HINCV < DISTANCE NORMALISEE A 1 LE LONG DE OY,
< DU POINT COURANT AU NOEUD DE LA MAILLE.
LX XNOEUD
LY YNOEUD
STX XS < ON SE PLACE AU NOEUD
STY YS < HAUT-GAUCHE DE LA MAILLE...
BSR ARDN
FST AFNIV1 < NIVEAU(XNOEUD,YNOEUD),
LA XS
AD PASIX
STA XS
BSR ARDN
FST AFNIV2 < NIVEAU(XNOEUD+PASIX,YNOEUD),
LA YS
AD PASIY
STA YS
BSR ARDN
FST AFNIV3 < NIVEAU(XNOEUD+PASIX,YNOEUD+PASIY),
LA XS
SB PASIX
STA XS
BSR ARDN
FST AFNIV4 < NIVEAU(XNOEUD,YNOEUD+PASIY).
BSR BINTER < ET INTERPOLATION...
<
< SORTIE :
<
SPU30: EQU $
PLR X,Y
STY YS < RESTAURE
STX XS < LE POINT COURANT...
PLR X,Y
RSR
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
SPRDN2: EQU $
BSR AFLT
SPRDN5: EQU $ < CAS DE L'ENTREE DES CONDITIONS INITIALES.
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFINI)/2,
FST FWORK4
LA XA0010 < BORNE SUPERIEURE,
BSR AFLT
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFINI)/2,
FST FWORK5
LA XA0011 < BORNE INFERIEURE,
BSR AFLT
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
BSR AFIX
CP XA0010 < ???
JG SPRDN2 < ON RECOMMENCE ; CE CAS PEUT SE PRODUIRE
< AVEC LES CONTRAINTES PAR 'TV2'...
CP XA0011 < ???
JL SPRDN2 < ON ITERE (CF. 'TV2')...
BSR AFLT
FMP FMUL
<
< RESTAURATIONS ET SORTIE :
<
FST FWORK < SAUVEGARDE DU 'RDN' COURANT,
PLR A,B
STB YS < RESTAURATION
STA XS < DU POINT (XS,YS),
FLD FWORK < ET DU NOMBRE ALEATOIRE GENERE...
RSR
<
<
< G E N E R A T E U R R E D O N N A N T T O U J O U R S
< L E M E M E V E C T E U R A L E A T O I R E E N
< U N P O I N T D O N N E :
<
<
SQRDN: EQU $
<
< GESTION DES X/Y-TORES :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DE (XS,YS) A PRIORI...
CPZ TOREX < EST-ON SUR UN X-TORE ALEATOIRE ???
JNE SQRDN1 < NON...
LA XS < OUI, REDUCTION DE 'XS' :
SQRDN2: EQU $
JAGE SQRDN3 < OK, POSITIF...
AD MAXTOR < NEGATIF, ON LE REND POSITIF...
JMP SQRDN2
SQRDN3: EQU $
SARD NBITMO
DV MAXTOR
STB XS < ET ON CALCULE 'XS' MODULO 'MAXTOR'...
SQRDN1: EQU $
CPZ TOREY < EST-ON SUR UN Y-TORE ???
JNE SQRDN4 < NON...
LA YS < OUI, REDUCTION DE 'YS' :
SQRDN5: EQU $
JAGE SQRDN6 < OK, POSITIF...
AD MAXTOR < NEGATIF, ON LE REND POSITIF...
JMP SQRDN5
SQRDN6: EQU $
SARD NBITMO
DV MAXTOR
STB YS < ET ON CALCULE 'YS' MODULO 'MAXTOR'...
SQRDN4: EQU $
IF XXSPIR,XWOR%7,,XWOR%7
<
< DISCRIMINATIONS INITIALES :
<
LA KITER
CPI 1 < EST-CE LA PREMIERE GENERATION ???
JNE SPRDN4 < NON, TIRAGE ALEATOIRE...
CPZ XA20 < OUI, FAUT-IL INITIALISER PAR DES
< CONTRAINTES 'TV2' ???
JNE SPIR < OUI...
XWOR%7: VAL 0
<
<
< G E N E R A T I O N A L E A T O I R E :
<
<
SPRDN4: EQU $
LA XS
BSR AFLT
FST FWORK4 < SAVE LE 'XS' FLOTTANT...
LA YS
BSR AFLT
FST FWORK5 < SAVE LE 'YS' FLOTTANT...
FMP FWORK4 < ET ON CONSTRUIT
FAD FWORK5 < UNE FONCTION UNIQUE
FSB FWORK4 < DU NOEUD COURANT, AVEC :
< (F(X,Y)#F(Y,X) !!!
EORR B,A
AD RDN1
MP KITER < AFIN DE GENERER TOUJOURS LES MEMES
< NOMBRES ALEATOIRES AU MEME NIVEAU DE
< RECURSION...
EORR B,A < (A)=F(XS,YS,PASIX INITIAL,PASIY INITIAL).
EOR XA16 < PARAMETRE VARIABLE...
BSR AFLT < INITIALISATION DU GENERATEUR...
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
JMP SPRDN2 < QUE L'ON CONSIDERE ENTIER...
IF XXSPIR,XWOR%7,,XWOR%7
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
LA CTCDA
STA XCTCDA < PASSAGE SUR 'TV2'...
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
BSR AFLT
FDV XA18
BSR AROND
STA XS < RE-NORMALISATION...
LA YS
BSR AFLT
FDV XA18
BSR AROND
STA YS < IDEM...
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YS
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XS
AD DELTAX < CHANGEMENT DE
STA XS
LA YS
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
SPMOY6: EQU $ < CAS OU LE Z-BUFFER CONNAIT DEJA (XS,YS) :
BSR AFLT
FDV FNP
FMP XA23 < ET AMPLIFICATION...
<
< SORTIE :
<
STZ XCTCDA < RETOUR SUR 'TV1'...
BR APRDN5 < VERS LA SORTIE...
XWOR%7: VAL 0
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FA0 < LA CONSTANTE MULTIPLICATIVE EST-ELLE
< NULLE ???
JE RAYON1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
BSR AFLT
FAD FWORK
FMP XA18 < SCALING...
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
BSR AFIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
BSR AFLT
FSB GXS
BSR AFNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
BSR AFLT
FAD FWORK
FMP XA18 < SCALING...
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
BSR AFIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
BSR AFLT
FSB GYS
BSR AFNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ARCRD
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ARCRD
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ARCRD
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ARCRD
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
BSR AQWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
BSR AQWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
RAYON1: EQU $
RSR
<
<
< G E N E R A T I O N D ' U N E S O M M A T I O N
< R E C U R S I V E D E F O N C T I O N S
< A L E A T O I R E S " D E C R O I S S A N T E S " :
<
<
RCRD: EQU $
<
< INITIALISATION ET SAUVEGARDES :
<
LA PASIX
LB PASIY
PSR A,B,X < SAUVEGARDE DE (PASIX,PASIY)...
FLD F0
FST FCUMR < INITIALISATION DU CUMUL DES FONCTIONS
< ALEATOIRES SCALANTES...
FLD FPOND0
FST FPOND < INITIALISATOON DE LA PONDERATTION DES
< FONCTIONS ALEATOIRES...
<
< ITERATION POUR CHAQUE
< FONCTION ALEATOIRE :
<
STZ KITER < INITIALISATION DES RECURSIONS...
LX XA17 < (X)=NOMBRE D'ITERATIONS MAX...
RCRD1: EQU $
IC KITER < COMPTAGE DES RECURSIONS...
LA PASIX
BSR AFLT
FST FPASIX
LA PASIY
BSR AFLT
FST FPASIY
BSR APRDN < (A,B)=VALEUR ALEATOIRE ASSOCIEE AU
< POINT (XS,YS) ET A LA GRILLE COURANTE
< (PASIX,PASIY)...
FMP FPOND
FDV FPOND0 < ET ON LA PONDERE PAR FPOND/FPOND0,
< AFIN D'OBTENIR DES VALEURS ALEATOIRES
< DECROISSANTES STATISTIQUEMENT...
FAD FCUMR < QUE L'ON CUMULE,
FST FCUMR < ON A AINSI EN CHAQUE POINT UNE SOMME
< DE FONCTION ALEATOIRE DONT LA FREQUENCE
< AUGMENTE PROGRESSIVEMENT PAR REDUCTION
< DE LA MAILLE, MAIS DONT L'AMPLITUDE
< DIMINUE STATISTIQUEMENT...
FLD FPOND
BSR ARAK
FST FPOND < DECROISSANCE DES AMPLITUDES DES FONCTIONS
< ALEATOIRES...
FLD FPASIX
BSR ARAK < ON REDUIT LA MAILLE, PAR :
< MAILLE=RAK(MAILLE)...
BSR AROND
LY PASIX < (Y)=PASIX AVANT...
STA PASIX
FLD FPASIY
BSR ARAK
BSR AROND
CP PASIY < EST-ON AU PLANCHER ???
STA PASIY
JNE RCRD2 < NON, ON ITERE, A MOINS QUE LE COMPTE
< MAX SOIT ATTEINT...
LR Y,A
CP PASIX < PEUT-ETRE...
JE RCRD3 < ET OUI, ON ARRETE LA...
RCRD2: EQU $ < PAS ENCORE LE PLANCHER...
JDX RCRD1 < ET ON ITERE JUSQU'A ATTEINDRE LA
< DEFINITION DE L'ECRAN OU LE MAX DES
< ITERATIONS...
<
< FIN DE RECURSION :
<
RCRD3: EQU $
PLR A,B,X < ON RESTAURE
STB PASIY < LA GRILLE
STA PASIX < INITIALE...
FLD FCUMR < ET ON RENVOIE LA SOMME DES
< FONCTIONS ALEATOIRES...
FMP FA3 < QUE L'ON NORMALISE...
RSR
<
<
< C A L C U L D ' U N E P U I S S A N C E
< Q U E L C O N Q U E P :
<
<
< ARGUMENT :
< (A,B)=NOMBRE 'N' ARGUMENT,
<
<
< RESULTAT :
< (A,B)='N' A LA PUISSANCE P.
<
<
RAK: EQU $
<
<
< L O G N E P E R I E N :
<
<
LOGN: EQU $
STZ SIGNE < =0 : SIGNE "+" A PRIORI...
BSR AFCAZ
JGE LOGN1 < POSITIF...
IC SIGNE < =1 : SIGNE "-"...
LOGN1: EQU $
LR A,Y
BSR AFABS
ANDI ZZZ010
FST ZZZ003
FAD ZZZ004
FST ZZZ002
LR Y,A
SWBR A
SARS 8
BSR AFLT
FST ZZZ001
FLD ZZZ003
FSB ZZZ004
FDV ZZZ002
FST ZZZ003
FMP ZZZ003
BSR AFNEG
FAD ZZZ007
FST ZZZ002
FLD ZZZ006
FDV ZZZ002
FAD ZZZ005
FMP ZZZ003
FSB ZZZ008
FAD ZZZ001
FMP ZZZ009
<
<
< G E S T I O N D U S I G N E D E L ' E X P O S A N T :
<
<
PSR A,B < SAVE LE 'LOG'...
FLD EXPOP
BSR AFABS
BSR AROND < ON PREND LA PARTIE ENTIERE (PAR EXCES
< OU PAR DEFAUT) DE LA VALEUR ABSOLUE DE
< L'EXPOSANT...
TBT NBITMO-1 < QUELLE EST SA PARITE ???
JC RAK1 < IMPAIRE, 'SIGNE' RESTE TEL QUEL...
STZ SIGNE < PAIRE : ON FORCE "+" (SIGNE INCHANGE)...
RAK1: EQU $
PLR A,B < RESTAURATION DU LOG,
FMP EXPOP < ET ON CALCULE P*LOG...
<
<
< E X P O N E N T I E L L E :
<
<
EXP: EQU $
FMP ZZZ024
FST ZZZ023
BSR AFIX
STA ZZZ025
BSR AFLT
FCAM ZZZ023
JNV ZZZ033
FLD ZZZ026
FST ZZZ023
JMP ZZZ035
ZZZ033: EQU $
CPZ ZZZ023
JGE ZZZ034
DC ZZZ025
LA ZZZ025
BSR AFLT
ZZZ034: EQU $
FSB ZZZ023
BSR AFNEG
FST ZZZ022
FMP ZZZ022
FST ZZZ021
FAD ZZZ028
FST ZZZ023
FLD ZZZ030
FDV ZZZ023
FAD ZZZ021
FMP ZZZ029
FAD ZZZ031
FSB ZZZ022
FST ZZZ023
FLD ZZZ027
FMP ZZZ022
FDV ZZZ023
FAD ZZZ026
FST ZZZ023
ZZZ035: EQU $
SWBR A
SARS 8
AD ZZZ025
CPI '7F
JG $
CPI -'80
JGE ZZZ036
FLD F0 < ON PREND LE MINIMUM...
JMP ZZZ037
ZZZ036: EQU $
ANDI 'FF
STA ZZZ025
LA ZZZ023
ANDI ZZZ032
AD ZZZ025
ZZZ037: EQU $
CPZ SIGNE < PRISE EN COMPTE DU SIGNE SIMULE :
JE EXP1 < POSITIF, ON LAISSE LE RESULTAT TEL QUEL..
BSR AFNEG < NEGATIF, ON INVERSE...
EXP1: EQU $
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON CHAMP 6'
DF'SIOP RAYON RDN 1'
ED'SIOP RAYON RDN 1'
IN0
NLS
IDP "SIOP RAYON RDN 1"
< R A Y O N R D N 1 :
IF XXXRDN-1,XWOR%9,,XWOR%9
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < NOMBRE DE POINTS DE LA SPIRALE ; SI
< CELUI-CI EST NUL, IL N'Y A PAS DE CALCUL
< DE FONCTION MONTAGNEUSE...
A4:: VAL A3+1 < PAS DE PARCOURS DE LA SPIRALE (+1 EN
< GENERAL...).
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A2F:: VAL 47 < POUR CALCULER LA BORNE SUPERIEURE DU
< GENERATEUR ALEATOIRE...
A2E:: VAL A2F-1 < ET SA BORNE INFERIEURE...
A2D:: VAL A2E-1 < POUR INITIALISER LE GENERATEUR ; SI
< CE PARAMETRE EST NUL, IL N'Y A
< RIEN D'ALEATOIRE...
NLS
XWOR%9: VAL 0
IF XXXRDN-2,XWOR%9,,XWOR%9
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< VARIABLES DU GENERATEUR ALEATOIRE :
<
BORSUP: FLOAT 0 < BORNE SUPERIEURE DES NOMBRES GENERES,
BORINF: FLOAT 0 < ET BORNE INFERIEURE.
RDNSUP: FLOAT 32 < POUR CALCULER 'BORSUP',
< (A NOTER QUE 32=2 FOIS L'INVERSE DU
< MAX DE LA FONCTION FU*(1-FU)*FV*(1-FV)...
RDNINF: FLOAT 0 < ET 'BORINF'.
RDNINI: FLOAT 5731 < NOMBRE ALEATOIRE DE DEPART...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFIN1/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
FWORK6: FLOAT 0
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
NLS
XWOR%9: VAL 0
IF XXXRDN-3,XWOR%9,,XWOR%9
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< DEFINITION DU GENERATEUR RDN :
<
LXI A2E
BSR ASPCT
FST RDNINF < POUR LA BORNE INFERIEURE,
LXI A2F
BSR ASPCT
FST RDNSUP < ET LA BORNE SUPERIEURE...
LXI A2D
BSR ASPCT
FST RDNINI < POUR INITIALISER LE GENERATEUR...
NLS
XWOR%9: VAL 0
IF XXXRDN-4,XWOR%9,,XWOR%9
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST FWORK1 < W1=1-FU,
FLD F1
FSB GINCV
FST FWORK2 < W2=1-FV,
FMP FWORK1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP FWORK2
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD FWORK1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
FCMZ RDNINI < FAUT-IL DE L'ALEATOIRE ???
JE SPRDN4 < NON...
FST FWORK6 < SAUVEGARDE DU NIVEAU INTERPOLE SUIVANT
< 'FU' ET 'FV'.
<
< GENERATION DES BORNES DU GENERATEUR :
<
FLD GINCU
FMP GINCV
FMP FWORK1
FMP FWORK2 < LA FONCTION FU*(1-FU)*FV*(1-FV)
< DE VALEUR COMPRISE ENTRE 0 ET 1/16
< S'ANNULE POUR FU=FV=0 OU FU=FV=1 ;
< DE PLUS SON MAX CORRESPOND AUX VALEURS
< MOYENNES DES VARIABLES 'FU' ET 'FV'...
FABS < AU CAS OU LES VARIABLES SERAIENT NEGA-
< TIVES (VOIR LES COEFFICIENTS 'KFU'...).
PSR A,B
FMP RDNINF < MISE A L'ECHELLE...
FST BORINF < BORNE INF DU GENERATEUR.
PLR A,B
FMP RDNSUP < MISE A L'ECHELLE...
FST BORSUP < BORNE SUP DU GENERATEUR...
<
< GENERATION DE RDN(FU,FV) :
<
FLD RDNINI < INITIALISATION...
FAD VARU
FAD VARV
FST FWORK4
FLD VARU
FMP VARV
FAD FWORK4 < INI+FU+FV+FU*FV.
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFIN1)/2,
FST FWORK4
FLD BORSUP < BORNE SUPERIEURE,
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFIN1)/2,
FST FWORK5
FLD BORINF < BORNE INFERIEURE,
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FCAM BORSUP < ???
JG SPRDN3 < ERREUR...
FCAM BORINF < ???
JGE SPRDN1 < OK...
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
SPRDN1: EQU $
<
< GENERATION DU NIVEAU FINAL :
<
FAD FWORK6
SPRDN4: EQU $
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
NLS
XWOR%9: VAL 0
LST
:F
:F
< <<'SIOP RAYON RDN 1'
DF'SIOP RAYON RDN 2'
ED'SIOP RAYON RDN 2'
IN0
NLS
IDP "SIOP RAYON RDN 2"
< R A Y O N R D N 2 :
IF XXXRDN-1,XWOR%,,XWOR%
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < NOMBRE DE POINTS DE LA SPIRALE ; SI
< CELUI-CI EST NUL, IL N'Y A PAS DE CALCUL
< DE FONCTION MONTAGNEUSE...
A4:: VAL A3+1 < PAS DE PARCOURS DE LA SPIRALE (+1 EN
< GENERAL...).
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A2F:: VAL 47 < POUR CALCULER LA BORNE SUPERIEURE DU
< GENERATEUR ALEATOIRE...
A2E:: VAL A2F-1 < ET SA BORNE INFERIEURE...
A2D:: VAL A2E-1 < POUR INITIALISER LE GENERATEUR ; SI
< CE PARAMETRE EST NUL, IL N'Y A
< RIEN D'ALEATOIRE...
A2C:: VAL A2D-1 < COEFFICIENT DU FACTEUR HOMOTHETIQUE LORS
< DE LA RECURSION SUR 'TV2'...
NLS
XWOR%: VAL 0
IF XXXRDN-2,XWOR%,,XWOR%
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GINCU1: FLOAT 0 < GINCU1=1-GINCU,
GINCV1: FLOAT 0 < GINCV1=1-GINCV.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< DONNEES DE RECURSION MONTAGNEUSE :
<
FTAILE: FLOAT <NMOTL*NBITMO?NLIG<0<0
IF NMOTL*NBITMO-NLIG,,XWOR%9,
IF ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XWOR%9: VAL 0
FHOMO: FLOAT 0 < COEFFICIENT HOMOTHETIQUE 'A2C'.
FXPAS: FLOAT 0 < 'NPAS' FLOTTANT.
<
< VARIABLES DU GENERATEUR ALEATOIRE :
<
BORSUP: FLOAT 0 < BORNE SUPERIEURE DES NOMBRES GENERES,
BORINF: FLOAT 0 < ET BORNE INFERIEURE.
RDNSUP: FLOAT 32 < POUR CALCULER 'BORSUP',
< (A NOTER QUE 32=2 FOIS L'INVERSE DU
< MAX DE LA FONCTION FU*(1-FU)*FV*(1-FV)...
RDNINF: FLOAT 0 < ET 'BORINF'.
RDNINI: FLOAT 5731 < NOMBRE ALEATOIRE DE DEPART...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFIN1/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
FWORK6: FLOAT 0
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
NLS
XWOR%: VAL 0
IF XXXRDN-3,XWOR%,,XWOR%
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A3
BSR ASPCT
FST FNP
FIX
STA NPM < NOMBRE DE POINTS MAX...
JAL $ < ??!??!?!
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< DEFINITION DU GENERATEUR RDN :
<
LXI A2E
BSR ASPCT
FST RDNINF < POUR LA BORNE INFERIEURE,
LXI A2F
BSR ASPCT
FST RDNSUP < ET LA BORNE SUPERIEURE...
LXI A2D
BSR ASPCT
FST RDNINI < POUR INITIALISER LE GENERATEUR...
<
< COEFFICIENT HOMOTHETIQUE SUR 'TV2' :
<
LXI A2C
BSR ASPCT
FST FHOMO
NLS
XWOR%: VAL 0
IF XXXRDN-4,XWOR%,,XWOR%
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
CPZ NPM < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FNEG
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FNEG
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST GINCU1 < FU1=1-FU,
FLD F1
FSB GINCV
FST GINCV1 < FV1=1-FV,
FMP GINCU1
FMP GNIV1
FST FWORK < (1-FU)*(1-FV)*N1,
FLD GINCU
FMP GINCV1
FMP GNIV2
FAD FWORK
FST FWORK < +FU*(1-FV)*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +FU*FV*N3,
FLD GINCU1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-FU)*FV*N4,
FST FWORK6 < SAUVEGARDE DU NIVEAU INTERPOLE SUIVANT
< 'FU' ET 'FV'.
<
< RECURSION MONTAGNEUSE :
<
LA NPAS
CPI 2 < Y-A-T'IL MOINS DE 3 PAS ???
JLE RAYON5 < OUI...
FLT < NON :
FST FXPAS < FXPAS=NOMBRE DE PAS...
FLD GINCU
FMP FTAILE
FIX
STA XS < XS=256*GINCU,
FLD GINCV
FMP FTAILE
FIX
STA YS < YS=256*GINCV : ON MAPPE 'TV2' DANS
< CHAQUE TRANSFORMEE DE CARRE ELEMENTAIRE.
LA PASQ
PSR A < SAUVEGARDE DU PAS ARGUMENT DE PARCOURS
< DE LA SPIRALE DE BASE...
FLD FTAILE
FDV FXPAS
BSR AROND < PAS SUR 'U' ET SUR 'V'=256/NPAS...
STA PASQ < PASQ=PAS DE PARCOURS DE LA SPIRALE DANS
< 'TV2' POUR MAPPER DANS LES CARRES ELEMEN-
< TAIRES...
BSR ASPIR < CALCUL DU NIVEAU CETTE FOIS-CI CALCULE
< SUR UNE VERSION HOMOTHETIQUE DE 'TV2',
FMP FHOMO < QUE L'ON MULTIPLIE PAR L'ARGUMENT 'A2C',
FMP FXPAS
FDV FTAILE < ET QU'ON L'ON PONDERE PAR PAS/256...
FAD FWORK6 < QUE L'ON CUMULE AU NIVEAU DE BASE,
FST FWORK6 < ET QUE L'ON SAUVEGARDE...
PLR A
STA PASQ < RESTAURE 'PASQ'...
RAYON5: EQU $
FLD FWORK6 < ET OUI, CA MARCHERA MIEUX AVEC...
FCMZ RDNINI < FAUT-IL DE L'ALEATOIRE ???
JE SPRDN4 < NON...
<
< GENERATION DES BORNES DU GENERATEUR :
<
FLD GINCU
FMP GINCV
FMP GINCU1
FMP GINCV1 < LA FONCTION FU*(1-FU)*FV*(1-FV)
< DE VALEUR COMPRISE ENTRE 0 ET 1/16
< S'ANNULE POUR FU=FV=0 OU FU=FV=1 ;
< DE PLUS SON MAX CORRESPOND AUX VALEURS
< MOYENNES DES VARIABLES 'FU' ET 'FV'...
FABS < AU CAS OU LES VARIABLES SERAIENT NEGA-
< TIVES (VOIR LES COEFFICIENTS 'KFU'...).
PSR A,B
FMP RDNINF < MISE A L'ECHELLE...
FST BORINF < BORNE INF DU GENERATEUR.
PLR A,B
FMP RDNSUP < MISE A L'ECHELLE...
FST BORSUP < BORNE SUP DU GENERATEUR...
<
< GENERATION DE RDN(FU,FV) :
<
FLD RDNINI < INITIALISATION...
FAD VARU
FAD VARV
FST FWORK4
FLD VARU
FMP VARV
FAD FWORK4 < INI+FU+FV+FU*FV.
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFIN1)/2,
FST FWORK4
FLD BORSUP < BORNE SUPERIEURE,
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFIN1)/2,
FST FWORK5
FLD BORINF < BORNE INFERIEURE,
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FCAM BORSUP < ???
JG SPRDN3 < ERREUR...
FCAM BORINF < ???
JGE SPRDN1 < OK...
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
SPRDN1: EQU $
<
< GENERATION DU NIVEAU FINAL :
<
FAD FWORK6
SPRDN4: EQU $
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XS < NON :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
LA CUMUL
FLT
FDV FNP
RSR
NLS
XWOR%: VAL 0
LST
:F
:F
< <<'SIOP RAYON RDN 2'
DF'SIOP RAYON RDN 3'
ED'SIOP RAYON RDN 3'
IN0
NLS
IDP "SIOP RAYON RDN 3"
< R A Y O N R D N 3 :
IF XXXRDN-1,XWOR%,,XWOR%
LST
A0:: VAL 0 < AMPLIFICATEUR DE LA FONCTION MONTA-
< GNEUSE F(XR,YR).
A1:: VAL A0+1 < DEPLACEMENT SUR L'AXE DES 'X', A LA
< CHARGE DU MODULE APPELANT...
A2:: VAL A1+1 < DEPLACEMENT SUR L'AXE DES 'Y', A LA
< CHARGE DU MODULE APPELANT...
A3:: VAL A2+1 < MAX DU NBRE DE POINTS DE LA SPIRALE ; SI
< CELUI-CI EST NUL, IL N'Y A PAS DE CALCUL
< DE FONCTION MONTAGNEUSE...
A4:: VAL A3+1 < PAS DE PARCOURS DE LA SPIRALE (+1 EN
< GENERAL...).
A5:: VAL A4+1 < VALEUR MOYENNE DE LA FONCTION MONTA-
< GNEUSE : A5+A0*F(XR,YR).
A2F:: VAL 47 < POUR CALCULER LA BORNE SUPERIEURE DU
< GENERATEUR ALEATOIRE...
A2E:: VAL A2F-1 < ET SA BORNE INFERIEURE...
A2D:: VAL A2E-1 < POUR INITIALISER LE GENERATEUR ; SI
< CE PARAMETRE EST NUL, IL N'Y A
< RIEN D'ALEATOIRE...
A2C:: VAL A2D-1 < MIN DU NOMBRE DE POINTS DE LA SPIRALE.
A2B:: VAL A2C-1 < PARAMETRE VALANT NORMALEMENT +1 OU -1
< ET DONNANT LA FORME DE LA COURBE DE
< VARIATION DE 'NPM' DANS LA TRANSFORMEE
< DU CARRE DE BASE :
< +1 : PARABOLE VERS LE BAS,
< -1 : PARABOLE VERS LE HAUT.
NLS
XWOR%: VAL 0
IF XXXRDN-2,XWOR%,,XWOR%
LST
<
< INDICATEUR DE PREMIER PASSAGE :
<
PREM: WORD 0 < =0 : PREMIER PASSAGE,
< #0 : PASSAGES SUIVANTS.
<
< VARIABLES MONTAGNEUSES :
<
CUMUL: FLOAT 0 < SIGMA(NIVEAU(XS,YS)*FNPK).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
FNP: FLOAT 0 < NOMBRE DE POINTS FLOTTANT DE LA SPIRALE.
FMAXNP: FLOAT 0 < MAX DU NOMBRE DE POINTS DE LA SPIRALE.
FMINNP: FLOAT 0 < MIN DU NOMBRE DE POINTS DE LA SPIRALE.
FNPC: FLOAT 0 < 'FNP' DEGRESSIF COURANT.
FNPK: FLOAT 0 < COEFFICIENT DE PONDERATION (<=1) DES
< NIVEAUX DES POINTS DE LA SPIRALE.
F4: FLOAT 4
FA2B: FLOAT 0 < COEFFICIENT 'A2B' MULTIPLIE PAR 4...
GXS: FLOAT 0 < COORDONNEES ABSOLUES
GYS: FLOAT 0 < DE CE POINT...
GINCU: FLOAT 0 < RESIDU DE L'ABSCISSE,
GINCV: FLOAT 0 < RESIDU DE L'ORDONNEE.
GINCU1: FLOAT 0 < GINCU1=1-GINCU,
GINCV1: FLOAT 0 < GINCV1=1-GINCV.
GNIV1: FLOAT 0 < SIGMA PONDERE DES NIVEAUX DE LA SPIRALE
< CENTREE EN (XS,YS),
GNIV2: FLOAT 0 < DE MEME EN (XS+1,YS),
GNIV3: FLOAT 0 < DE MEME EN (XS+1,YS+1),
GNIV4: FLOAT 0 < DE MEME EN (XS,YS+1).
FA0: FLOAT 0 < CONSTANTE 'A0',
FA5: FLOAT 0 < ET 'A5'.
<
< VARIABLES DU GENERATEUR ALEATOIRE :
<
BORSUP: FLOAT 0 < BORNE SUPERIEURE DES NOMBRES GENERES,
BORINF: FLOAT 0 < ET BORNE INFERIEURE.
RDNSUP: FLOAT 32 < POUR CALCULER 'BORSUP',
< (A NOTER QUE 32=2 FOIS L'INVERSE DU
< MAX DE LA FONCTION FU*(1-FU)*FV*(1-FV)...
RDNINF: FLOAT 0 < ET 'BORINF'.
RDNINI: FLOAT 5731 < NOMBRE ALEATOIRE DE DEPART...
INFIN1: FLOAT 32768
INFIN2: FLOAT 16384 < INFIN1/2...
FWORK4: FLOAT 0
FWORK5: FLOAT 0
FWORK6: FLOAT 0
<
< TRANSLATION SUR OX ET OY :
<
XFA1: FLOAT 0 < 'OX',
XFA2: FLOAT 0 < ET 'OY'...
<
< RELAIS MONTAGNEUX :
<
ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE...
ARAYON: WORD RAYON < CALCUL DE LA FONCTION COURANTE.
ARAYO1: WORD RAYON1 < RELAI...
NLS
XWOR%: VAL 0
IF XXXRDN-3,XWOR%,,XWOR%
LST
<
< AMPLIFICATEUR DE LA VARIATION DU RAYON
< ET VALEUR MINIMALE DE CELUI-CI :
<
LXI A0
BSR ASPCT
FST FA0
LXI A5
BSR ASPCT
FST FA5
<
< DEFINITION DE LA SPIRALE :
<
LXI A2C
BSR ASPCT
FST FMINNP < MIN(NBRE POINTS SPIRALE),
FCAZ
JALE $ < ?!??!?!?!
LXI A3
BSR ASPCT
FST FMAXNP < MAX(NBRE POINTS SPIRALE),
FCAZ
JAL $ < ????!??!?!
FSB FMINNP
FST FA2B < FA2B PROVISOIRE=MAX=MIN...
LXI A4
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
LXI A2B
BSR ASPCT
FMP F4
FMP FA2B
FST FA2B < FA2B=4*A2B*(MAX-MIN).
<
< TRANSLATION SUR OX ET OY :
<
LXI A1
BSR ASPCT
FST XFA1
LXI A2
BSR ASPCT
FST XFA2
<
< DEFINITION DU GENERATEUR RDN :
<
LXI A2E
BSR ASPCT
FST RDNINF < POUR LA BORNE INFERIEURE,
LXI A2F
BSR ASPCT
FST RDNSUP < ET LA BORNE SUPERIEURE...
LXI A2D
BSR ASPCT
FST RDNINI < POUR INITIALISER LE GENERATEUR...
NLS
XWOR%: VAL 0
IF XXXRDN-4,XWOR%,,XWOR%
LST
<
<
< C A L C U L D U R A Y O N :
<
<
< FONCTION :
< CALCULE LA FONCTION MONTAGNEUSE
< MAIS LE NOMBRE DE POINTS SUR LA
< SPIRALE VARIE DANS LA TRANSFORMEE
< DU CARRE ELEMENTAIRE SUIVANT LA
< LOI :
<
< NPM=RAC((4*A2B*(MAX-MIN)*(ABS(FU)*(ABS(FU)-1))+MAX)*
< (4*A2B*(MAX-MIN)*(ABS(FV)*(ABS(FV)-1))+MAX))...
<
<
< ARGUMENT :
< (A,B)=FONCTION COURANTE.
<
<
< RESULTAT :
< (A,B)=(A5+A0*F(XR,YR))*(FONCTION COURANTE).
<
<
RAYON: EQU $
FCMZ FMAXNP < LA SPIRALE EST-ELLE VIDE ???
JG RAYON2 < NON, ON VA L'EXPLORER...
BR ARAYO1 < OUI, RIEN A FAIRE...
RAYON2: EQU $
PSR A,B < SAVE LE CUMUL INITIAL...
<
< CALCUL DU POINT COURANT ET
< POSITION DANS UN CARRE DE
< COORDONNEES ENTIERES :
<
FLD VARU
FDV KFU
FDV KUZ
FST FWORK
LA TRX
FLT
FAD FWORK
FST GXS < COORDONNEE 'XS' DU POINT COURANT,
FIX
STA XS < COORDONNEE 'X' DU PREMIER SOMMET,
FLT
FSB GXS
FABS < POUR METTRE FU DANS L'INTERVALLE (0,1(,
FST GINCU < POSITION SUR L'AXE DES 'X',
FLD VARV
FDV KFV
FDV KVZ
FST FWORK
LA TRY
FLT
FAD FWORK
FST GYS < COORDONNEE 'YS' DU POINT COURANT.
FIX
STA YS < COORDONNEE 'Y' DU PREMIER SOMMET,
FLT
FSB GYS
FABS < POUR METTRE FV DANS L'INTERVALLE (0,1(,
FST GINCV < POSITION SUR L'AXE DES 'Y'.
<
< PASSAGE SUR 'TV2' :
<
LA CTCDA
STA XCTCDA
<
< CALCUL DU 'NPM' COURANT :
<
FLD GINCU < ABS(FU),
FSB F1 < ABS(FU)-1,
FMP GINCU < ABS(FU)*(ABS(FU)-1),
FMP FA2B < 4*A2B*(MAX-MIN)*(ABS(FU)*(ABS(FU)-1)),
FAD FMAXNP < 4*A2B*(MAX-MIN)*(ABS(FU)*(ABS(FU)-1))+MAX
FST FWORK2
FLD GINCV < ABS(FV),
FSB F1 < ABS(FV)-1,
FMP GINCV < ABS(FV)*(ABS(FV)-1),
FMP FA2B < 4*A2B*(MAX-MIN)*(ABS(FV)*(ABS(FV)-1)),
FAD FMAXNP < 4*A2B*(MAX-MIN)*(ABS(FV)*(ABS(FV)-1))+MAX
FMP FWORK2 < ...*...
BSR ARAC < ET ON PREND LA RACINE CARREE...
FST FNP < CE QUI DONNE LE NOMBRE DE POINTS DE
< LA SPIRALE COURANTE (NON FORCEMENT
< ENTIER...).
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
BSR ASPIR
FST GNIV1 < NIVEAU(XS,YS).
IC XS
BSR ASPIR
FST GNIV2 < NIVEAU(XS+1,YS).
IC YS
BSR ASPIR
FST GNIV3 < NIVEAU(XS+1,YS+1).
DC XS
BSR ASPIR
FST GNIV4 < NIVEAU(XS,YS+1).
DC YS < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
FLD F1
FSB GINCU
FST GINCU1 < FU1=1-FU,
FLD F1
FSB GINCV
FST GINCV1 < FV1=1-FV,
FMP GINCU1
FMP GNIV1
FST FWORK < (1-ABS(FU))*(1-ABS(FV))*N1,
FLD GINCU
FMP GINCV1
FMP GNIV2
FAD FWORK
FST FWORK < +ABS(FU)*(1-ABS(FV))*N2,
FLD GINCU
FMP GINCV
FMP GNIV3
FAD FWORK
FST FWORK < +ABS(FU)*ABS(FV)*N3,
FLD GINCU1
FMP GINCV
FMP GNIV4
FAD FWORK < +(1-ABS(FU))*ABS(FV)*N4,
FST FWORK6 < SAUVEGARDE DU NIVEAU INTERPOLE SUIVANT
< 'FU' ET 'FV'.
FCMZ RDNINI < FAUT-IL DE L'ALEATOIRE ???
JE SPRDN4 < NON...
<
< GENERATION DES BORNES DU GENERATEUR :
<
FLD GINCU
FMP GINCV
FMP GINCU1
FMP GINCV1 < LA FONCTION FU*(1-FU)*FV*(1-FV)
< DE VALEUR COMPRISE ENTRE 0 ET 1/16
< S'ANNULE POUR FU=FV=0 OU FU=FV=1 ;
< DE PLUS SON MAX CORRESPOND AUX VALEURS
< MOYENNES DES VARIABLES 'FU' ET 'FV'...
FABS < AU CAS OU LES VARIABLES SERAIENT NEGA-
< TIVES (VOIR LES COEFFICIENTS 'KFU'...).
PSR A,B
FMP RDNINF < MISE A L'ECHELLE...
FST BORINF < BORNE INF DU GENERATEUR.
PLR A,B
FMP RDNSUP < MISE A L'ECHELLE...
FST BORSUP < BORNE SUP DU GENERATEUR...
<
< GENERATION DE RDN(FU,FV) :
<
FLD RDNINI < INITIALISATION...
FAD VARU
FAD VARV
FST FWORK4
FLD VARU
FMP VARV
FAD FWORK4 < INI+FU+FV+FU*FV.
BSR ASIN < DONT ON PREND LE SINUS...
EORR B,A < ON CUMULE LES 2 MOTS,
SPRDN2: EQU $
FLT
FMP F05 < RDN/2,
PSR A,B < SAVE RDN/2...
FAD INFIN2 < (RDN+INFIN1)/2,
FST FWORK4
FLD BORSUP < BORNE SUPERIEURE,
FMP FWORK4
FST FWORK4
PLR A,B < RDN/2,
FSB INFIN2 < (RDN-INFIN1)/2,
FST FWORK5
FLD BORINF < BORNE INFERIEURE,
FMP FWORK5
FST FWORK5
FLD FWORK4
FSB FWORK5
FDV INFIN1 < MISE A L'ECHELLE...
FCAM BORSUP < ???
JG SPRDN3 < ERREUR...
FCAM BORINF < ???
JGE SPRDN1 < OK...
SPRDN3: EQU $
QUIT 1
JMP SPRDN2
SPRDN1: EQU $
<
< GENERATION DU NIVEAU FINAL :
<
FAD FWORK6
SPRDN4: EQU $
<
< CALCUL DE LA FONCTION COURANTE :
<
FMP FA0 < AMPLIFICATION,
FAD FA5 < ET TRANSLATION.
FST FWORK < RAYON=FA5+FA0*F(XR,YR).
PLR A,B < RESTAURATION DU CUMUL,
FMP FWORK < ET CALCUL DE LA FONCTION COURANTE...
<
< RETOUR :
<
STZ XCTCDA < POUR ATTEINDRE 'TV1'...
RAYON1: EQU $
RSR
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XS
LB YS
PSR A,B < SAUVEGARDE DU POINT (XS,YS).
FLD F0
FST CUMUL < INITIALISATION DU CUMUL PONDERE...
FLD F1
FST FNPK < FNPK=1=COEFFICIENT DE PONDERATION DES
< NIVEAUX=1 (SAUF PEUT-ETRE POUR LE DERNIER
< POINT POUR LEQUEL IL PEUT ETRE INFERIEUR
< A 1...).
FAD FNP
FST FNPC < FNPC=FNP+1...
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
FLD FNPC
FSB F1
FST FNPC < DECREMENTATION DES POINTS TRAITES...
FCAZ < EST-CE FINI...
JLE SPMOY3 < OUI...
FCAM F1 < NON, EST-CE LE DERNIER POINT ???
JGE SPMOY9 < NON, FNPK=1 (VALEUR INITIALE),
FST FNPK < OUI, FNPK=VALEUR FRACTIONNAIRE RESIDUELLE
SPMOY9: EQU $
LA XS < TRAITEMENT DU POINT COURANT :
LB YS
PSR A,B < SAVE (XS,YS) AVANT LE TORE EVENTUEL...
CPZ MODX < Y-A-T'IL X-TORE ???
JE SPMOY6 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
SPMOY6: EQU $
ANDI NPOLM1 < CALCUL MODULO...
STA XS < MISE A JOUR DE XS.
LR B,A < (A)=YS,
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPMOY7 < OUI...
JAL SPMOY4 < NON, LE POINT EST HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
SPMOY7: EQU $
ANDI NLIGM1 < CALCUL MODULO...
STA YS < MISE A JOUR DE YS.
BSR ASPGPS < A=NIVEAU(XS,YS),
FLT
FMP FNPK < NIVEAU PONDERE DU POINT COURANT,
FAD CUMUL
FST CUMUL < ET ON SOMME...
SPMOY4: EQU $
PLR A,B < (A)=XS,
< (B)=YS.
AD DELTAX < CHANGEMENT DE
STA XS
LR B,A < (A)=YS.
AD DELTAY < POINT COURANT (XS,YS).
STA YS
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XS < RESTAURATION
STB YS < DE (XS,YS),
<
< NORMALISATION DU CUMUL :
<
FLD CUMUL
FDV FNP
RSR
NLS
XWOR%: VAL 0
LST
:F
:F
< <<'SIOP RAYON RDN 3'
DF'SIOP SURFACE CHA 4'
ED'SIOP SURFACE CHA 4'
IN0
PAGE
IDP "SIOP SURFACE CHA 4"
<
<
< G E N E R A T E U R D E S U R F A C E S C H A M P 4 :
<
<
< FONCTION :
< CE MODULE GENERE DES SURFACES MONTAGNEUSES
< SUR UN PLAN, A L'AIDE DU GENERATEUR
< RECURSIF 'RAYON CHAMP 4' ; SA PARTICULA-
< RITE EST D'ETRE SCALANT : DE NOUVEAUX
< DETAILS APPARAISSENT A CHAQUE NOUVEL
< AGRANDISSEMENT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON CHAMP 4#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON CHAMP 4#
<
< RELAIS INTERNES :
<
ASPU2: WORD SPU2
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JAE SPU9 < OUI...
BR ASPU2 < NON...
SPU9: EQU $
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON CHAMP 4#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA6
LYI 'FF00 < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA1 < TRANSLATION,
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA7
LYI '00FF < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA2 < TRANSLATION,
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD XFA8
LYI '0000 < POUR LE GENERATEUR 'RDN',
BSR ARAYON < GENERATION ALEATOIRE COHERENTE...
FAD XFA4 < ET TRANSLATION...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON CHAMP 4#
:F
:F
< <<'SIOP SURFACE CHA 4'
DF'SIOP BOURSOUFLURE 1'
ED'SIOP BOURSOUFLURE 1'
IN0
PAGE
IDP "SIOP BOURSOUFLURE 1"
IDP "SIOS BOURSOUFLURES 1"
<
<
< B O U R S O U F L U R E S 1 :
<
<
< FONCTION :
< CE MODULE UTILISE L'IMAGE
< 'TV2' POUR "GONFLER" L'IMAGE
< RESIDENTE, ET CECI EN CALCULANT
< LA DENSITE DE POINTS NON NOIRS
< A DOITE, A GAUCHE, EN HAUT ET
< EN BAS DE CHAQUE POINT COURANT...
<
<
< ARGUMENTS :
XXXRDN: VAL 1
EOT #SIOP RAYON 2#
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
XXXRDN: VAL 2
EOT #SIOP RAYON 2#
<
<
< C O M P O S A N T E E N ' U ' :
<
<
PROG
SPU: EQU $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DES PARAMETRES :
<
LA PREM < EST-CE LA PREMIERE FOIS ???
JANE SPU2 < NON...
IC PREM < OUI...
XXXRDN: VAL 3
EOT #SIOP RAYON 2#
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2: EQU $
FLD XFA1
FAD VARU
RSR < ?!???!
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD XFA2
FAD VARV
RSR < ???!?
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F1
BSR ARAYON < BOURSOUFLURE...
RSR
XXXRDN: VAL 4
EOT #SIOP RAYON 2#
:F
:F
< <<'SIOP BOURSOUFLURE 1'
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.