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'