PAGE 1 M.I.G.S. MANUAL IDENTIFICATION M.I.G.S. - MUDDLE INTERACTIVE GRAPHICS SYSTEM RICHARD R. SHIFFMAN OCTOBER 30, 1973 MOTIVATION I HAVE FOUND THAT THERE IS A GENERAL NEED FOR AN INTERACTIVE GRAPHICS SYSTEM THAT RUNS IN A TIMESHARING ENVIRONMENT. THE GREATEST USE FOR SUCH A SYSTEM WOULD BE IN ENGINEERING, MATH, AND PHYSICS. THE ADVANTAGES OF INTERACTIVE GRAPHICS OVER NORMAL COMPUTER AIDED INSTRUCTION ARE OBVIOUS. A STUDENT OR RESEARCHER CAN SIT DOWN AT A LOW COST GRAPHICS TERMINAL AND SEE A PICTURE OF THE FUNCTION HE IS INTERESTED IN. THIS LEADS TO A BETTER UNDERSTANDING OF THE PROBLEM, AND ALSO ALLOWS EXPERIMENTATION THAT WOULD BE TOO DIFFICULT TO DO BY HAND. FOR A STUDENT THIS WOULD MEAN GREATER INTEREST IN THE SUBJECT AND HOPEFULLY BETTER UNDERSTANDING OF IT. I BELIEVE THAT THE ARPA NETWORK IS IDEAL FOR THE DEVELOPMENT OF SUCH A SYSTEM, SINCE IT IS EASILY ACCESSIBLE FROM MANY COLLEGES AND RESEARCH CENTERS IN THE COUNTRY. MY ORIGINAL CHOICE OF M.I.T.-D.M.C.G. AND MUDDLE TO DEVELOP THIS PACKAGE WAS TAKEN AT RANDOM, BUT THE RESEARCH ORIENTED ATMOSPHERE OF DMCG AND THE POWERFUL INTERACTIVE ENVIRONMENT OF MUDDLE (A RECURSIVE LIST PROCESSING LANGUAGE) PROVED IDEAL FOR THIS PROJECT REFERENCES 1) A MUDDLE PRIMER, GREG PFISTER (SYS.11.01) 2) MICRO MUDDLE MANUAL, BRUCE DANIELS (SYS.11.03) 3) PRINCIPLES OF INTERACTIVE COMPUTER GRAPHICS, NEUMAN AND SPROULL ACKNOWLEDGEMENTS NOT BEING A MEMBER OF PROJECT MAC, BUT JUST A PERSON WHO APPEARED ON THE SYSTEM, I WOULD REALLY LIKE TO THANK EVERYBODY AT DMCG FOR TOLERATING ME ON THE SYSTEM. IN THIS RESPECT I WOULD LIKE TO THANK AL VEZZA FOR THE DIRECTORY AND THE CPU TIME. I WOULD ALSO LIKE TO THANK GREG PFISTER, BRUCE DANIELS, AND CHRIS REEVE, WHO REMAINED CIVIL, EVEN THOUGH I ALWAYS SEEMED TO LINK TO THEM AT INOPPORTUNE TIMES AND ASKED MANY QUESTIONS. PAGE 2 î DESCRIPTION AT THE PRESENT TIME MIGS IS STILL UNDER DEVELOPMENT, BUT IT IS QUITE USEABLE, AS DEMONSTRATED BY ITS USE ON THE NETWORK MUDDLE SOCKET BY SEVERAL STUDENTS HERE AT USC AND A RESEARCH GROUP IN THE EE DEPARTMENT WHO USES MIGS TO STUDY RADAR AMBIGUITY FUNCTIONS. AT THIS TIME MIGS IS ABLE TO SUPPORT FOUR OF THE MOST COMMONLY USED GRAPHICS TERMINALS; TEKTRONIX (4002, 4010), ARDS, GT42'S AND IMLACS. THE PACKAGE CONSISTS OF THREE MAIN PARTS. THE FIRST IS THE INITIATOR WHICH ASKS THE USER WHAT TYPE OF TERMINAL HE IS ON, AND LOADS THE APPROPRIATE FILES. THE SECOND PART IS THE ON LINE HELP SUBSYSTEM, WHICH EXPLAINS HOW TO USE MIGS TO A NEW USER. THE THIRD PART CONSISTS OF THE GRAPHICS PRIMITIVES AS WELL AS THE MORE COMPLEX DISPLAY SUBPROGRAMS. THESE FUNCTIONS WILL LET THE USER MOVE AND DRAW TO HIS HEARTS CONTENT; PERFORM CARTESIAN, POLAR, AND PARAMETRIC PLOTS OF A FUNCTION OF ONE VARIABLE. MIGS ALSO WILL LET THE USER PRODUCE A SURFACE PLOT OF A FUNCTION OF TWO VARIABLES WITH HIDDEN LINES REMOVED. A CONTOUR PLOTTER WILL BE ADDED SOON. SOME OF THE NEW DEVELOPMENTS THAT HAVE BEEN RELEASED TO GENERAL USE, ARE THE DISPLAY COMPILER AND DISPLAY PROCESSOR. THE DISPLAY COMPILER AND PROCESSOR WILL GIVE THE USER THE ABILITY TO CREATE PICTURES AND SUBPICTURES, AND THEN TRANSFORM THEM (I.E. ROTATION, TRANSLATION, AND SCALING). PAGE 3 CONTENTS PAGE CHAPTER 0. LOADING MIGS 0.1. LOADING MUDDLE AND MIGS 4 0.2. TENEX MUDDLE 4 CHAPTER 1. INITIALIZATION OF MIGS 1.1 DESCRIBING YOUR TERMINAL TO MIGS 5 1.2 USE OF THE HELP FUNCTION 5 CHAPTER 2. MIGS PRIMITIVES 2.1. MOVE AND DRAW 6 2.2. POINT 7 2.3. LINE 7 2.4. PLOTV AND PLOTVDSK 7 2.5. DSKIMAGE 8 2.6. CIRCLE AND ELIPSE 8 2.7. PAGE 8 2.8. MOVE3D AND DRAW3D 9 2.9. POINT3D 9 2.10. LINE3D 10 2.11. PLOTV3D 10 2.12. PROJ 11 2.13. SETORG AND SETPROJ 11 CHAPTER 3. PLOTTING FUNCTIONS 3.1. FNCTG 13 3.2. PARAG 14 3.3. POLRP 15 CHAPTER 4. SURFACE PLOTTING 4.1. SFXYP 16 4.2. MIJPL 17 4.3. M3D AND M3DSK 18 CHAPTER 5. THE DISPLAY COMPILER 5.1. MCELL 19 5.2. DISP 22 5.3. CALL 22 5.4. XLATE 23 5.5. SCALE 24 5.6. ROTZ 24 5.7. ROTX 25 5.8. ROTY 25 5.9. CREATING YOUR OWN TRANSFORMS 25 5.10. SETCLIP 26 APPENDICIES A.1 SOME EXAMPLES OF THE USE OF MIGS PRIMITIVES 27 A.2 EXAMPLES OF THE DISPLAY COMPILER AND PROCESSOR 28 PAGE 4 BODY CHAPTER 0 LOADING MIGS 0.1 LOADING MUDDLE AND MIGS IF YOU ARE ON AN "ITS" SYSTEM, DMS, SAY MUDDLE^K OR :MUDDLE TO DDT. THIS WILL LOAD A MUDDLE AND START IT RUNNING FOR YOU. ON "ITS" TO DELETE A CHARACTER USE RUBOUT. IF YOU ARE ON A TENEX, SAY MUDDLE OR MUDDLE.SAV TO THE EXEC. REMEMBER THAT ON TENEX, ^A IS USED TO DELETE A CHARACTER. ^S, ^G, ^D, AND ^L WORK THE SAME IN EITHER "ITS" OR TENEX, IN TENEX THE MEANING OF ^Z AND ^C ARE REVERSED. NOW THAT YOU HAVE A MUDDLE, THE NEXT THING IS TO LOAD MIGS. IF YOU ARE ON DM ("ITS"), SAY $ TO MUDDLE. IF YOU ARE USING THE TENEX AT USCECL TYPE MIGS.INIT">$ AT MUDDLE. IF YOU ARE ON ANOTHER TENEX THAT HAS MUDDLE AND MIGS, REPLACE "" WITH THE NAME OF THE DIRECTORY THAT MIGS IS IN. 0.2 TENEX MUDDLE THERE IS ONE SMALL DIFFERENCE IN MIGS FOR TENEX MUDDLE, AT THE PRESENT TIME. WHEN MIGSINT IS ASKING YOU WHAT KIND OF TERMINAL YOU ARE ON, YOU HAVE TO TYPE AN AFTER THE CHARACTER. THIS IS BECAUSE AT THIS TIME THERE ISN'T A TYI IN TENEX MUDDLE. MIGS LOADS IT OWN TYI RSUBR AT THE END OF MIGSINIT. PAGE 5 CHAPTER 1 INITIALIZATION OF MIGS 1.1 DESCRIBING YOUR TERMINAL TO MIGS WHEN MIGS STARTS TO RUN THE FIRST THING IT DOES IS ASK YOU WHAT TYPE OF TERMINAL YOU ARE USING. TO TELL MIGS, YOU TYPE ONE LETTER AT IT; 'A' IS FOR ARDS AND IMLACS, 'T' IS FOR TEKTRONIX, AND 'G' IS FOR GT42'S. AT THIS TIME YOU CAN ALSO TYPE 'H' AND INVOKE THE HELP SUBSYSTEM. MIGS WILL THEN LOAD THE RIGHT GRAPHICAL PRIMITIVES FOR YOUR TERMINAL, AND INFORM YOU THAT IT HAS DONE SO. NEXT IT WILL ASK IF YOU WANT THE DISPLAY COMPILER. THE DISPLAY COMPILER IS QUITE LARGE, SO IF YOU JUST WANT TO HACK AROUND AND PLOT FUNCTIONS YOU WONT NEED IT, BUT IF YOU WANT TO DO MORE COMPLEX THINGS LOAD IT. ONCE YOU DECIDE TYPE 'Y' FOR YES, OR 'N' FOR NO. AFTER A LITTLE WHILE MIGS WILL REPLY 'MIGS LOAD', NOW YOU ARE READY TO PLOT TO YOUR HEARTS CONTENT. IF YOU DECIDE THAT YOU WANT THE DISPLAY COMPILER AT SOME LATER TIME, OR WANT TO CHANGE TERMINALS TYPE $ AND REPEAT THE ABOVE. 1.2 THE HELP SUBSYSTEM THE MIGS HELP SUBSYSTEM IS AVAILABLE ANY TIME MIGS IS LOADED.î. WHEN MIGS IS BEING INITIALIZED IT MAY BE INVOKED BY TYPING A 'H' TO MIGS, AS I DESCRIBED ABOVE. AT ANY OTHER TIME TYPE $ AND YOU'LL GET THE HELP SUBSYSTEM. THIS SUBSYSTEM WILL GIVE YOU A A SHORT DESCRIPTION OF THE FUNCTION IN MIGS. YOU CAN TYPE HELP$ AND IT WILL LIST THE THINGS FOR WHICH IT HAS INFO. THEN YOU TYPE THE NAME OF THE FUNCTION YOU'RE INTERESTED IN FOLLOWED BY AN $, AND THE HELP SUBSYSTEM WILL DESCRIBE IT. THE DESCRIPTION IS OF THE FOLLOWING FORM: FUNCTION NAME, NUMBER OF ARGS., HOW TO USE IT. TO LEAVE THE HELP SUBSYSTEM TYPE RETURN$. PAGE 6 CHAPTER 2 MIGS PRIMITIVES BEFORE I GO ON I WOULD LIKE TO POINT OUT THAT THROUGHOUT THIS MANUAL I AM ASSUMING THAT THE ORIGIN IS AT THE LOWER LEFT CORNER OF THE SCREEN, AND THE UPPER RIGHT CORNER IS AT (1023,1023). IF YOU LIKE THE ORIGIN AT THE CENTER OF THE SCREEN READ HOW TO USE SETORG, SETPROJ, AND SETCLIP. 2.1 MOVE AND DRAW THIS SEEMS LIKE A GOOD PLACE TO START SINCE MOVING AND DRAWING THE BEAM AROUND ON THE SCOPE IS ABOUT THE MOST BASIC THING YOU CAN DO. THE FUNCTION MOVE TAKES TWO ARGUMENTS, THE X AND Y POSITION OF WHERE YOU WANT THE BEAM. THEN IT SET THE SCOPE IN GRAPHICS MODE AND MOVES THE BEAM THERE INVISIBLY. THE FUNCTION DRAW TAKES A X AND Y POSITION AND DRAWS (MOVES THE BEAM VISIBLY) FROM WHERE IT WAS TO POSITION YOU GAVE IT. SINCE MOVE SET THE SCOPE IN GRAPHICS MODE IT MUST BE CALLED BEFORE THE FIRST CALL TO DRAW, ALSO YOU SHOULDNT DROP OUT OF GRAPHICS MODE INîBETWEEN DRAWS. THE ARGUMENT TO MOVE AND DRAW MUST BE INTEGER AND SHOULD BE INSIDE THE SCREEN BOUNDARIES OR STRANGE THINGS WILL HAPPEN. I WILL NOW GIVE A COUPLE OF EXAMPLES ILLUSTRATING THE RIGHT AND WRONG WAY TO USE MOVE AND DRAW. EX 2.1.1 THE RIGHT WAY >;"THIS WILL DRAW A LINE FROM (100,100) TO (500,600)."$ >;"DRAWS A BIG SQUARE"$ EX 2.1.2 THE WRONG WAY ;"THIS WILL DROP OUT OF GRAPHICS MODE INîBETWEEN THE MOVE AND DRAW"$ >;" THERE MUST BE A MOVE BEFORE DRAW"$ PAGE 7 2.2 POINT THIS FUNCTION TAKES TWO ARGUMENTS THE X AND Y COORDINATES THEN DISPLAYS A POINT ON THE SCREEN. THE ARGUMENTS TO POINT MUST BE OF TYPE FIX AND SHOULD BE IN THE VISIBLE AREA OF THE SCREEN. EX 2.2.1 ;"PUT A POINT AT (500,500)"$ EX 2.2.2 <- .X 500>> 10>> > 599> )>>> ;"THIS WILL PRODUCE A PARABOLA AND AXES ON THE SCREEN WHEN USED."$ ;"LETS TRY IT"$ 2.3 LINE THE FUNCTION LINE DISPLAYS A LINE ON THE SCREEN, WHICH IS SPECIFIED BY ITS END-POINTS. THE FUNCTION TAKE 4 ARGUMENTS WHICH MUST BE FIXED. THE FIRST TWO ARE THE X AND Y COORDINATES OF THE FIRST END-POINT THE LAST TWO ARE X AND Y COORDINATES FOR THE SECOND END-POINT OF THE LINE SEGMENT YOU WANT TO DRAW. EX 2.3.1 ;"THIS WILL DRAW A RECTANGLE ON THE SCREEN. NOTICE THAT LINE DOESNT HAVE TO BE IN A FUNCTION OR A PROG."$ 2.4 PLOTV AND PLOTVDSK PLOTV IS USED TO PLOT TWO LISTS, VECTORS, OR UVECTORS AGAINST EACH OTHER. THE FIRST LIST (VECTOR,UVECTOR) IS USED AS THE X COORDINATES, AND THE SECOND IS USED AS THE Y COORDINATES. PLOTV MOVES THE BEAM TO THE FIRST PAIR OF COORDINATES AND DRAWS TO THE REST. THE ELEMENTS OF THE LISTS (VECTORS, UVECTORS) MUST BE OF TYPE FIX, AND THE LISTS MUST BE OF THE SAME LENGTH,OR YOU GET AN ERROR. PLOTVDSK IS IDENTICAL TO PLOTV IN HOW IT HANDLES ITS FIRST TWO ARGUMENTS, BUT IT TAKES A THIRD ARGUMENT A DSK CHANNEL TO WRITE ITS OUTPUT ON. YOU CAN VIEW THIS BY USING THE FUNCTION DSKIMAGE. EX 2.4.1 ;"THIS DRAWS THE RECTANGLE AGAIN"$ PAGE 8 2.5 DSKIMAGE DSKIMAGE IS USED TO DISPLAY A DISK FILE IN IMAGE MODE ON YOUR SCOPE. IT TAKES ONE OPTIONAL ARGUMENT, A STRING WHICH IS THE THE NAME OF THE DSK FILE YOU WANT TO DISPLAY. DSKIMAGE DEFAULTS TO ";M3D MIGPUT">. THIS FUNCTION IS USED IN CONJUNCTION WITH M3DSK OR PLOTVDSK, BUT CAN BE USED TO DISPLAY ANY FILE (NOTE IF IT CONTAINS A CONTROL-L IT WILL CLEAR THE SCREEN). EX 2.5.1 SUPPOSE THAT YOU HAVE A SURFACE PLOT PRODUCED BY M3DSK IN A FILE IN YOUR DIRECTORY NAMED FOO BAR. ;"THIS DISPLAYS FOO BAR FOR YOU"$ 2.6 CIRCLE AND ELIPSE CIRCLE TAKES FOUR ARGUMENTS OF TYPE FIX. THE FIRST TWO ARE THE X AND Y COORDINATES OF THE CENTER OF THE CIRCLE TO BE DISPLAYED, THE NEXT IS THE RADIUS OF THE CIRCLE, AND THE LAST IS THE NUMBER OF POINTS IN IT. BESIDES DRAWING CIRCLES, CIRCLE CAN BE USED TO GENERATE REGULAR POLYGONS. ELIPSE IS SIMILAR TO CIRCLE EXCEPT THAT IT TAKES FIVE ARGUMENTS AND DRAWS AN ELLIPSE. THE FIRST TWO ARGUMENTS ARE COORDINATES OF THE CENTER. THE NEXT TWO ARE THE LENGTHS OF THE X AND Y SEMI-AXIS RESPECTIVELY. THE LAST IS THE NUMBER OF POINTS IN THE ELLIPSE. IF THE THIRD AND FOURTH ARGUMENTS ARE EQUAL THEN ELIPSE WILL HAPPILY DRAW A CIRCLE. EX 2.6.1 ;" MAKES A CIRCLE AT THE CENTER OF THE SCREEN (500,500), WITH RADIUS OF 300, AND 100 POINTS IN IT"$ ;" THIS INSCRIBES A HEXAGON IN THE CIRCLE WE JUST DREW"$ EX 2.6.2 ;" PUT AN ELLIPSE AROUND THE THE CIRCLE AND HEXAGON THAT TOUCHES THE TOP AND BOTTOM OF THE CIRCLE."$ 2.7 PAGE IF YOU GET TIRED OF PUSHING THE ERASE OR THE FORM KEY ON YOUR TERMINAL WHEN YOU WANT WHATS ON THE SCREEN TO GO AWAY, YOU CAN USE PAGE AND GET THE SAME RESULTS. PAGE TAKES NO ARGUMENTS. IF YOU USE PAGE IN A PROGRAM AND ARE ON AN ARDS OR TEKTRONIX YOU SHOULD ALLOW ABOUT ONE SECOND BEFORE YOU DRAW AGAIN TO MAKE THE SCOPE HAPPY. NOTE THAT THIS IS USEFUL IN TENEX MUDDLE, WHICH DOESN'T KNOW HOW TO CLEAR THE SCREEN. EX 2.7.1 ;" WELL I GAVE AN EXAMPLE FOR EVERYTHING ELSE"$ PAGE 9 2.8 MOVE3D AND DRAW3D THIS IS THE START OF THE DESCRIPTION OF THE THREE DIMENSIONAL PRIMITIVES. THEY ARE SIMILAR TO THEIR TWO DIMENSIONAL COUNTERPARTS, EXCEPT THAT THEY TAKE A Z COORDINATE. ALSO THE 3D PRIMITIVES WILL WORK WITH ARGUMENTS OF THE TYPE FIX OR FLOAT. I WOULD LIKE TO POINT OUT AT THIS TIME THAT THE POSITIVE DIRECTION OF THE Z AXIS IS INTO THE SCREEN, AND Z = 0 IS AT THE SCREEN. THE FUNCTION MOVE3D SETS THE SCOPE IN GRAPHICS MODE AND MOVES THE BEAM INVISIBLY TO THE POINT YOU SPECIFY. MOVE3D TAKES THREE ARGUMENTS; THE X, THE Y, AND THE Z COORDINATE OF THE POINT. SINCE MOVE3D SETS THE SCOPE IN GRAPHICS MODE IT MUST BE CALLED BEFORE THE FIRST CALL TO DRAW3D. DRAW3D MOVES THE BEAM VISIBLY FROM WHERE IT IS TO THE COORDINATES THAT YOU GIVE IT. DRAW3D TAKES THREE ARGUMENTS, THEY ARE THE SAME AS THE ARGUMENT TO MOVE3D. BEFORE YOU CAN USE DRAW3D YOU MUST BE IN GRAPHICS MODE, AND DON'T DROP OUT OF GRAPHICS MODE INîBETWEEN CALLS TO DRAW3D. EX 2.8.1 >;"THIS WILL DRAW A TRIANGLE WITH ITS VERTICES AT (0,0,0),(100,200,300), AND (500,400,-300)"$ 2.9 POINT3D THIS FUNCTION TAKES THREE ARGUMENTS. THE ARE THE X, THE Y, AND THE Z COORDINATES OF A POINT TO DISPLAY ON THE SCREEN. POINT3D ENTERS GRAPHICS MODE DISPLAYS THE POINT AND THEN DROPS OUT OF GRAPHICS MODE WHENEVER IT IS INVOKED, SO IT IS SAFE TO USE AT ANY TIME. THE ONLY RESTRICTION IS THE PROJECTION OF THE POINT SHOULD BE VISIBLE. EX 2.9.1 .Z> > >>> )>>;" THIS WILL DRAW A SIN WAVE WHICH STARTS ON THE LEFT SIDE OF THE SCREEN AND HEADS OFF INTO THE DISTANCE UNTIL IT RUNS OUT OF POINTS."$ PAGE 10 2.10 LINE3D THE FUNCTION LINE3D WILL DISPLAY THE PROJECTION OF A LINE IN THREE SPACE ON THE SCREEN OF YOUR TERMINAL. LINE3D TAKES SIX ARGUMENTS, THEY ARE THE X, Y, AND Z COORDINATES OF THE TWO END-POINTS OF THE LINE. THE END-POINTS SHOULD BE ON THE VISIBLE PART OF THE SCREEN OR STRANGE THINGS WILL HAPPEN. LINE3D ENTERS AND LEAVES GRAPHICS MODE ITSELF SO IT CAN BE CALLED AT ANY TIME. EX 2.10.1 ;"THIS WILL DRAW A PYRAMID ON THE SCOPE."$ 2.11 PLOTV3D THIS FUNCTION IS QUITE SIMILAR TO ITS TWO DIMENSIONAL ANALOG, PLOTV. PLOTV3D TAKES THREE ARGUMENTS THEY MUST BE OF TYPE LIST, VECTOR, OR UVECTOR. THE FIRST ARGUMENT IS TAKEN AS THE X COORDINATES, THE SECOND IS THE Y COORDINATES, AND THE THIRD IS THE Z COORDINATES. THE LISTS, VECTORS, OR UVECTORS THAT ARE THE X, Y, AND Z COORDINATES MUST BE OF THE SAME LENGTH OR ELSE YOU WILL GET AN ERROR. EX 2.11.1 >$ ;"DRAW A CUBE WITH ONE CORNER AT (200,200,0) AND THE OPPOSITE CORNER AT (400,400,200)."$ PAGE 11 2.12 PROJ PROJ IS NOT A GRAPHICAL PRIMITIVE, BUT IS MIGS'S PROJECTION ROUTINE. I FIGURED THAT IT MIGHT BE OF SOME USE IN FUNCTIONS THAT A USER MIGHT WRITE SO I WILL DESCRIBE IT. PROJ TAKES FOUR ARGUMENTS. THE FIRST THREE ARE REQUIRED AND ARE THE X, Y, AND Z COORDINATES OF A POINT IN THREE SPACE. THE FOURTH ARGUMENT IS THE DISTANCE FROM THE SCREEN TO THE EYE AND IS OPTIONAL. THE DEFAULT EYE POSITION IS (512 512 1024), THAT IS THE CENTER OF THE SCREEN AND ABOUT 10 INCHES IN FRONT OF IT. THIS CAN BE CHANGED BY THE FUNCTION SETPROJ DESCRIBED IN 2.13. PROJ RETURNS A TWO ELEMENT LIST, WHICH IS THE X AND Y CO- ORDINATES OF THE POINT PROJECTED ON THE Z=0 PLANE. EX 2.12.1 >>;"NOTE THE USE OF THE SEGMENT TO MAKE POINT HAPPY"$ ;"DISPLAY A POINT AT (200,300,400)."$ 2.13 SETORG AND SETPROJ THE FUNCTIONS SETORG AND SETPROJ LET THE USER CHANGE THE ORIGIN AND THE EYE POSITION FOR PROJECTION RESPECTIVELY. BY THE USE OF THESE TWO FUNCTIONS YOU CAN MOVE THE ORIGIN TO THE CENTER OF THE SCREEN IF YOU DON'T LIKE IT IN THE LOWER LEFT CORNER. SETORG TAKES TWO OPTIONAL ARGUMENTS (DEFAULT IS 0), THEY ARE THE COORDINATES OF THE LOGICAL ORIGIN IN THE PHYSICAL COORDINATES OF THE TERMINAL YOU ARE USING. IF THE SCOPE YOU ARE USING IS A TEKTRONIX, THEN THE SCOPE'S COORDINATES RUN FROM 0 TO 1023 AND THE PHYSICAL ORIGIN IS AT THE LOWER LEFT (0,0). IF YOU THEN WANT THE LOGICAL ORIGIN AT THE CENTER OF THE SCREEN A SETORG OF 512,512 WOULD DO IT. IF YOU ARE ON AN ARDS OR IMLAC THE PHYSICAL ORIGIN IS AT THE CENTER OF THE SCREEN AND THE COORDINATES RUN FROM -511 TO 511. TO SHIFT THE COORDINATE SYSTEM TO WHAT THE TEKTRONIX USES, DO A SETORG OF -512,-512. WHEN YOU LOAD MIGS IT DEFAULTS TO THE LOGICAL ORIGIN AT LOWER LEFT OF THE SCREEN. SETPROJ TAKES THREE OPTIONAL ARGUMENTS; THE X AND Y COORDINATES OF THE EYE AND THE DISTANCE FROM THE EYE TO THE SCREEN. I FIND THAT THE CENTER OF THE SCREEN AND AN EYE DISTANCE OF 800 TO 1024 LOOKS BEST. IF THE LOGICAL ORIGIN IS AT THE LOWER LEFT CORNER THEN THE ARGUMENTS TO SETPROJ WOULD BE 512,512,1000. IF THE LOGICAL ORIGIN IS AT THE CENTER OF THE SCREEN THEN THE ARGS. WOULD BE 0,0,1000. PAGE 12 EX 2.13.1 FOR TEKTRONIX SCOPES ORIGIN AT THE LEFT $ ORIGIN AT CENTER $ EX 2.13.2 FOR ARDS AND IMLACS ORIGIN AT THE LOWER LEFT $ ORIGIN AT CENTER $ PAGE 13 CHAPTER 3 PLOTTING FUNCTIONS IN THIS CHAPTER I WILL DISCUSS THE FUNCTIONS THAT MIGS PROVIDES FOR PLOTTING FUNCTIONS OF ONE VARIABLE. THE NEXT CHAPTER WILL COVER SURFACE PLOTTING. AT THE MOMENT MIGS HAS THREE FUNCTIONS THAT CONCERN THEMSELVES WITH PLOTTING, THEY ARE FNCTG, PARAG, AND POLRP. RESPECTIVELY THEY PERFORM LINEAR, PARAMETRIC, AND POLAR PLOTS OF THE FUNCTION THEY ARE GIVEN. IF YOU HAVE ANY FUNCTIONS THAT YOU THINK ARE USEFUL LEAVE ME MAIL, AND I WILL SEE ABOUT ADDING THEM TO MIGS. ONE WORD OF WARNING, AT THE PRESENT TIME THE ORIGIN MUST BE AT THE LOWER LEFT CORNER FOR THE PLOTTING FUNCTIONS TO WORK CORRECTLY. THIS BUG WILL BE FIXED IN THE NEXT VERSION OF MIGS WHICH IS COMING SOON. 3.1 FNCTG THIS FUNCTION PRODUCES A LINEAR PLOT OF A FUNCTION OF ONE VARIABLE VERSUS THAT VARIABLE. FNCTG TAKES SIX ARGUMENTS, OF THESE THE LAST THREE ARE OPTIONAL. THE FIRST AND SECOND ARGUMENTS ARE THE LOWER AND UPPER LIMIT OF THE VARIABLE RESPECTIVELY (WHICH IS PLOTTED ALONG THE X AXIS). THIRD ARGUMENT MUST BE OF THE TYPE FUNCTION, OR SUBR, OR RSUBR. IT IS APPLIED TO THE VARIABLE AND PLOTTED ON THE Y AXIS. THE NEXT IS THE SCALE FACTOR. THIS IS A TWO ELEMENT LIST CONTAINING THE X AND Y SCALE. THE FIFTH IS A TWO ELEMENT LIST WHICH IS USED AS AN X,Y DISPLACEMENT OF THE PLOT. THE VALUE OF THIS LIST SHOULD BE (<* .5 <+ .XMAX .XMIN>> <* .5 <+ .YMAX .YMIN>>). THIS POINT IS MAPPED INTO THE CENTER OF THE SCREEN. THE SIXTH ARGUMENT IS THE NUMBER OF POINTS TO PLOT, IT MUST BE OF TYPE FIX AND THE DEFAULT IS SIXTY POINTS IF THE ABOVE SOUNDS COMPLICATED, JUST GIVE FNCTG THE FIRST THREE ARGUMENTS AND IT WILL DO THE REST (IT WILL AUTO-SCALE THE PLOT FOR YOU). IF YOU STILL WANT AUTO-SCALING BUT WANT TO CHANGE THE NUMBER OF POINTS MAKE THE FOURTH AND FIFTH ARGUMENTS TWO ELEMENT LISTS OF 0. FNCTG RETURNS A TEN ELEMENT LIST THAT HAS USEFUL INFO ABOUT THE PLOT IN IT. THIS IS PRINTED ON THE LEFT SIDE OF THE SCREEN UNLESS IT IS SNARFED UP BY THE FUNCTION WHICH CALLED FNCTG. PAGE 14 EX 3.1.1 >)> "THIS WILL PLOT THE FUNCTION F(X)=XCOS(X) FROM 0 TO 9"$ >$ ;"THIS WILL PLOT X**2 FOR X=-4 TO 4"$ EX 3.1.2 ;"THIS WILL PLOT THE FUNCTION BAR WITH 120 POINTS INSTEAD OF 60"$ EX 3.1.3 ;"THIS WILL PLOT BAR FROM -1 1, WITHOUT AUTO-SCALING AND WITH 100 POINTS"$ 3.2 PARAG THE FUNCTION, PARAG, PRODUCES A PARAMETRIC PLOT OF THE TWO FUNCTIONS, OR RSUBRS THAT PARAG IS GIVEN AS ARGUMENTS. PARAG TAKES 8 ARGUMENTS. THE FIRST FOUR ARE REQUIRED AND THE LAST FOUR ARE OPTIONAL. THE FIRST AND SECOND ARGUMENTS ARE THE LOWER AND UPPER BOUNDS OF THE PARAMETER RESPECTIVELY. THE NEXT TWO ARGUMENTS ARE THE ATOMS WHOSE GVAL ,OR LVAL ARE THE FUNCTIONS YOU WANT TO PLOT. THE FIFTH ARGUMENT IS THE NUMBER OF POINTS TO BE PLOTTED. IT MUST BE OF TYPE FIX AND THE DEFAULT IS 60 POINTS. THE NEXT ARGUMENT SELECTS THE SCALING MODE .IT MUST BE A STRING. PARAG HAS THREE SCALING MODES, "SAS",SINGLE AUTO-SCALE SCALE THE PLOT SO ONE AXIS WILL FILL THE SCREEN. THIS IS THE DEFAULT MODE. IN "DAS",DOUBLE AUTO-SCALING MODE, THE PLOT WILL BE SCALED SO IT FILLS THE SCREEN ALONG BOTH THE X AND Y AXES. ONE SHOULD NOTE THAT THIS MODE DOES NOT PRESERVE THE ANGLE BETWEEN LINES, I.E. AN ELLIPSE WILL BE STRETCHED INTO A CIRCLE. THE LAST MODE IS "NAS", NO AUTO-SCALE. IN THIS MODE YOU MUST USE THE NEXT TWO ARGUMENTS, THESE ARE BOTH TWO ELEMENT LISTS. THE FIRST ONE IS THE SCALE FACTORS FOR THE PLOT (THE X SCALE AND THE Y SCALE). THE LAST ONE IS AN X AND Y DISPLACEMENT FOR THE PLOT . THIS IS A TWO ELEMENT LIST ALSO. I WOULD RECOMMEND THAT YOU STICK WITH "SAS" AND "DAS" MODES. EX 3.2.1 >>$ >>;"MAKE TWO FUNCTIONS TO PLAY WITH" ;"PLOT A SPIRAL"$ EX 3.2.2 A B 100>;"HERE IS A SIRO NEIL" EX 3.2.3 ;" THIS WILL PLOT A AGAINST LOG WITH 200 POINTS AND WILL EXPAND THE PLOT TO FULL SCALE ALONG BOTH AXES. PAGE 15 3.3 POLRP THIS FUNCTION WILL PRODUCE A POLAR PLOT OF THE FUNCTION OR RSUBR THAT YOU GIVE IT. POLRP TAKES SEVEN ARGUMENTS, OF WHICH THE FIRST THREE ARE REQUIRED AND THE REST ARE OPTIONAL. THE FIRST TWO ARGUMENTS ARE THE LOWER AND UPPER LIMITS ON THETA RESPECTIVELY. THE NEXT ARGUMENT IS THE ATOM WHOSE GVAL IS THE FUNCTION YOU WANT PLOTTED. THE LAST FOUR ARE ;THE NUMBER OF POINTS, THE MODE, SCALE, AND THE X AND Y DISPLACEMENT. THESE ARGUMENTS ARE THE SAME AS THE LAST FOUR ARGUMENTS OF PARAG. AS A MATTER OF FACT, POLRP CALLS PARAG AND GIVES IT THE PARAMETRIC FORM OF YOUR POLAR FUNCTION. EX 3.3.1 ;"THIS WILL PLOT A=X*COS(X) IN POLAR COORDINATES, FROM THETA EQUAL TO 0.0 TO 9.0 WITH 60 POINTS AND SINGLE AUTO-SCALING."$ PAGE 16 CHAPTER 4 SURFACE PLOTTING THIS CHAPTER DESCRIBES HOW TO USE MIGS'S BUILT IN SURFACE PLOTTING ABILITY. THERE ARE FOUR FUNCTIONS FOR SURFACE PLOTTING. THEY ARE SFXYP, MIJPL, M3D, AND M3DSK. SFXYP WILL PLOT A FUNCTION OF TWO VARIABLES FOR YOU. MIJPL WILL PLOT A SQUARE MATRIX , AND M3D(M3DSK) IS USED BY BOTH OF THESE FUNCTIONS TO DO THE HIDDEN LINE ELIMINATION AND THE DISPLAY. AT THE PRESENT TIME THE ORIGIN MUST BE AT THE LOWER LEFT CORNER FOR SURFACE PLOTTING. NOTE THAT IF YOU ARE ON AN IMLAC, DON'T TRY TO HAVE A DISPLAY OF MORE THAN 37X37 VECTORS OR YOU WILL RUN OUT OF CORE. 4.1 SFXYP THIS FUNCTION PLOTS FOR YOU ANY FUNCTION OF TWO INDEPENDENT VARIABLES (I.E. Z=F(X,Y)). IT WILL AUTO-SCALE THE PLOT TO WHAT IT THINKS IS THE BEST POSSIBLE DISPLAY. THE USER HAS THE OPTION OF PICKING THE RESOLUTION, AND WHETHER THE OUTPUT GOES TO YOUR TERMINAL OR DISK(THIS OPTION IS RARELY USED NOW THAT THE DISPLAY COMPILER IS WORKING). THE CALL TO SFXYP IS . THE FIRST 5 ARGUMENTS ARE REQUIRED THE REST ARE OPTIONAL. XL AND XH ARE THE LIMITS ON X (LOW AND HIGH). THE Y LIMITS ARE YL , YH. THE X AND Y LIMITS CAN BE FIXED OR FLOATS. FUNCT IS THE ATOM WHOSE GVAL(LVAL) IS THE FUNCTION, RSUBR, FSUBR, OR SUBR THAT YOU WANT TO PLOT. PARAM IS AN OPTIONAL LIST OF EXTRA ARGUMENTS FOR THE FUNCTION. IF THE FUNCTION DOESN'T NEED ANY ,BUT YOU WANT TO HAVE MORE ARGUMENTS TO SFXYP (SET THE RESOLUTION TO SOMETHING OTHER THAT THE DEFAULT) MAKE IT AN EMPTY LIST. RES IS THE RESOLUTION THAT WILL BE USED. THE DEFAULT IS 60. THIS MEANS THAT THE FUNCTION IS PLOTTED ON A 60X60 GRID. RES MUST BE A FIX, AND THE TIME THAT SFXYP TAKES GOES UP AS THE SQUARE OF RES, SO BE FOREWARNED. DSK DETERMINES WHETHER SFXYP DOES ITS OUTPUT TO THE TERMINAL. IT CAN BE A TRUE (ANYTHING THAT ISN'T FALSE) ,OR A FALSE (THIS IS THE DEFAULT). IF IT IS TRUE THE OUTPUT GOES TO A DISK FILE, AND THE LAST ARG BETTER BE A STRING WHICH IS THE NAME OF THE FILE. IF YOU DO THIS YOU CAN LOOK AT THIS FILE WITH DSKIMAGE. PAGE 17 EX 4.1.1 ) (Y1 <+ .Y 1.0E-7>) (R <* .Y1 .Y1>>>)) > .R>>$ ;"TRY THIS IT IS PRETTY"$ ;"THIS IS FOR AN IMLAC" EX4.1.2 ;"THIS WILL PLOT FOOBAR ON A 100X100 GRID." 4.2 MIJPL THIS FUNCTION TAKES AN N BY M MATRIX AND DOES A SURFACE PLOT WITH HIDDEN LINE ELIMINATION. BY MATRIX I MEAN AN OBJECT OF THE FORM ]>]>. THE INNER VECTOR IS THE ROW OR X AXIS OF THE PLOT. THE OUTER VECTOR WOULD BE THE COLUMNS OR THE Y DIRECTION OF THE PLOT. IF YOU DON'T UNDERSTAND WHAT I SAID LOOK AT THE EXAMPLES OR READ DECL SYNTAX (I THINK ITS IN .INFO.). IF YOU STILL DON'T ASK ME FOR HELP. THE Z IS THE VALUE OF THE MATRIX ELEMENT. THE CALL TO MIJPL LOOKS LIKE . ALL BUT THE FIRST ARGUMENT ARE OPTIONAL. MATRIX IS THE TYPE OF MUDDLE OBJECT THAT I WAS JUST TALKING ABOUT. DSK CAN BE AN ATOM OR FALSE, ITS DEFAULT IS FALSE. IF DSK IS TRUE THEN MIJPL WILL PUT ITS OUTPUT ON DISK (AS I SAID BEFORE IT IS MUCH BETTER TO MAKE AN MCELL OUT OF IT AND PPRINT IT OUT). IF YOU DO THIS YOU CAN LOOK AT THE PLOT WITH DSKIMAGE. FILE IS A STRING THAT IS THE NAME OF THE DSKFILE YOU WANT. IT DEFAULTS TO ;M3D MIGPUT. EX 4.2.1 ;"THIS IS WHAT I MEANT BY MATRIX"$ $ ;"I DON'T KNOW WHAT THIS LOOKS LIKE BUT IT MIGHT BE INTERESTING. <1<1 .MAT>> IS THE POINT THAT IS CLOSEST TO YOU AND THE FARTHEST TO THE LEFT."$ PAGE 18 4.3 M3D AND M3DSK THESE TWO FUNCTIONS DO THE ACTUAL HIDDEN LINE ELIMINATION FOR SFXYP AND MIJPL. M3D SENDS ITS OUTPUT TO YOUR TERMINAL AND M3DSK OUTPUTS TO A DSK FILE. BOTH FUNCTIONS HAVE THE SAME FIRST ARGUMENT MATRIX. THIS IS A VECTOR OF VECTORS OF TYPE FIX.THE VALUES OF THE FIXES SHOULD BE FROM 0 TO 420, OR YOU WILL DRAW THE BEAM OFF THE SCOPE AND WEIRD THINGS WILL HAPPEN. THE CALL TO M3D LOOKS LIKE WHERE MATRIX IS THE MUDDLE OBJECT I DESCRIBED ABOVE. THE CALL FOR M3DSK IS FILE IS AN OPTIONAL ARGUMENT THAT DEFAULTS TO <-SNAME->;M3D MIGPUT . BE CAREFUL IF YOU GIVE IT A FILE NAME BUT NO SNAME IT WILL USE WHAT EVER '$' WILL RETURN. DSKIMAGE CAN BE USED TO VIEW THE FILE ON YOUR TERMINAL EX 4.3.1 >>>> >> >>>> ;"THIS WILL BUILD THE MATRIX"$ $ EX 4.3.2 ;"THIS WILL WRITE OUT WHAT M3D DREW IN THE ABOVE EXAMPLE TO DSK:ZORCH;GLEEP 1"$ ;"THIS WILL DISPLAY IT ON YOUR TERMINAL"$ PAGE 19 CHAPTER 5 THE DISPLAY COMPILER AND PROCESSOR THIS IS THE PART OF MIGS THAT MAKES IT DIFFERENT FROM THE AVERAGE GRAPHICS PACKAGE. BY USE OF THE SOFTWARE DISPLAY COMPILER AND PROCESSOR MIGS CAN EMULATE MANY OF THE FEATURES OF THE E&S LDS-1.ONCE ONE HAS DEFINED A PICTURE OR MCELL AS I CALL IT, YOU CAN TRANSLATE IT, ROTATE IT, SCALE IT, AND MAKE UP YOUR OWN TRANSFORMS TO APPLY TO THE MCELL IN 2 OR 3 SPACE. ALSO ONCE DEFINED AN MCELL CAN BE USED AS A SUBPICTURE IN ANY OTHER MCELL. THIS SUBPICTURING AND TRANSFORMING CAN BE CARRIED OUT TO ANY LEVEL. THAT IS EXCEPT INFINITE(WHICH WOULD GIVE MUDDLE A BAD STOMACH ACHE, SO MIGS DOESNT LET YOU DO THAT.). THIS FEATURE IS GOOD FOR CATCHING INFINITE RECURSION, THAT HAPPENED BY MISTAKE.THE ONLY REAL LIMIT OF WHAT YOU CAN DO WITH MIGS IS YOUR IMAGINATION. NOTICE THAT IN THIS SECTION OF THIS MANUAL, YOU DON'T HAVE TO WORRY ABOUT DRAWING OFF OF THE VISIBLE PART OF THE SCREEN, WHEN USING THE DISPLAY COMPILER. THAT IS BECAUSE THE INTERNAL (SOFTWARE) CLIPPING-DIVIDER TAKES CARE OF ANYTHING THAT ISN'T VISIBLE. ALSO ALL OF THE TWO DIMENSIONAL PRIMITIVES WILL HANDLE THREE DIMENSIONAL DATA CORRECTLY. WHEN USING THE DISPLAY COMPILER THE ARGUMENTS TO THE PRIMITIVES CAN BE FIXED OR FLOATS. 5.1 MCELL THE FUNCTION MCELL MAKES AN MCELL (PICTURE) FOR YOU AND THEN RETURNS "DONE". THIS WILL SOON BE CHANGED TO THE ATOM LESS TRAILER, WHOSE LVAL IS THE MCELL THAT WAS JUST CREATED. MCELLS ARE HIDDEN ON THE OBLIST MCELLS(THE-NAME-YOU-GAVE-IT!-MCELLS). LET ME EXPLAIN THE CALL TO MCELL AND IT WILL BECOME CLEAR HOW TO USE IT. > NAME IS THE ATOM WHOS PNAME IS THE NAME OF THE MCELL TO BE CREATED. THE NEXT TWO ARGUMENTS DON'T DO ANYTHING YET ,BUT THEY BETTER BE THERE OR ELSE ERROR. THERE HAVE TO BE LISTS (AT THE PRESENT TIME EMPTY ONES ARE FINE). ONE OF THE LISTS WILL MOST PROBABLY BE THE COLOR OF THE MCELL, WHEN COLOR GRAPHS TERMINALS BECOME AVAILABLE. DIMENSION IS A TRUE(ATOM) OR FALSE. IF IT IS TRUE THEN THE MCELL IS THREE DIMENSIONAL, IF IT IS FALSE THE MCELL IS TWO DIMENSIONAL. BLANK IS A TRUE OR FALSE. IF IT IS TRUE THE MCELL WILL NOT BE VISIBLE WHEN YOU DISPLAY IT. BODY IS THE MOST INTERESTING ARG TO THIS FUNCTION. IT CAN BE ANY MUDDLE OBJECT OR OBJECTS. MCELL REALLY DROPS INTO ITS OWN EVAL(LIKE THE ONE THAT YOU ARE IN, WHEN IN THE NORMAL MUDDLE READ EVAL PRINT LOOP.) IN THIS ENVIRONMENT ALL THE MIGS PRIMITVES PUT THEIR OUTPUT INTO THE MCELL. BECAUSE OF THIS IT'S A GOOD IDEA TO HAVE SOME MIGS PRIMITIVES IN THE BODY OF THE CALL TO MCELL, OR YOU WILL GET AN MCELL WITH NO DATA IN IT. PAGE 20 EX 5.1.1 ) (T .8PI) (DT ) (SF )) > > <* .SF .T > <- 10000 <* 20 .SF .T>> >> > 0> )> >> >;" I KNOW THAT THIS EXAMPLE IS HARD TO UNDERSTAND, BUT I WILL EXPLAIN IT IN THE REST OF THE CHAPTER. I WANTED TO SHOW OFF SOME OF THE POWER OF MCELL. I AM ASSUMING THAT RRS;TEST GRAPHS HAS BEEN FLOADED."$ EX 5.1.2 <> >;"THIS WILL CREATE AN MCELL CALLED TRIANGLE, WITH A TRIANGLE IN IT. NOTE THAT IT IS TWO DIMENSIONAL NOT LIKE THE LAST ONE" IT ISN'T NECESSARY TO UNDERSTAND WHAT I AM GOING TO SAY NEXT TO BE ABLE TO USE THE DISPLAY COMPILER AND PROCESSER. FOR THE HACKERS THAT WANT TO KNOW WHAT AN MCELL(MUDDLE OBJECT) IS I'LL DESCRIBE IT NOW. AN MCELL IS AN OBJECT OF PRIMTYPE LIST AND TYPE MCELL. THE DECL FOR IT IS ] [REST ]>] >. THE FIRST FIX IN <2<2<5 .DECL>>> IS THE OP-CODE FOR THE DISPLAY PROCESSOR. THE REST OF IT IS DEPENDENT ON THE OP-CODE AND WHETHER IT IS A 2 OR 3 DIMENSIONAL MCELL. SOME OF THE OP-CODES ARE GIVEN BELOW OPCODE MNEMONIC ____________________ 0 MOVE 1 DRAW -1 CALL 2 SETPROJ 3 SETORG 4 SETCLIP 5 PAGE 6 HCOPY 7 DASH-ON 8 DASH-OFF PAGE 21 EX 5.1.3 IF YOU ARE STILL INTERESTED HERE IS WHAT MCELL MADE FOR TRIP AND C ) (-1 C!-MCELLS ) . . . (-1 C!-MCELLS ))> NOW THAT YOU KNOW WHAT A MCELL IS, I SHOULD SHOW WHAT TO DO ONCE YOU MAKE ONE. PAGE 22 5.2 DISP THIS FUNCTION IS USED TO DISPLAY AN MCELL. BESIDES DISPLAYING AN MCELL YOU CAN APPLY ALL THE TOP LEVEL TRANSFORMS YOU WANT. I WILL TALK ABOUT TRANSFORMS A LITTLE LATER IN THIS MANUAL, SO BEAR WITH ME A LITTLE LONGER. THE INCANTATION FOR DISP IS <-TRANS1-> ... <-TRANSN->>. <-MCELL-> IS THE PNAME OF THE ATOM ,LESS TRAILER (!-MCELLS), WHOS LVAL IS THE MCELL. <-TRANS1-> THROUGH <-TRANSN-> ARE THE OPTIONAL TRANSFORMS TO APPLY TO THE MCELL. EX 5.2.1 ;"THIS WILL DISPLAY THE 2 DIMENSIONAL TRIANGLE I MADE WHEN I WAS DISCUSSING THE MCELL FUNCTION. NOTICE THAT I DIDNT HAVE TO TELL DISP THAT IT WAS 2D, BECAUSE THAT INFORMATION IS CONTAINED IN THE MCELL." EX 5.2.2 ;"CLEAR THE SCREEN"$ >>;"DISPLAY THE TRIANGLE AGAIN, BUT ROTATE IT 45 DEGREES"$ EX 5.2.3 ) (2PI 6.28)) ;"CLEAR THE SCREEN" ;"WAIT" >>>;"DISPLAY IT AND ROTATE IT BY T+DT." ;"SLEEP FOR 2 SECONDS,SO YOU CAN LOOK AT IT." )>>;"IF T<= 2PI THEN DO IT AGAIN" EX 5.2.4 >>;" DISPLAY THE 'TRIP' MCELL THAT WE MADE EARLIER. ROTATE IT ABOUT THE Y AXIS AND TRANSLATE IT TO 500,350,50."$ 5.3 CALL CALL IS THE FUNCTION THAT ONE WOULD USE TO INVOKE A SUBPICTURE(ANOTHER MCELL),WHILE YOU ARE CREATING AN MCELL. THE USE OF CALL IS VERY SIMILAR TO DISP, EXCEPT IT IS USED IN AN MCELL. THE MCELL THAT YOU CALL DOESNT HAVE TO BE DEFINED, UNTIL YOU DISPLAY THE MCELL THAT THE CALL IS IN. THE APPLICATION OF CALL LOOKS LIKE <-TRANS1-> ... <-TRANSN-> >. WHERE <-MCELL-> IS THE ATOM (LESS TRAILER) WHOS LVAL IS THE MCELL YOU WANT. <-TRANS1-> THROUGH <-TRANSN-> ARE THE OPTIONAL TRANSFORMS TO APPLY TO THE MCELL. PAGE 23 EX 5.3.1 <> ;"CALL TRIANGLE WITH NO TRANSFORMS" >;"CALL TRIANGLE AND TRANSLATE IT 300 ,10 SCREEN UNITES." ;"MOVE IT AROUND THE ORIGIN" ;"MAKE IT 1/4 THE SIZE " >;"ROTATE IT 30 DEGREES" ;"MOVE IT TO 300,200">>$ ;"LETS SEE IT" 5.4 XLATE THIS IS THE START OF WHERE I WILL DESCRIBE THE TYPE OF TRANSFORMATIONS THAT YOU CAN APPLY TO AN MCELL, SO I BETTER DESCRIBE THE TRANSFORMATION SYSTEM THAT I USE. THE METHOD, THAT I USE, IS HOMOGENEOUS COORDINATES. IF YOU AREN'T SURE WHAT THAT IS I WOULD RECOMMEND THAT YOU READ ABOUT IT IN PRINCIPLES OF INTERACTIVE COMPUTER GRAPHICS BY NEUMAN AND SPROULL. FOR A 3D POINT I USE A FOUR ELEMENT ROW VECTOR. A 2D POINT IS A THREE VECTOR. THE LAST ELEMENT IN THE VECTOR IS THE SCALE FACTOR, WHICH MIGS ALWAYS KEEPS EQUAL TO ONE. A TRANSFORM IS A 4X4 MATRIX FOR A THREE DIMENSIONAL POINT, AND A 3X3 MATRIX IF THE POINT IS 2D. THE VECTOR IS ALWAYS ON THE LEFT SIDE OF THE MATRIX DURING MULTIPLICATION. MATRICES ARE CONCATENATED BY MY MATRIX MULTIPLIER FOR COMPOUND TRANSFORMATIONS. THE COMPOUND TRANSFORMATIONS ARE SAVED ON AN INTERNAL STACK IN MIGS, SO THEY DON'T HAVE TO BE RECALCULATED WHEN YOU POP UP A LEVEL IN SUBPICTURES. THIS WAS MEANT FOR THE HACKER THAT WAS INTERESTED IN HOW MIGS HANDLED THIS.YOU DON'T HAVE TO PAY ANY ATTENTION TO THIS IF YOU ARE JUST INTERESTED IN USING MIGS TO DRAW PRETTY PICTURES. XLATE IS THE TRANSFORM THAT YOU USE TO MOVE THE DISPLAY OF AN MCELL TO A DIFFERENT LOCATION ON THE SCOPE. XLATE LIKE ALL OF THE TRANSFORMS CAN BE USED IN DISP TO CAUSE A TOP LEVEL TRANSFORM TO BE APPLIED TO THE MCELL( PICTURE ), OR IN A CALL TO A SUBPICTURE. THE CALL TO XLATE LOOKS LIKE FOR A TWO DIMENSIONAL MCELL. FOR A 3D MCELL IT IS . THE ARGUMENTS CAN BE FIX OR FLOAT. ACTUALLY ANYTHING THAT EVALS TO A FIX OR FLOAT. X IS THE HORIZONTAL DISPLACEMENT AND Y IS THE VERTICAL. Z IS ONLY USED IN 3D MCELLS. IT IS THE DISPLACEMENT INTO AND OUT OF THE SCREEN. ITS DEFAULT VALUE IS 0 (REMEMBER PLUS Z IS INTO THE SCREEN). PAGE 24 EX 5.4.1 >;"DISPLAY TRIP AND MOVE ITS CENTER TO 500,400,25. THAT IS THE CENTER OF THE SCREEN AND 25 UNITS IN TO IT"$ <> ;"MAKE A 2D MCELL" . . . >>;"CALL AND TRANSFORM THE SUBPICTURE TRIANGLE"$ 5.5 SCALE SCALE DOES EXACTLY WHAT ITS NAME IMPLIES. YOU CAN ADJUST THE X,Y, AND Z SIZE OF AN MCELL TO ANYTHING YOU WANT. IF ONE OF THE SCALE FACTORS IS LESS THAN ONE THEN THE MCELL IS SQUASHED ALONG THAT AXIS. IF IT IS GREATER THAN ONE THEN THE MCELL IS EXPANDED ALONG THAT AXIS. IF THE SCALE FACTOR IS ONE THEN NOTHING IS DONE. THE CALL TO SCALE LOOKS LIKE . WHERE X IS THE X COMPONENT OF THE SCALE FOR THE MCELL TO BE DISPLAYED.THE Y AND Z COMPONENTS ACT LIKE THE X COMPONENT BUT ARE FOR THE Y AND Z AXIS. Z IS USED IF THE MCELL IS THREE DIMENSIONAL. X,Y, AND Z CAN BE ANYTHING THAT EVALS TO A FIX OR A FLOAT. IF Y OR Z ISN'T GIVEN THEY WILL DEFAULT TO THE VALUE OF X. IF Z IS GIVEN IN A 2D MCELL IT IS IGNORED. EX 5.5.1 >;"DISPLAY THE TRIANGLE AGAIN, BUT SCALE THE WHOLE WORLD TO ONE HALF ITS SIZE" 5.6 ROTZ THIS TRANSFORM IS USED TO ROTATE AN MCELL ABOUT THE Z OF THE SCOPE. BECAUSE THE POSITIVE Z AXIS POINTS INTO THE SCREEN A POSITIVE ROTATION MOVES CLOCKWISE. THE ARGUMENT TO ROTZ IS IN RADIANS AND MUST BE OF TYPE FLOAT. ROTZ IS THE LAST OF THE TRANSFORMS ,SO FAR LISTED THAT WILL WORK ON TWO OR THREE DIMENSIONAL MCELLS. THE CALL TO ROTZ IS , WHERE THE LVAL OF T IS A FLOAT. EX 5.6.1 ;"CENTER IT AT THE ORIGIN." >;"ROTATE IT 45 DEGREES" ;PUT IT AT THE CENTER OF THE SCREEN">$ PAGE 25 5.7 ROTX ROTX IS QUITE SIMILAR TO ROTZ, EXCEPT THAT IT ONLY WORKS ON THREE DIMENSIONAL MCELLS. ROTX WILL ROTATE AN MCELL ABOUT THE X AXIS. ITS ARGUMENT IS A FLOAT WHO IS THE ANGLE IN RADIANS THAT YOU WANT TO ROTATE THE MCELL BY. 5.8 ROTY THIS TRANSFORM IS IDENTICAL TO ROTX AND ROTZ, BUT IT PERFORMS THE ROTATION ABOUT THE Y AXIS. AGAIN ROTY'S ARGUMENT IS OF TYPE FLOAT AND IS THE ANGLE IN RADIANS. AT THIS TIME YOU SHOULD BE ABLE TO UNDERSTAND EXAMPLE 5.1, THE TRIP MCELL. 5.9 CREATING YOUR OWN TRANSFORMS A TRANSFORM IS A FUNCTION OR RSUBR THAT RETURNS A 3X3 MATRIX IF IT IS A 2D MCELL OR A 4X4 MATRIX IF ITS A 3D MCELL. THE DATA STRUCTURE FOR THIS MATRIX IS #DECL ((MATRIX) >). THE TWO FIXES ARE THE DIMENSION OF THE MATRIX. THE FLOATS ARE THE MATRIX ELEMENTS. I WILL NOW GIVE TWO EXAMPLES THAT WILL MAKE WHAT I JUST SAID MUCH CLEARER. THE FIRST ONE IS THE XLATE TRANSFORM IN MIGS. EX 5.9.1 ) (Y ) (Z )) ;"TRUE IF THE MCELL 3D" [4 4 [1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 .X .Y .Z 1.0]]) (T ;"MUST BE 2D" [3 3[1.0 0.0 0.0 0.0 1.0 0.0 .X .Y 1.0]])>> FOR THE SECOND EXAMPLE I WILL PRESENT THE ZOOM TRANSFORM. THIS TRANSFORM ONLY WORKS ON 3D MCELLS. IT IS THE ONE THAT I FORGOT WHEN I WROTE MIGS. EX 5.9.2 0.0 0.0 0.0 1.0]]> PAGE 26 5.10 SETCLIP THIS FUNCTION IS USED TO SET THE WINDOW FOR THE CLIPPING-DIVIDER. THE CLIPPING-DIVIDER WILL SOON BE CHANGED TO FIX A KNOWN BUG, IF THE OBJECT IS BEHIND YOU IT WILL TURN INSIDE OUT AND BE VISIBLE ON THE SCREEN. SO WHEN THE CLIPPING-DIVIDER IS FIXED, SETCLIP WILL MOST LIKELY BE CHANGED. THEREFORE, THIS DESCRIPTION IS ONLY TEMPORARY. THE CALL TO SETCLIP IS $. ALL OF THE ARGUMENTS ARE OPTIONAL. IT DEFAULTS A WINDOW THAT IS THE BOX [0,0 0,1023 1023,1023 1023,0]. LX IS THE LEFT LIMIT, RX IS THE RIGHT LIMIT, BY IS THE BOTTOM OF THE VISIBLE SCREEN, AND TY IS THE TOP. EX 5.10.1 ;"THE ORIGIN IS AT THE LOWER LEFT CORNER AND THE WINDOW IS THE WHOLE SCREEN"$ ;"THE ORIGIN IS AT THE CENTER OF THE SCREEN AND THE WINDOW IS THE WHOLE SCREEN"$ PAGE 27 APPENDICIES A.1 SOME EXAMPLES OF THE USE OF MIGS PRIMITIVES A.1.1 )) 1000000.0>> 314.15900>> > ;"DELTA T IS PICKED AT RANDOM" >>> >) .T>> >) .T>> !>> >>>) .X> >>>) .Y>> ;"PLOTV IS USED TO PLOT THE PATTERN" >> A.1.2 > > .INK>> > .INK>> > .INK>> > .INK>> > 0> )> > > 0 > > 0>>> PAGE 28 A.2 EXAMPLES OF THE DISPLAY COMPILER AND PROCESSOR A.2.1 THIS EXAMPLE CREATES AN OBJECT (I CALL POLY-THING) AND THEN ROTATES AND DISPLAYS IT. ;"HAS A HEXAGON CENTERED ON 3 LINES THAT ARE PERPENDICULAR TO EACH OTHER." > ;"LINE WHEN USED IN THE DISPLAY COMPILER CAN BE USE FOR 2 OR 3 DIMENSIONS" "MAKE A DUMBBELL OUT OF TWO HEXAGONS AND A LINE" > >> ;"STICK THREE DUMBELLS TOGETHER TO MAKE A POLY-THING" > > > ;"IF YOU ARE ON AN IMLAC" ;"MOVE THE ORIGIN TO THE CENTER OF THE SCREEN" >> > 6.28> )> >>$ PAGE 29  ;"STICK THREE DUMBELLS TOGETHER TO MAKE A POLY-THING" > > > ;"IF YOU ARE ON AN IMLAC" ;"MOVE THE ORIGIN TO THE CENTER OF THE SCREEN"