A.N.A.L.O.G. ISSUE 16 / FEBRUARY 1984 / PAGE 119

Solid States

A 3D OBJECT PLOTTING SYSTEM

24K Cassette or 32K Disk

by Tom Hudson

Most people who are familiar with the Atari personal computers will agree that their graphics are superior to any other computer in their price range. By using the Atari’s high-resolution GRAPHICS 8 mode, one can produce very respectable images on the video screen. Combine this ability with Atari 1020 printer/plotter hard-copy, and you’ve got an excellent, low-cost graphics machine.

This article presents a program which lets you show three-dimensional objects on the screen or print them out on a 1020 plotter. You can view the objects from any angle, with true perspective. If you like, object data can be stored on cassette or disk for future use.

The basics of 3-D.

In order to describe any object in our three-dimensional world, we must give at least three coordinates. These coordinates are usually labeled X (length), Y (width) and Z (height). This 3-D program is no exception. When you want to show an object, you must break it down into a number of points. Each point has its own set of X, Y and Z coordinates, which tells the computer where the point is located in space.

In addition to the locations of the points, we must tell the computer how these points are connected to form the sides of the object. The final result will be a “wire-frame” graphic representation of the object (so called because the object looks like it is constructed out of thin wires strung between the individual points of the object). Figure 1 shows the wire-frame representation of a pyramid.

The pyramid in Figure 1 is made up of five points (labeled 1-5) and eight lines. Let’s see how we find the coordinates of the points of this pyramid. First we must draw a top view of the pyramid. A piece of graph paper is best for this. Draw two perpendicular lines on the paper as in Figure 2. Label the horizontal line X, the vertical line Y and number the lines as shown. These will be the X and Y axes, the first two coordinates in the X-Y-Z group.

Next, draw the top view of the 3-D object and number each point where two or more lines intersect. Figure 3 shows the top view of our pyramid with its five points labeled.

Now draw another set of axis lines and label the horizontal line X and the vertical line Z. This set of axes will be used to draw a side view of the object in order to get the height coordinate (Z) for each point. Figure 4 shows the X-Z axes with the side view of our pyramid. Note that points 2 and 5 are at the same location on the side view, as are points 3 and 4. This is because they have the same X and Z locations.

Now that we’ve drawn our pyramid, we can write down the coordinates for each point. First let’s find the coordinates for point 1. To find the X coordinate, we can look at either Figure 3 or Figure 4. In either case, the X coordinate for point 1 is 0. To find the Y coordinate, we look at Figure 3. The Y coordinate for point 1 is also 0. To find the Z coordinate, look at Figure 4. The Z coordinate for point 1 is 5. Repeat this procedure for the remaining four points in the pyramid and you should have a list that looks like Figure 5.

POINT #  X  Y  Z
1 0 0 5
2 4 4 0
3 -4 4 0
4 -4 -4 0
5 4 -4 0
Figure 5.

After defining all the points, we’re ready to tell the computer how to draw the pyramid. As stated earlier, this pyramid is made up of eight lines. In order to draw each line, the computer must know which two points make up the endpoints of the line. Figure 6 shows the endpoints of the eight lines.

LINE # FROM POINT TO POINT
1 1 2
2 1 3
3 1 4
4 1 5
5 2 3
6 3 4
7 4 5
8 5 2
Figure 6.

With this information in hand, you’re ready to enter it into the 3-D image program in Listing 1. Type in the program and check your typing with C:CHECK or D:CHECK2. When you’re sure the program is correct, RUN it.

What a view.

When the 3-D object plot program is executed, the computer will ask you several questions.

  1. DMA OFF? If you answer Y, the computer will turn off the screen while performing the complex 3-D math. This will speed up the program considerably. If you don’t care about speed, type N.
  2. OUTPUT TO PLOTTER? If you own an Atari 1020 plotter and would like hard-copy of your 3-D objects, ready your plotter and answer Y to this question. Otherwise, answer N.
  3. FILE OR KEYBOARD INPUT? Type an F or a K depending on your choice.
  4. If you want a file input (F), the computer will ask for the name of a 3-D object file. If you’re using the cassette, position your tape to the beginning of the 3-D file, press PLAY, type C: and press RETURN. For disk, respond D:FILENAME.EXT and press RETURN. The computer will load the desired 3-D object data and continue at step 6.
  5. If you want to define a new 3-D object (K), you will be asked how many points there are in the object. Our pyramid has 5 points. You will then be asked for the X,Y and Z coordinates of each point. For example, to enter the coordinates of point 2 of the pyramid, you would type 4,4,0 and press RETURN. Next you will be asked how many lines there are in the object. Type this number and press RETURN. After this you must enter the endpoints of each line. Enter these point numbers as in Figure 6. Finally, you’ll be asked if you’d like to save the object in a file. If you type Y, the computer will ask for a filename. For cassette, position your tape, press RECORD and PLAY, type C: and press RETURN. When the computer beeps, press RETURN again and the file will be saved. For disk, type D:FILENAME.EXT and press RETURN.
  6. You’re now ready to look at the object. You will be asked:
    ENTER OBSERVER LOCATION
    X,Y,Z OR E FOR EDIT
    

    If you’d like to examine and/or change the object data, type E, press RETURN and go to step 8. Otherwise, type in the X, Y and Z coordinates of the point in space where your imaginary “eye” is located and press RETURN. A good observer location for our pyramid is 5,7,3. Next you will be asked:

    ENTER COORDINATES LOOKED
    AT X,Y,Z
    

    Now you should enter the X, Y, and Z coordinates of the place where you want to look. If, for example, you want to look at the center of our pyramid, you should type 0,0,2.5 and press RETURN. Finally, you’ll be asked:

    ENTER ZOOM FACTOR
    
    The normal zoom factor is 1. To enlarge the object image, type a larger number; to make the object smaller, enter a smaller number.
  7. At this point, the object will be drawn on your screen and on the plotter, if selected. When drawing is complete, a short tone will sound. Press START, SELECT, OPTION or the joystick #1 trigger to start a new plot at step 6.
  8. The EDIT section of the program has three options: PRINT the object data, EDIT POINTS or EDIT LINES. These options are self-prompting and similar to the original data entry procedure above. After editing, you may save the edited object data to a file, if desired, as in step 5.

More complex objects.

You can design and plot extremely complex objects with this image processor. The procedure is the same as the simple pyramid used in the above illustrations; there are just more points and lines involved.

Figure 7 is the data for a futuristic 3-D space shuttle. Try entering this data into your computer and viewing it.

POINTS:44
POINT 1: -5.5	-5.5	0
POINT 2: -8	-1	0
POINT 3: -8	3	0
POINT 4: -16	14	0
POINT 5: -16	17	0
POINT 6: -5.5	21	0
POINT 7: 8	16	2.5
POINT 8: 8	0	2.5
POINT 9: -2.5	0	1.25
POINT 10: -2.5	-6.5	1.25
POINT 11: 8	-7.5	2.5
POINT 12: -1.25 -2	1.5
POINT 13: -1.25 -7.5	1.5
POINT 14: -2.5	18.5	1.25
POINT 15: -4.5	22	6.5
POINT 16: -4.5	18	6.5
POINT 17: -3.2	13	3
POINT 18: -2.5	5.5	1.25
POINT 19: -4	-6	0
POINT 20: -4	-7.5	0
POINT 21: 0	-26	0
POINT 22: 4	-7.5	0
POINT 23: 4	-6	8
POINT 24: 1.25	-7.5	1.5
POINT 25: 1.25	-2	1.5
POINT 26: 2.5	0	1.25
POINT 27: 2.5	-6.5	1.25
POINT 28: 5.5	-5.5	0
POINT 29: 5.5	21	0
POINT 30: 2.5	18.5	1.25
POINT 31: 4.5	22	6.5
POINT 32: 4.5	18	6.5
POINT 33: 3.2	13	3
POINT 34: 2.5	5.5	1.25
POINT 35: 16	17	0
POINT 36: 16	14	0
POINT 37: 8	3	0
POINT 38: 8	-1	0
POINT 39: 3.5	-9.5	0.25
POINT 40: 8.5	-9.5	2
POINT 41: 8.5	-19	0.6
POINT 42: -8.5	-9.5	2
POINT 43: -3.5	-9.5	0.25
POINT 44: -8.5	-19	0.6

LINES:58
LINE 1: 7 TO 6
LINE 2: 6 TO 29
LINE 3: 29 TO 7
LINE 4: 29 TO 35
LINE 5: 35 TO 36
LINE 6: 36 TO 37
LINE 7: 37 TO 38
LINE 8: 38 TO 28
LINE 9: 28 TO 29
LINE 10: 6 TO 5
LINE 11: 5 TO 4
LINE 12: 4 TO 3
LINE 13: 3 TO 2
LINE 14: 2 TO 1
LINE 15: 1 TO 6
LINE 16: 7 TO 8
LINE 17: 8 TO 9
LINE 18: 9 TO 10
LINE 19: 10 TO 1
LINE 20: 8 TO 26
LINE 21: 26 TO 27
LINE 22: 27 TO 28
LINE 23: 30 TO 31
LINE 24: 31 TO 32
LINE 25: 32 TO 33
LINE 26: 33 TO 34
LINE 27: 34 TO 30
LINE 28: 14 TO 15
LINE 29: 15 TO 16
LINE 30: 16 TO 17
LINE 31: 17 TO 18
LINE 32: 18 TO 14
LINE 33: 10 TO 13
LINE 34: 13 TO 12
LINE 35: 12 TO 9
LINE 36: 12 TO 8
LINE 37: 13 TO 11
LINE 38: 11 TO 8
LINE 39: 8 TO 25
LINE 40: 25 TO 26
LINE 41: 11 TO 24
LINE 42: 24 TO 25
LINE 43: 27 TO 24
LINE 44: 24 TO 23
LINE 45: 23 TO 22
LINE 46: 22 TO 24
LINE 47: 13 TO 19
LINE 48: 19 TO 20
LINE 49: 20 TO 13
LINE 50: 11 TO 21
LINE 51: 21 TO 22
LINE 52: 20 TO 21
LINE 53: 42 TO 43
LINE 54: 43 TO 44
LINE 55: 44 TO 42
LINE 56: 39 TO 40
LINE 57: 40 TO 41
LINE 58: 41 TO 39
Figure 7.
Some suggested views for this shuttle are:
OBSERVER LOC. LOOKED AT ZOOM
60,-60,40 0,0,0 1

OBSERVER LOC. LOOKED AT ZOOM
0,-45,6 0,0,0 1

OBSERVER LOC. LOOKED AT ZOOM
1,0,500 0,0,0 4.5

OBSERVER LOC. LOOKED AT ZOOM
500,0,0 0,0,0 6

Who gets the credit?

To be honest, I can’t take all the credit for this program. I got it from a Compucolor II computer bulletin board several years ago; the author was not credited. I modified the program to work on the Atari computers, added the editing, screen clipping, plotter output and file handling.

Although the code has been heavily modified, the author may recognize the general structure, and is encouraged to let me know his or her name. I’ll be glad to give credit where it is due.

Attention, artists.

I’d be interested in seeing some of the 3-D objects created by our readers with this program. Just send in a printout of your object’s data along with your name, and you may see your work displayed in a future issue!

100 GRAPHICS 0
110 ? "***************************"
120 ? "*  3-D IMAGE PLOT SYSTEM  *"
130 ? "*      BY TOM HUDSON      *"
140 ? "*  ANALOG COMPUTING # 16  *"
150 ? "***************************"
160 DIM A$(5),F$(20),DMA$(1),O$(1),EG$(2),IN$(1):EG$=CHR$(27):EG$(2)=CHR$(7)
170 XL=0:XR=319:YT=0:YB=191:OFF=40000
180 ? :? "DMA OFF";:INPUT DMA$:IF DMA$<>"Y" AND DMA$<>"N" THEN 180
190 ? :? "OUTPUT TO PLOTTER";:INPUT O$:IF O$<>"Y" AND O$<>"N" THEN 190
200 IF O$="N" THEN 220
210 TRAP 190:CLOSE #3:OPEN #3,8,0,"P":? #3;EG$;"*H*I*M0,−300*I":PC=0
220 ? :? "FILE OR KEYBOARD INPUT";:INPUT A$:IF A$="F" THEN 1100
230 IF A$<>"K" THEN 220
240 ? :? "HOW MANY POINTS ARE THERE";:INPUT PS
250 DIM X(PS),Y(PS),Z(PS),P(PS,2),VIS(PS)
260 ? "ENTER X,Y,Z COORDINATES FOR EACH POINT"
270 FOR I=1 TO PS:? "POINT ";I;:INPUT Q1,Q2,Q3:X(I)=Q1:Y(I)=Q2:Z(I)=Q3:NEXT I
280 ? :? "HOW MANY LINES ARE THERE";:INPUT LS:DIM LN(LS,1)
290 ? :? "NOW ENTER POINT INFORMATION"
300 ? "FOR EACH LINE."
310 FOR I=1 TO LS:? :? "LINE ";I:? "FROM POINT";:INPUT Q1:LN(I,0)=Q1:? "  TO POINT";:INPUT Q1:LN(I,1)=Q1:NEXT I
320 ? :? "DO YOU WANT TO SAVE THIS OBJECT";:INPUT A$:IF A$="Y" THEN 1250
330 IF A$<>"N" THEN 320
340 REM ***************************
350 REM *    TIME FOR NEW PLOT    *
360 REM ***************************
370 ? :? "ENTER OBSERVER LOCATION X,Y,Z"
380 ? "OR E FOR EDIT":TRAP 1340
390 ZOOM=1
400 INPUT OX,OY,OZ
410 ? :? "ENTER COORDINATES LOOKED AT X,Y,Z"
420 TRAP 410:INPUT VX,VY,VZ
430 ? :? "ENTER ZOOM FACTOR":TRAP 430:INPUT ZOOM:TRAP OFF
440 X(0)=VX:Y(0)=VY:Z(0)=VZ
450 D0=1:IF DMA$="Y" THEN POKE 559,0
460 REM ***************************
470 REM *  CALCULATE PERSPECTIVE  *
480 REM ***************************
490 DX=VX-OX:DY=VY-OY:DZ=VZ-OZ
500 U1=SQR(DX*DX+DY*DY+DZ*DZ):IF U1=0 THEN U1=1E−04
510 CX=DX/U1:CY=DY/U1:CZ=DZ/U1
520 S3=SQR(1-CZ*CZ):S2=SQR(1-CY*CY)
530 QX=OX+D0*CX:QY=OY+D0*CY:QZ=OZ+D0*CZ
540 FOR I=0 TO PS:XW=X(I):YW=Y(I):ZW=Z(I):GOSUB 610:NEXT I
550 FOR I=0 TO PS:IF VIS(I)=0 THEN 570
560 XW=X(I):YW=Y(I):ZW=Z(I):GOSUB 610:GOSUB 670
570 NEXT I:GOTO 740
580 REM ***************************
590 REM *  IS THE POINT VISIBLE?  *
600 REM ***************************
610 VIS(I)=1:VCX=XW−OX:VCY=YW−OY:VCZ=ZW−OZ
620 IF DX*VCX+DY*VCY+DZ*VCZ>0 THEN RETURN 
630 VIS(I)=0:RETURN 
640 REM ***************************
650 REM *  NOW CALC PLOT COORDS   *
660 REM ***************************
670 K=D0/(VCX*CX+VCY*CY+VCZ*CZ)
680 AX=OX+K*VCX:AY=OY+K*VCY:AZ=OZ+K*VCZ
690 IF S3=0 THEN 720
700 P(I,1)=((AX-QX)*CY-(AY-QY)*CX)/S3
710 P(I,2)=(AZ-QZ)/S3:RETURN 
720 P(I,1)=((QX-AX)*CZ+(AZ-QZ)*CX)/S2
730 P(I,2)=(AY-QY)/S2:RETURN 
740 REM ***************************
750 REM *     SCALE THE IMAGE     *
760 REM ***************************
770 T=450*ZOOM:FOR I=0 TO PS
780 P(I,1)=P(I,1)*T
790 P(I,2)=P(I,2)*T
800 NEXT I
810 XAD=160−P(0,1):YAD=96−P(0,2):FOR I=1 TO PS:P(I,1)=P(I,1)+XAD:P(I,2)=P(I,2)+YAD:NEXT I
820 REM ***************************
830 REM *   NOW DRAW THE IMAGE!   *
840 REM ***************************
850 GRAPHICS 24:SETCOLOR 2,0,0:COLOR 1:TRAP OFF
860 IF O$="Y" THEN ? #3;"M0,0*D480,0*D480,288*D0,288*D0,0"
870 FOR I=1 TO LS:TV=VIS(LN(I,0))+VIS(LN(I,1)):IF TV=0 THEN 1010
880 IF TV=2 THEN 980
890 QT=0:ISAVE=I:IF VIS(LN(I,0))=0 THEN I1=LN(I,0):I2=LN(I,1):I=LN(I,0):GOTO 910
900 I1=LN(I,1):I2=LN(I,0):I=LN(I,1)
910 XT1=X(I1):YT1=Y(I1):ZT1=Z(I1):XT2=X(I2):YT2=Y(I2):ZT2=Z(I2):FV=0:FH=0
920 XW=(XT1+XT2)/2:YW=(YT1+YT2)/2:ZW=(ZT1+ZT2)/2:GOSUB 610
930 IF VIS(I)>0 THEN XT2=XW:YT2=YW:ZT2=ZW:GOTO 950
940 XT1=XW:YT1=YW:ZT1=ZW
950 QT=QT+1:IF QT<15 THEN 920
960 XW=XT2:YW=YT2:ZW=ZT2:GOSUB 610
970 GOSUB 670:P(I,1)=P(I,1)*T+XAD:P(I,2)=P(I,2)*T+YAD:VIS(I)=0:I=ISAVE
980 X1=P(LN(I,0),1):Y1=191−P(LN(I,0),2):X2=P(LN(I,1),1):Y2=191−P(LN(I,1),2):GOSUB 1550
990 IF O$="N" OR POK=0 THEN 1010
1000 ? #3;"M";X1*1.5;",";(191−Y1)*1.5;"*D";XW*1.5;",";(191−YW)*1.5:PC=PC+1
1010 NEXT I
1020 IF PC>0 THEN ? #3;"H*M0,−300*I":PC=0
1030 FOR X=15 TO 0 STEP −1:SOUND 0,128,10,X:NEXT X
1040 IF PEEK(53279)=7 AND STRIG(0)=1 THEN 1040
1050 GRAPHICS 0:? "LAST PARAMETERS:"
1060 ? :? "OBSERVER: ";OX;",";OY;",";OZ:? "VIEWPOINT:";VX;",";VY;",";VZ:? "ZOOM:";ZOOM:GOTO 340
1070 REM ***************************
1080 REM *   LOAD 3-D IMAGE FILE   *
1090 REM ***************************
1100 CLOSE #1:? "ENTER FILENAME TO LOAD";:INPUT F$:TRAP 1200:OPEN #1,4,0,F$:TRAP 1180
1110 INPUT #1,PS:DIM X(PS),Y(PS),Z(PS),P(PS,2),VIS(PS)
1120 FOR X=1 TO PS:INPUT #1,Q1:X(X)=Q1:NEXT X
1130 FOR X=1 TO PS:INPUT #1,Q1:Y(X)=Q1:NEXT X
1140 FOR X=1 TO PS:INPUT #1,Q1:Z(X)=Q1:NEXT X
1150 INPUT #1,LS:DIM LN(LS,1)
1160 FOR X=1 TO LS:INPUT #1,Q1:LN(X,0)=Q1:INPUT #1,Q1:LN(X,1)=Q1:NEXT X
1170 CLOSE #1:TRAP OFF:GOTO 340
1180 ? :? "}FILE FORMAT ERROR!":GOTO 1210
1190 ? :? "}I/O ERROR − ";PEEK(195):GOTO 1210
1200 ? :? "}CAN'T OPEN FILE!"
1210 ? "PRESS RETURN":INPUT IN$:RUN 
1220 REM ***************************
1230 REM *   SAVE 3-D IMAGE FILE   *
1240 REM ***************************
1250 CLOSE #1:? "ENTER FILENAME TO SAVE";:INPUT F$:TRAP 1210:OPEN #1,8,0,F$:TRAP 1190
1260 ? #1;PS
1270 FOR X=1 TO PS:? #1;X(X):NEXT X
1280 FOR X=1 TO PS:? #1;Y(X):NEXT X
1290 FOR X=1 TO PS:? #1;Z(X):NEXT X
1300 ? #1;LS:FOR X=1 TO LS:? #1;LN(X,0):? #1;LN(X,1):NEXT X:GOTO 1170
1310 REM ***************************
1320 REM * EDIT THE 3-D IMAGE DATA *
1330 REM ***************************
1340 TRAP OFF:? :? "PRINT, EDIT OR QUIT";:INPUT A$:IF A$="E" THEN 1410
1350 IF A$="Q" THEN 340
1360 IF A$<>"P" THEN 1340
1370 TRAP 1340:LPRINT "POINTS:";PS:LPRINT 
1380 FOR X=1 TO PS:LPRINT "POINT ";X;": ";X(X),Y(X),Z(X):NEXT X:LPRINT 
1390 LPRINT "LINES:";LS:LPRINT 
1400 FOR X=1 TO LS:LPRINT "LINE ";X;": ";LN(X,0);" TO ";LN(X,1):NEXT X:LPRINT :GOTO 1340
1410 TRAP OFF:? :? "EDIT POINT OR LINE OR EXIT";:INPUT A$:IF A$="L" THEN 1480
1420 IF A$="E" THEN 320
1430 IF A$<>"P" THEN 1410
1440 ? :? "ENTER POINT# OR RETURN";:TRAP 1410:INPUT PT:IF PT>PS OR PT<0 THEN 1440
1450 ? :? "X=";X(PT),"Y=";Y(PT),"Z=";Z(PT)
1460 ? :? "ENTER NEW X,Y,Z OR RETURN":TRAP 1410
1470 INPUT Q1,Q2,Q3:X(PT)=Q1:Y(PT)=Q2:Z(PT)=Q3:GOTO 1410
1480 ? :? "ENTER LINE# OR RETURN";:TRAP 1410:INPUT LN:IF LN>LS OR LN<0 THEN 1480
1490 ? :? "FROM POINT:";LN(LN,0):? "  TO POINT:";LN(LN,1)
1500 ? :? "ENTER NEW LINE POINTS OR RETURN":TRAP 1410
1510 ? "FROM POINT:";:INPUT Q1:IF Q1>PS THEN 1510
1520 LN(LN,0)=Q1
1530 ? "  TO POINT:";:INPUT Q1:IF Q1>PS THEN 1530
1540 LN(LN,1)=Q1:GOTO 1410
1550 REM ***************************
1560 REM *  GRAPHICS CLIP ROUTINE  *
1570 REM ***************************
1580 L1=0:L2=0:R1=0:R2=0:T1=0:T2=0:B1=0:B2=0:POK=0
1590 IF X1<XL THEN L1=1:GOTO 1610
1600 IF X1>XR THEN R1=1
1610 IF Y1>YB THEN B1=1:GOTO 1630
1620 IF Y1<YT THEN T1=1
1630 IF X2<XL THEN L2=1:GOTO 1650
1640 IF X2>XR THEN R2=1
1650 IF Y2>YB THEN B2=1:GOTO 1670
1660 IF Y2<YT THEN T2=1
1670 IF L1+L2=2 OR R1+R2=2 OR T1+T2=2 OR B1+B2=2 THEN RETURN 
1680 X3=X1:Y3=Y1:X4=X2:Y4=Y2:GOSUB 1730
1690 L1=L2:R1=R2:T1=T2:B1=B2
1700 X1=XW:Y1=YW:X3=X2:Y3=Y2:X4=X1:Y4=Y1:GOSUB 1730
1710 IF X1<XL OR X1>XR OR Y1<YT OR Y1>YB OR XW<XL OR XW>XR OR YW<YT OR YW>YB THEN RETURN 
1720 PLOT X1,Y1:DRAWTO XW,YW:POK=1:RETURN 
1730 IF L1+T1+B1+R1=0 THEN XW=X3:YW=Y3:RETURN 
1740 IF L1 THEN XW=XL:YW=Y3+(Y4−Y3)*(XL−X3)/(X4−X3):X3=XW:Y3=YW:IF Y3>=YT AND Y3<=YB THEN RETURN 
1750 IF R1 THEN XW=XR:YW=Y3+(Y4−Y3)*(XR−X3)/(X4−X3):X3=XW:Y3=YW:IF Y3>=YT AND Y3<=YB THEN RETURN 
1760 IF B1 THEN YW=YB:XW=X3+(X4−X3)*(YB−Y3)/(Y4−Y3):X3=XW:Y3=YW:IF X3>=XR AND X3<=XL THEN RETURN 
1770 IF T1 THEN YW=YT:XW=X3+(X4−X3)*(YT−Y3)/(Y4−Y3):X3=XW:Y3=YW
1780 RETURN 
A.N.A.L.O.G. ISSUE 19 / JUNE 1984 / PAGE 93

Solid States Revisited

by ANALOG Readers with Tom Hudson

In issue 16 of ANALOG, I presented Solid States, a 3-D object plotting system. Readers were asked to send in their 3-D object data and modifications to the original program. Well, we’ve received a good deal of feedback, and I decided to print some of the more interesting items in lieu of my Basic Training column.

For those readers who do not have the Solid States program, you can still order issue 16 as a back issue. See the ad elsewhere in this issue.

If you have a copy of Solid States, get started typing in the data below!

An “A” for effort.

Paul J. Goldernew, of Pittsburg, PA sent in our first Solid States graphic. It is a 3-D representation of the “A” in the ANALOG logo. Paul’s original data file also contained the entire ANALOG logo above the “A,” but it was just too big (157 points, 158 lines) for us to print. I did a little editing and cut it down to just the “A” itself, and came out with 100 points and 110 lines. Paul’s effort shows how curved lines can be shown with Solid States.

“A” logo data.
POINTS:100
POINT 1: 9	-7	6
POINT 2: 9	7	6
POINT 3: 8.75	7.75	6
POINT 4: 8.25	8.25	6
POINT 5: 7.75	8.75	6
POINT 6: 7	9	6
POINT 7: -5	9	6
POINT 8: -9	5	6
POINT 9: -9	-7	6
POINT 10: -8.75	-7.75	6
POINT 11: -8.25	-8.25	6
POINT 12: -7.75	-8.75	6
POINT 13: -7	-9	6
POINT 14: -3	-9	6
POINT 15: -2.25	-8.75	6
POINT 16: -1.5	-8	6
POINT 17: -1	-7	6
POINT 18: -1	-6	6
POINT 19: -1.25	-5	6
POINT 20: -2	-3	6
POINT 21: 3	-3	6
POINT 22: 4	-2.75	6
POINT 23: 4.5	-2	6
POINT 24: 4.75	-1	6
POINT 25: 4.5	0	6
POINT 26: 4	0.75	6
POINT 27: 3	1	6
POINT 28: -4	1	6
POINT 29: -5	2.5	6
POINT 30: -5	3.5	6
POINT 31: -4.5	4	6
POINT 32: -3.75	4.75	6
POINT 33: -3	5	6
POINT 34: 5	5	6
POINT 35: 5	-7	6
POINT 36: 5.25	-8	6
POINT 37: 6	-8.75	6
POINT 38: 7	-9	6
POINT 39: 8	-8.75	6
POINT 40: 8.75	-8	6
POINT 41: 7	-8.25	6
POINT 42: 6	-8	6
POINT 43: 5.5	-7	6
POINT 44: 5.75	-6	6
POINT 45: 6	-5.5	6
POINT 46: 7	-5.25	6
POINT 47: 8	-5.5	6
POINT 48: 8.5	-6	6
POINT 49: 8.75	-7	6
POINT 50: 8	-8	6
POINT 51: 9	-7	0
POINT 52: 9	7	0
POINT 53: 8.75	7.75	0
POINT 54: 8.25	8.25	0
POINT 55: 7.75	8.75	0
POINT 56: 7	9	0
POINT 57: -5	9	0
POINT 58: -9	5	0
POINT 59: -9	-7	0
POINT 60: -8.75	-7.75	0
POINT 61: -8.25	-8.25	0
POINT 62: -7.75	-8.75	0
POINT 63: -7	-9	0
POINT 64: -3	-9	0
POINT 65: -2.25	-8.75	0
POINT 66: -1.5	-8	0
POINT 67: -1	-7	0
POINT 68: -1	-6	0
POINT 69: -1.25	-5	0
POINT 70: -2	-3	0
POINT 71: 3	-3	0
POINT 72: 4	-2.75	0
POINT 73: 4.5	-2	0
POINT 74: 4.75	-1	0
POINT 75: 4.5	0	0
POINT 76: 4	0.75	0
POINT 77: 3	1	0
POINT 78: -4	1	0
POINT 79: -5	2.5	0
POINT 80: -5	3.5	0
POINT 81: -4.5	4	0
POINT 82: -3.75	4.75	0
POINT 83: -3	5	0
POINT 84: 5	5	0
POINT 85: 5	-7	0
POINT 86: 5.25	-8	0
POINT 87: 6	-8.75	0
POINT 88: 7	-9	0
POINT 89: 8	-8.75	0
POINT 90: 8.75	-8	0
POINT 91: 7	-8.25	0
POINT 92: 6	-8	0
POINT 93: 5.5	-7	0
POINT 94: 5.75	-6	0
POINT 95: 6	-5.5	0
POINT 96: 7	-5.25	0
POINT 97: 8	-5.5	0
POINT 98: 8.5	-6	0
POINT 99: 8.75	-7	0
POINT 100: 8	-8	0

LINES:110
LINE 1: 1 TO 2
LINE 2: 2 TO 3
LINE 3: 3 TO 4
LINE 4: 4 TO 5
LINE 5: 5 TO 6
LINE 6: 6 TO 7
LINE 7: 7 TO 8
LINE 8: 8 TO 9
LINE 9: 9 TO 10
LINE 10: 10 TO 11
LINE 11: 11 TO 12
LINE 12: 12 TO 13
LINE 13: 13 TO 14
LINE 14: 14 TO 15
LINE 15: 15 TO 16
LINE 16: 16 TO 17
LINE 17: 17 TO 18
LINE 18: 18 TO 19
LINE 19: 19 TO 20
LINE 20: 20 TO 21
LINE 21: 21 TO 22
LINE 22: 22 TO 23
LINE 23: 23 TO 24
LINE 24: 24 TO 25
LINE 25: 25 TO 26
LINE 26: 26 TO 27
LINE 27: 27 TO 28
LINE 28: 28 TO 29
LINE 29: 29 TO 30
LINE 30: 30 TO 31
LINE 31: 31 TO 32
LINE 32: 32 TO 33
LINE 33: 33 TO 34
LINE 34: 34 TO 35
LINE 35: 35 TO 36
LINE 36: 36 TO 37
LINE 37: 37 TO 38
LINE 38: 38 TO 39
LINE 39: 39 TO 40
LINE 40: 40 TO 1
LINE 41: 41 TO 42
LINE 42: 42 TO 43
LINE 43: 43 TO 44
LINE 44: 44 TO 45
LINE 45: 45 TO 46
LINE 46: 46 TO 47
LINE 47: 47 TO 48
LINE 48: 48 TO 49
LINE 49: 49 TO 50
LINE 50: 50 TO 41
LINE 51: 51 TO 52
LINE 52: 52 TO 53
LINE 53: 53 TO 54
LINE 54: 54 TO 55
LINE 55: 55 TO 56
LINE 56: 56 TO 57
LINE 57: 57 TO 58
LINE 58: 58 TO 59
LINE 59: 59 TO 60
LINE 60: 60 TO 61
LINE 61: 61 TO 62
LINE 62: 62 TO 63
LINE 63: 63 TO 64
LINE 64: 64 TO 65
LINE 65: 65 TO 66
LINE 66: 66 TO 67
LINE 67: 67 TO 68
LINE 68: 68 TO 69
LINE 69: 69 TO 70
LINE 70: 70 TO 71
LINE 71: 71 TO 72
LINE 72: 72 TO 73
LINE 73: 73 TO 74
LINE 74: 74 TO 75
LINE 75: 75 TO 76
LINE 76: 76 TO 77
LINE 77: 77 TO 78
LINE 78: 78 TO 79
LINE 79: 79 TO 80
LINE 80: 80 TO 81
LINE 81: 81 TO 82
LINE 82: 82 TO 83
LINE 83: 83 TO 84
LINE 84: 84 TO 85
LINE 85: 85 TO 86
LINE 86: 86 TO 87
LINE 87: 87 TO 88
LINE 88: 88 TO 89
LINE 89: 89 TO 90
LINE 90: 90 TO 51
LINE 91: 91 TO 92
LINE 92: 92 TO 93
LINE 93: 93 TO 94
LINE 94: 94 TO 95
LINE 95: 95 TO 96
LINE 96: 96 TO 97
LINE 97: 97 TO 98
LINE 98: 98 TO 99
LINE 99: 99 TO 100
LINE 100: 100 TO 91
LINE 101: 8 TO 58
LINE 102: 9 TO 59
LINE 103: 7 TO 57
LINE 104: 28 TO 78
LINE 105: 20 TO 70
LINE 106: 24 TO 74
LINE 107: 34 TO 84
LINE 108: 35 TO 85
LINE 109: 1 TO 51
LINE 110: 2 TO 52
Try the following views:
OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
 30,-50,100       0,6,0      1.5

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  -12,-12,1      0,4.5,3     .2

Over “reacting.”

Nick A. Brienza, of Columbia, MD, sent in a 3-D representation of a nuclear reactor cooling tower. Once again, this graphic shows how curved surfaces can be shown with Solid States. You’ll note that this object was defined using only 32 points, a pretty efficient job.

Tower data.
POINTS: 32
POINT 1: -2	0	8
POINT 2: -2.25	0	4
POINT 3: -2.75	0	2
POINT 4: -4	0	0
POINT 5: -1.3	1.3	8
POINT 6: -1.5	1.5	4
POINT 7: -1.9	1.9	2
POINT 8: -2.7	2.7	0
POINT 9: 0	2	8
POINT 10: 0	2.25	4
POINT 11: 0	2.75	2
POINT 12: 0	4	0
POINT 13: 1.3	1.3	8
POINT 14: 1.5	1.5	4
POINT 15: 1.9	1.9	2
POINT 16: 2.7	2.7	0
POINT 17: 2	0	8
POINT 18: 2.25	0	4
POINT 19: 2.75	0	2
POINT 20: 4	0	0
POINT 21: 1.3	-1.3	8
POINT 22: 1.5	-1.5	4
POINT 23: 1.9	-1.9	2
POINT 24: 2.7	-2.7	0
POINT 25: 0	-2	8
POINT 26: 0	-2.25	4
POINT 27: 0	-2.75	2
POINT 28: 0	-4	0
POINT 29: -1.3	-1.3	8
POINT 30: -1.5	-1.5	4
POINT 31: -1.9	-1.9	2
POINT 32: -2.7	-2.7	0

LINES:40
LINE 1: 1 TO 2
LINE 2: 2 TO 3
LINE 3: 3 TO 4
LINE 4: 5 TO 6
LINE 5: 6 TO 7
LINE 6: 7 TO 8
LINE 7: 9 TO 10
LINE 8: 10 TO 11
LINE 9: 11 TO 12
LINE 10: 13 TO 14
LINE 11: 14 TO 15
LINE 12: 15 TO 16
LINE 13: 17 TO 18
LINE 14: 18 TO 19
LINE 15: 19 TO 20
LINE 16: 21 TO 22
LINE 17: 22 TO 23
LINE 18: 23 TO 24
LINE 19: 25 TO 26
LINE 20: 26 TO 27
LINE 21: 27 TO 28
LINE 22: 29 TO 30
LINE 23: 30 TO 31
LINE 24: 31 TO 32
LINE 25: 1 TO 5
LINE 26: 5 TO 9
LINE 27: 9 TO 13
LINE 28: 13 TO 17
LINE 29: 17 TO 21
LINE 30: 21 TO 25
LINE 31: 25 TO 29
LINE 32: 29 TO 1
LINE 33: 4 TO 8
LINE 34: 8 TO 12
LINE 35: 12 TO 16
LINE 36: 16 TO 20
LINE 37: 20 TO 24
LINE 38: 24 TO 28
LINE 39: 28 TO 32
LINE 40: 32 TO 4
Try the following views:
OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  45,45,45        0,0,4       2

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
    5,4,1         0,0,3      .2

Nick also asked if the 3-D views could be animated by showing a series of views in progression. Our next reader came up with a very nice program modification to do just that.

’Round and ’round she goes…

Larry L. Harris, of Poca, WV, has gone beyond the limitations of the original Solid States program, and has come up with a program modification that allows for automatic rotation of an object. Because of the memory requirements of this modification, 48k memory is suggested, and even then only fairly small objects can be rotated. Larry writes:

“This modification allows the viewer to rotate about the object in a circle on the X-Y plane with a Z coordinate the user inputs. The radius is determined by the input X and Y corrdinates of the observer’s viewpoint. The object appears to rotate on the screen. A two-page flip was added to give instant transition from one frame to the next. You do not see the object develop. It is drawn off-screen, then through a page flip you see the complete object. A machine-language routine is used to clear the GRAPHICS 8+16 screen.

“To add this feature to the existing Solid States program, simply add the lines in Listing 1 . Some are changes to existing lines.

“The program runs like the original until the zoom factor has been entered. Respond Y to “DO YOU WANT TO DO AN X-Y LOOP.” Then input the total number of degrees rotation and the number of degrees to increment for each drawing. Expect a screen flicker and some delay while initializing takes place and the first drawing is developed off-screen. Do not turn DMA off if you want to rotate around the object, or you won’t see it.

“The program will also operate as originally designed. Just answer N to the above prompt.”

Keep’ em coming.

I’d like to thank all the readers who have sent in their 3-D image data. Special thanks goes to Larry L. Harris for his rotation modification. If you’ve created a 3-D object and haven’t sent it in yet, what are you waiting for? Simply send it (on tape, disk or printout) to:

Solid States
c/o ANALOG
P.O. Box 23
Worcester, MA 01603

When we get another good batch of objects, we’ll run them in a future issue.

Listing 1

135 ? "* ROTATION:  LARRY HARRIS *"
160 DIM R$(1),A$(5),F$(20),DMA$(1),O$(1),EG$(2),IN$(1):EG$=CHR$(27):EG$(2)=CHR$(7)
434 ? :? "DO YOU WANT TO DO AN X−Y LOOP";:INPUT R$:IF R$<>"Y" THEN 440
436 ? "HOW MANY DEG. TOTAL ROTATION";:INPUT AN2:AN2=(AN2/360)*6.28
438 ? "HOW MANY DEG. INC. ROTATION";:INPUT AN3:AN3=(AN3/360)*6.28:GOSUB 2300:REM SET UP PAGE FLIP
439 GOTO 2000
850 GOSUB 2200:SETCOLOR 2,0,0:COLOR 1:TRAP OFF
1035 IF FLAG THEN 2100
1040 IF PEEK(53279)=7 AND STRIG(0)=1 THEN 1035
2000 FLAG=1:R=(OX^2+OY^2)^0.5:AN1=ATN(OY/OX):AN2=AN2+AN1
2100 AN1=AN1+AN3:OX=R*COS(AN1):OY=R*SIN(AN1)
2120 GOTO 440
2199 REM PAGE FLIP
2200 IF  NOT FLAG THEN GRAPHICS 24:RETURN 
2201 IF AN1>AN2 THEN FLAG=0
2202 XI=XI+1-2*(XI=2):XA=2-(XI=2)
2205 FOR S=40 TO 0 STEP −10:SOUND 0,S,10,8:NEXT S
2210 POKE DL+4,DLL(XA):POKE DL+5,DLH(XA)
2220 POKE DL+100,DHL(XA):POKE DL+101,DHH(XA)
2230 POKE 88,DLL(XI):POKE 89,DLH(XI)
2240 ADS=DLL(XI)+256*DLH(XI):Z=USR(1536,ADS)
2250 RETURN 
2299 REM SET UP DATA FOR PAGE FLIP
2300 TRAP 2500:DIM DLL(2),DLH(2),DHL(2),DHH(2):X=0:RESTORE 2400
2310 READ DAT:IF DAT=-1 THEN 2330
2320 POKE 1536+X,DAT:X=X+1:GOTO 2310
2330 X=2:GOSUB 2350:X=1:POKE 106,PEEK(106)−32:GOSUB 2350
2340 RETURN 
2350 GRAPHICS 24:DLL(X)=PEEK(88):DLH(X)=PEEK(89):DL=PEEK(560)+256*PEEK(561):DHL(X)=PEEK(DL+100)
2360 DHH(X)=PEEK(DL+101):RETURN 
2399 REM CLR DATA
2400 DATA 104,24,104,133,4,104,133,3,165,4,105,30,133,10,160,0,169,0,145,3,200,192,0,208,249,160,0
2410 DATA 230,4,165,4,197,10,208,237,96,−1
2500 TRAP OFF:GRAPHICS 24:RETURN 
A.N.A.L.O.G. ISSUE 22 / SEPTEMBER 1984 / PAGE 79

Son of Solid States

by ANALOG Readers with Tom Hudson

Okay, Solid States fans, hang onto your hats! This issue, we’ve got program modifications and 3-D objects galore from yours truly and ANALOG readers around the world. Let’s get started, shall we?

Far out!

Our first object was sent in by Vinette DePhillipe, of Hampton, Virginia. It’s called an “adjustable stop” and reminds me of my days back in good ol’ Glendale High School. My general drafting teacher, Ernie Belden (and heaven help you if you ever called him Ernie), was always coming up with weird objects for us to draw, and we never could figure out what they were used for. Here is the data for the adjustable stop:

POINTS:58
POINT 1: -13	-12	-9
POINT 2: -13	-12	-5
POINT 3: -13	-14	-5
POINT 4: -13	-14	4
POINT 5: -13	-12	4
POINT 6: -13	-12	8
POINT 7: 13	-12	8
POINT 8: 13	-12	4
POINT 9: 13	-14	4
POINT 10: 13	-14	-5
POINT 11: 13	-12	-5
POINT 12: 13	-12	-9
POINT 13: -13	-3	-9
POINT 14: 1	-3	-9
POINT 15: -1	-7	-9
POINT 16: 8	-7	-9
POINT 17: 6	-3	-9
POINT 18: 13	-3	-9
POINT 19: -1	8.25	4
POINT 20: 8	8.25	4
POINT 21: 6	10	2
POINT 22: 1	10	2
POINT 23: -13	10	2
POINT 24: -13	5	8
POINT 25: 13	5	8
POINT 26: 13	10	2
POINT 27: -6	-4	-9
POINT 28: -4.86	-4.23	-9
POINT 29: -3.88	-4.88	-9
POINT 30: -3.23	-5.86	-9
POINT 31: -3	-7	-9
POINT 32: -3.23	-8.14	-9
POINT 33: -3.88	-9.12	-9
POINT 34: -4.86	-9.77	-9
POINT 35: -6	-10	-9
POINT 36: -7.14	-9.77	-9
POINT 37: -8.12	-9.12	-9
POINT 38: -8.77	-8.14	-9
POINT 39: -9	-7	-9
POINT 40: -8.77	-5.86	-9
POINT 41: -8.12	-4.88	-9
POINT 42: -7.14	-4.23	-9
POINT 43: -6	-4	8
POINT 44: -4.86	-4.23	8
POINT 45: -3.88	-4.88	8
POINT 46: -3.23	-5.86	8
POINT 47: -3	-7	8
POINT 48: -3.23	-8.14	8
POINT 49: -3.88	-9.12	8
POINT 50: -4.86	-9.77	8
POINT 51: -6	-10	8
POINT 52: -7.14	-9.77	8
POINT 53: -8.12	-9.12	8
POINT 54: -8.77	-8.14	8
POINT 55: -9	-7	8
POINT 56: -8.77	-5.86	8
POINT 57: -8.12	-4.88	8
POINT 58: -7.14	-4.23	8

LINES:88
LINE 1: 1 TO 2
LINE 2: 2 TO 3
LINE 3: 3 TO 4
LINE 4: 4 TO 5
LINE 5: 5 TO 6
LINE 6: 6 TO 7
LINE 7: 7 TO 8
LINE 8: 8 TO 9
LINE 9: 9 TO 10
LINE 10: 10 TO 11
LINE 11: 11 TO 12
LINE 12: 12 TO 1
LINE 13: 2 TO 11
LINE 14: 3 TO 10
LINE 15: 4 TO 9
LINE 16: 5 TO 8
LINE 17: 6 TO 7
LINE 18: 1 TO 13
LINE 19: 13 TO 14
LINE 20: 14 TO 15
LINE 21: 15 TO 16
LINE 22: 16 TO 17
LINE 23: 17 TO 18
LINE 24: 18 TO 12
LINE 25: 15 TO 19
LINE 26: 19 TO 20
LINE 27: 20 TO 21
LINE 28: 21 TO 17
LINE 29: 20 TO 16
LINE 30: 14 TO 22
LINE 31: 19 TO 22
LINE 32: 13 TO 23
LINE 33: 23 TO 24
LINE 34: 24 TO 25
LINE 35: 25 TO 26
LINE 36: 26 TO 18
LINE 37: 26 TO 21
LINE 38: 23 TO 22
LINE 39: 24 TO 6
LINE 40: 25 TO 7
LINE 41: 27 TO 28
LINE 42: 28 TO 29
LINE 43: 29 TO 30
LINE 44: 30 TO 31
LINE 45: 31 TO 32
LINE 46: 32 TO 33
LINE 47: 33 TO 34
LINE 48: 34 TO 35
LINE 49: 35 TO 36
LINE 50: 36 TO 37
LINE 51: 37 TO 38
LINE 52: 38 TO 39
LINE 53: 39 TO 40
LINE 54: 40 TO 41
LINE 55: 41 TO 42
LINE 56: 42 TO 27
LINE 57: 27 TO 43
LINE 58: 43 TO 44
LINE 59: 44 TO 45
LINE 60: 45 TO 46
LINE 61: 46 TO 47
LINE 62: 47 TO 48
LINE 63: 48 TO 49
LINE 64: 49 TO 50
LINE 65: 50 TO 51
LINE 66: 51 TO 52
LINE 67: 52 TO 53
LINE 68: 53 TO 54
LINE 69: 55 TO 54
LINE 70: 55 TO 56
LINE 71: 56 TO 57
LINE 72: 57 TO 58
LINE 73: 58 TO 43
LINE 74: 28 TO 44
LINE 75: 29 TO 45
LINE 76: 30 TO 46
LINE 77: 31 TO 47
LINE 78: 32 TO 48
LINE 79: 33 TO 49
LINE 80: 34 TO 50
LINE 81: 35 TO 51
LINE 82: 36 TO 52
LINE 83: 37 TO 53
LINE 84: 38 TO 54
LINE 85: 39 TO 55
LINE 86: 40 TO 56
LINE 87: 41 TO 57
LINE 88: 42 TO 58
ADJUSTABLE STOP VIEW DATA:

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  60,-60,40       0,0,0      1

This got me thinking about orthographic projection (the drawing of an object from three views without perspective) and how Solid States can simulate the process.

Solid States draws objects with true perspective. The closer you get to an object, the more exaggerated the perspective becomes. Theoretically, if you could look at an object from an infinite distance through a large telescope, you would see the object without the perspective distortion.

We can produce orthographic views with Solid States by placing our viewpoint very far from the object and using a large ZOOM factor. The orthographic views of the adjustable stop are shown below, along with the coordinate and ZOOM information.

            TOP VIEW
            --------
OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  0,0,12000       0,0,0      132

           FRONT VIEW
           ----------
OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  0,12000,0       0,0,0      132

            SIDE VIEW
            ---------
OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  12000,0,0       0,0,0      132

Conversely, if we place our viewpoint very close to the object and use a very small ZOOM factor, we will see the object severely distorted by perspective. Try the following view with the adjustable stop, and you’ll see what I mean.

ADJ STOP EXAGGERATED PERSPECTIVE

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
   15,0,0         0,0,0      .04

Those readers interested in mechanical drawing applications of Solid States should find this information very useful. Mr. Belden would be proud.

TIE one on.

Robert Ashcraft of Amarillo, Texas, sent in the data for a TIE fighter, the famous Imperial craft from the Star Wars movies.

Here’s the data for the TIE fighter:

POINTS:84
POINT 1: 5	-2	6
POINT 2: 5	2	6
POINT 3: 5	4	0
POINT 4: 5	2	-6
POINT 5: 5	-2	-6
POINT 6: 5	-4	0
POINT 7: -5	-2	6
POINT 8: -5	2	6
POINT 9: -5	4	0
POINT 10: -5	2	-6
POINT 11: -5	-2	-6
POINT 12: -5	-4	0
POINT 13: -1	-2	1
POINT 14: 1	-2	1
POINT 15: 1	-2	-1
POINT 16: -1	-2	-1
POINT 17: -1	1	2
POINT 18: 1	1	2
POINT 19: 1	-1	2
POINT 20: -1	-1	2
POINT 21: -1	2	-1
POINT 22: 1	2	-1
POINT 23: 1	2	1
POINT 24: -1	2	1
POINT 25: -1	-1	-2
POINT 26: 1	-1	-2
POINT 27: 1	1	-2
POINT 28: -1	1	-2
POINT 29: -2	1	1
POINT 30: -2	-1	1
POINT 31: -2	-1	-1
POINT 32: -2	1	-1
POINT 33: 2	1	-1
POINT 34: 2	-1	-1
POINT 35: 2	-1	1
POINT 36: 2	1	1
POINT 37: 2	0	1
POINT 38: 2	1	0
POINT 39: 2	0	-1
POINT 40: 2	-1	0
POINT 41: 3	0	1
POINT 42: 3	1	0
POINT 43: 3	0	-1
POINT 44: 3	-1	0
POINT 45: -2	0	1
POINT 46: -2	1	0
POINT 47: -2	0	-1
POINT 48: -2	-1	0
POINT 49: -3	0	1
POINT 50: -3	1	0
POINT 51: -3	0	-1
POINT 52: -3	-1	0
POINT 53: 3	0	0.67
POINT 54: 3	0.67	0
POINT 55: 3	0	-0.67
POINT 56: 3	-0.67	0
POINT 57: 4	0	0.67
POINT 58: 4	0.67	0
POINT 59: 4	0	-0.67
POINT 60: 4	-0.67	0
POINT 61: -3	0	0.67
POINT 62: -3	0.67	0
POINT 63: -3	0	-0.67
POINT 64: -3	-0.67	0
POINT 65: -4	0	0.67
POINT 66: -4	0.67	0
POINT 67: -4	0	-0.67
POINT 68: -4	-0.67	0
POINT 69: 4	0	0.33
POINT 70: 4	0.33	0
POINT 71: 4	0	-0.33
POINT 72: 4	-0.33	0
POINT 73: 5	0	0.33
POINT 74: 5	0.33	0
POINT 75: 5	0	-0.33
POINT 76: 5	-0.33	0
POINT 77: -4	0	0.33
POINT 78: -4	0.33	0
POINT 79: -4	0	-0.33
POINT 80: -4	-0.33	0
POINT 81: -5	0	0.33
POINT 82: -5	0.33	0
POINT 83: -5	0	-0.33
POINT 84: -5	-0.33	0

LINES:138
LINE 1: 1 TO 2
LINE 2: 2 TO 3
LINE 3: 3 TO 4
LINE 4: 4 TO 5
LINE 5: 5 TO 6
LINE 6: 6 TO 1
LINE 7: 1 TO 4
LINE 8: 2 TO 5
LINE 9: 3 TO 6
LINE 10: 7 TO 8
LINE 11: 8 TO 9
LINE 12: 9 TO 10
LINE 13: 10 TO 11
LINE 14: 11 TO 12
LINE 15: 12 TO 7
LINE 16: 7 TO 10
LINE 17: 8 TO 11
LINE 18: 9 TO 12
LINE 19: 13 TO 20
LINE 20: 20 TO 17
LINE 21: 17 TO 24
LINE 22: 24 TO 21
LINE 23: 21 TO 28
LINE 24: 28 TO 25
LINE 25: 25 TO 16
LINE 26: 16 TO 13
LINE 27: 14 TO 19
LINE 28: 19 TO 18
LINE 29: 18 TO 23
LINE 30: 23 TO 22
LINE 31: 22 TO 27
LINE 32: 27 TO 26
LINE 33: 26 TO 15
LINE 34: 15 TO 14
LINE 35: 13 TO 14
LINE 36: 14 TO 35
LINE 37: 35 TO 36
LINE 38: 36 TO 23
LINE 39: 23 TO 24
LINE 40: 24 TO 29
LINE 41: 29 TO 30
LINE 42: 30 TO 13
LINE 43: 16 TO 15
LINE 44: 15 TO 34
LINE 45: 34 TO 33
LINE 46: 33 TO 22
LINE 47: 22 TO 21
LINE 48: 21 TO 32
LINE 49: 32 TO 31
LINE 50: 31 TO 16
LINE 51: 17 TO 18
LINE 52: 18 TO 36
LINE 53: 36 TO 33
LINE 54: 33 TO 27
LINE 55: 27 TO 28
LINE 56: 28 TO 32
LINE 57: 32 TO 29
LINE 58: 29 TO 17
LINE 59: 20 TO 19
LINE 60: 19 TO 35
LINE 61: 35 TO 34
LINE 62: 34 TO 26
LINE 63: 26 TO 25
LINE 64: 25 TO 31
LINE 65: 31 TO 30
LINE 66: 30 TO 20
LINE 67: 37 TO 38
LINE 68: 38 TO 39
LINE 69: 39 TO 40
LINE 70: 40 TO 37
LINE 71: 41 TO 42
LINE 72: 42 TO 43
LINE 73: 43 TO 44
LINE 74: 44 TO 41
LINE 75: 37 TO 41
LINE 76: 38 TO 42
LINE 77: 39 TO 43
LINE 78: 40 TO 44
LINE 79: 45 TO 46
LINE 80: 46 TO 47
LINE 81: 47 TO 48
LINE 82: 48 TO 45
LINE 83: 49 TO 50
LINE 84: 50 TO 51
LINE 85: 51 TO 52
LINE 86: 52 TO 49
LINE 87: 45 TO 49
LINE 88: 46 TO 50
LINE 89: 47 TO 51
LINE 90: 48 TO 52
LINE 91: 53 TO 54
LINE 92: 54 TO 55
LINE 93: 55 TO 56
LINE 94: 56 TO 53
LINE 95: 57 TO 58
LINE 96: 58 TO 59
LINE 97: 59 TO 60
LINE 98: 60 TO 57
LINE 99: 53 TO 57
LINE 100: 54 TO 58
LINE 101: 55 TO 59
LINE 102: 56 TO 60
LINE 103: 61 TO 62
LINE 104: 62 TO 63
LINE 105: 63 TO 64
LINE 106: 64 TO 61
LINE 107: 65 TO 66
LINE 108: 66 TO 67
LINE 109: 67 TO 68
LINE 110: 68 TO 65
LINE 111: 61 TO 65
LINE 112: 62 TO 66
LINE 113: 63 TO 67
LINE 114: 64 TO 68
LINE 115: 69 TO 70
LINE 116: 70 TO 71
LINE 117: 71 TO 72
LINE 118: 72 TO 69
LINE 119: 73 TO 74
LINE 120: 74 TO 75
LINE 121: 75 TO 76
LINE 122: 76 TO 73
LINE 123: 69 TO 73
LINE 124: 70 TO 74
LINE 125: 71 TO 75
LINE 126: 72 TO 76
LINE 127: 77 TO 78
LINE 128: 78 TO 79
LINE 129: 79 TO 80
LINE 130: 80 TO 77
LINE 131: 81 TO 82
LINE 132: 82 TO 83
LINE 133: 83 TO 84
LINE 134: 84 TO 81
LINE 135: 77 TO 81
LINE 136: 78 TO 82
LINE 137: 79 TO 83
LINE 138: 80 TO 84
TIE FIGHTER VIEW DATA:

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
 100,173,50       0,0,0       6

Interestingly, a few days after receiving the TIE fighter, I got a letter from Jason Leigh, of Kowloon, Hong Kong. He sent in — you guessed it — a 3-D X-Wing fighter, the spacecraft used by the rebel forces in the Star Wars films!

Here’s the X-Wing data:

POINTS:94
POINT 1: 0	26	11
POINT 2: 0	22	11
POINT 3: 7	21	12
POINT 4: 7	27	12
POINT 5: 7	26	11
POINT 6: 7	22	11
POINT 7: 37	28	13
POINT 8: 37	32	13
POINT 9: 40	32	13
POINT 10: 40	43	12
POINT 11: 40	44	12
POINT 12: 22	44	11
POINT 13: 22	46	11
POINT 14: 40	46	12
POINT 15: 40	47	12
POINT 16: 46	47	12
POINT 17: 46	43	12
POINT 18: 50	32	13
POINT 19: 55	31	11
POINT 20: 55	32	12
POINT 21: 60	32	12
POINT 22: 60	28	12
POINT 23: 55	28	12
POINT 24: 55	29	11
POINT 25: 50	28	13
POINT 26: 50	20	13
POINT 27: 55	19	11
POINT 28: 55	20	12
POINT 29: 60	20	12
POINT 30: 60	16	12
POINT 31: 55	16	12
POINT 32: 55	17	11
POINT 33: 50	16	13
POINT 34: 46	5	12
POINT 35: 46	1	12
POINT 36: 40	1	12
POINT 37: 40	2	12
POINT 38: 22	2	11
POINT 39: 22	4	11
POINT 40: 40	4	12
POINT 41: 40	5	12
POINT 42: 40	16	13
POINT 43: 37	16	13
POINT 44: 37	20	13
POINT 45: 24	23	12
POINT 46: 24	25	12
POINT 47: 33	26	15
POINT 48: 33	22	15
POINT 49: 36	25	13
POINT 50: 36	23	13
POINT 51: 0	26	9
POINT 52: 0	22	9
POINT 53: 7	21	8
POINT 54: 7	27	8
POINT 55: 7	26	9
POINT 56: 7	22	9
POINT 57: 37	28	6
POINT 58: 37	32	6
POINT 59: 40	43	8
POINT 60: 40	44	8
POINT 61: 22	44	9
POINT 62: 22	46	9
POINT 63: 40	46	8
POINT 64: 40	47	8
POINT 65: 46	47	8
POINT 66: 46	43	8
POINT 67: 50	32	6
POINT 68: 55	31	9
POINT 69: 55	32	8
POINT 70: 60	32	8
POINT 71: 60	28	8
POINT 72: 55	28	8
POINT 73: 55	29	9
POINT 74: 50	28	6
POINT 75: 50	20	6
POINT 76: 55	19	9
POINT 77: 55	20	8
POINT 78: 60	20	8
POINT 79: 60	16	8
POINT 80: 55	16	8
POINT 81: 55	17	9
POINT 82: 50	16	6
POINT 83: 46	5	8
POINT 84: 46	1	8
POINT 85: 40	1	8
POINT 86: 40	2	8
POINT 87: 22	2	9
POINT 88: 22	4	9
POINT 89: 40	4	8
POINT 90: 40	5	8
POINT 91: 37	16	6
POINT 92: 37	20	6
POINT 93: 33	26	13
POINT 94: 33	22	13

LINES:161
LINE 1: 1 TO 51
LINE 2: 2 TO 52
LINE 3: 3 TO 53
LINE 4: 4 TO 54
LINE 5: 5 TO 55
LINE 6: 6 TO 56
LINE 7: 7 TO 57
LINE 8: 8 TO 58
LINE 9: 9 TO 10
LINE 10: 10 TO 59
LINE 11: 11 TO 60
LINE 12: 12 TO 61
LINE 13: 13 TO 62
LINE 14: 14 TO 63
LINE 15: 15 TO 64
LINE 16: 16 TO 65
LINE 17: 17 TO 66
LINE 18: 18 TO 67
LINE 19: 19 TO 68
LINE 20: 20 TO 69
LINE 21: 21 TO 70
LINE 22: 22 TO 71
LINE 23: 23 TO 72
LINE 24: 24 TO 73
LINE 25: 25 TO 74
LINE 26: 26 TO 75
LINE 27: 27 TO 76
LINE 28: 28 TO 77
LINE 29: 29 TO 78
LINE 30: 30 TO 79
LINE 31: 31 TO 80
LINE 32: 32 TO 81
LINE 33: 33 TO 82
LINE 34: 34 TO 83
LINE 35: 35 TO 84
LINE 36: 36 TO 85
LINE 37: 37 TO 86
LINE 38: 38 TO 87
LINE 39: 39 TO 88
LINE 40: 40 TO 89
LINE 41: 41 TO 90
LINE 42: 42 TO 41
LINE 43: 43 TO 91
LINE 44: 44 TO 92
LINE 45: 10 TO 17
LINE 46: 17 TO 18
LINE 47: 33 TO 34
LINE 48: 34 TO 41
LINE 49: 12 TO 13
LINE 50: 13 TO 14
LINE 51: 14 TO 11
LINE 52: 11 TO 12
LINE 53: 61 TO 62
LINE 54: 62 TO 63
LINE 55: 63 TO 60
LINE 56: 60 TO 61
LINE 57: 10 TO 15
LINE 58: 15 TO 16
LINE 59: 16 TO 17
LINE 60: 17 TO 10
LINE 61: 59 TO 64
LINE 62: 64 TO 65
LINE 63: 65 TO 66
LINE 64: 66 TO 59
LINE 65: 38 TO 39
LINE 66: 39 TO 40
LINE 67: 40 TO 37
LINE 68: 37 TO 38
LINE 69: 87 TO 88
LINE 70: 88 TO 89
LINE 71: 89 TO 86
LINE 72: 86 TO 87
LINE 73: 41 TO 34
LINE 74: 34 TO 35
LINE 75: 35 TO 36
LINE 76: 36 TO 41
LINE 77: 90 TO 83
LINE 78: 83 TO 84
LINE 79: 84 TO 85
LINE 80: 85 TO 90
LINE 81: 46 TO 45
LINE 82: 46 TO 47
LINE 83: 47 TO 49
LINE 84: 49 TO 50
LINE 85: 50 TO 48
LINE 86: 48 TO 45
LINE 87: 45 TO 94
LINE 88: 94 TO 50
LINE 89: 46 TO 93
LINE 90: 93 TO 49
LINE 91: 47 TO 48
LINE 92: 47 TO 93
LINE 93: 48 TO 94
LINE 94: 1 TO 2
LINE 95: 2 TO 3
LINE 96: 3 TO 4
LINE 97: 4 TO 1
LINE 98: 51 TO 52
LINE 99: 52 TO 53
LINE 100: 53 TO 54
LINE 101: 54 TO 51
LINE 102: 5 TO 6
LINE 103: 6 TO 44
LINE 104: 44 TO 26
LINE 105: 26 TO 25
LINE 106: 25 TO 7
LINE 107: 7 TO 5
LINE 108: 55 TO 56
LINE 109: 56 TO 92
LINE 110: 92 TO 75
LINE 111: 75 TO 74
LINE 112: 74 TO 57
LINE 113: 57 TO 55
LINE 114: 25 TO 18
LINE 115: 18 TO 8
LINE 116: 8 TO 7
LINE 117: 7 TO 25
LINE 118: 74 TO 67
LINE 119: 67 TO 58
LINE 120: 58 TO 57
LINE 121: 57 TO 74
LINE 122: 44 TO 43
LINE 123: 43 TO 33
LINE 124: 33 TO 26
LINE 125: 26 TO 44
LINE 126: 92 TO 91
LINE 127: 82 TO 75
LINE 128: 75 TO 92
LINE 129: 18 TO 19
LINE 130: 19 TO 20
LINE 131: 20 TO 21
LINE 132: 21 TO 22
LINE 133: 22 TO 23
LINE 134: 23 TO 24
LINE 135: 24 TO 25
LINE 136: 25 TO 18
LINE 137: 67 TO 68
LINE 138: 68 TO 69
LINE 139: 69 TO 70
LINE 140: 70 TO 71
LINE 141: 71 TO 72
LINE 142: 72 TO 73
LINE 143: 73 TO 74
LINE 144: 74 TO 67
LINE 145: 26 TO 33
LINE 146: 33 TO 32
LINE 147: 32 TO 31
LINE 148: 31 TO 30
LINE 149: 30 TO 29
LINE 150: 29 TO 28
LINE 151: 28 TO 27
LINE 152: 27 TO 26
LINE 153: 75 TO 82
LINE 154: 82 TO 81
LINE 155: 81 TO 80
LINE 156: 80 TO 79
LINE 157: 79 TO 78
LINE 158: 78 TO 77
LINE 159: 77 TO 76
LINE 160: 76 TO 75
LINE 161: 91 TO 82
X-WING VIEW DATA:

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  0,0,100         30,25,5    .7
Now you can stage your own space battles using Solid States and your Atari computer!

Atari self-portrait.

Our last object this time out is an Atari 800 computer, generated by Robert Groves, of Columbus, Ohio. This graphic has a great deal of detail, and I cringe just thinking of all the time Robert must have spent getting it right.

Here’s the data for the Atari 800:

POINTS:112
POINT 1: 4	3	1.5
POINT 2: 4	-3	0
POINT 3: -4	-3	0
POINT 4: -4	3	1.5
POINT 5: -3	3	1.5
POINT 6: -3	0	1.5
POINT 7: -3.6	-0.5	0.9
POINT 8: -3.8	-2.8	0.3
POINT 9: 3.8	-2.8	0.3
POINT 10: 3.6	-0.5	0.9
POINT 11: 3	0	1.5
POINT 12: 3	3	1.5
POINT 13: 2.8	3	1.5
POINT 14: 2.8	1	1.5
POINT 15: 2.8	0	1.5
POINT 16: -2.8	0	1.5
POINT 17: -2.8	1	1.5
POINT 18: -2.8	3	1.5
POINT 19: -2.8	-0.5	0.9
POINT 20: -0.6	-0.5	0.9
POINT 21: 0.6	-0.5	0.9
POINT 22: 2.8	-0.5	0.9
POINT 23: 0.6	-0.4	1
POINT 24: -0.6	-0.4	1
POINT 25: 0.6	-0.4	0.8
POINT 26: -0.6	-0.4	0.8
POINT 27: 0.6	-0.6	0.8
POINT 28: -0.6	-0.6	0.8
POINT 29: -3	-0.8	1
POINT 30: 2	-0.8	1
POINT 31: 2.7	-0.8	1
POINT 32: 3.2	-0.8	1
POINT 33: -3	-1	1
POINT 34: 2	-1	1
POINT 35: 2.7	-1	1
POINT 36: 3.2	-1	1
POINT 37: -3	-1.1	0.9
POINT 38: 2	-1.1	0.9
POINT 39: 2.7	-1.1	0.9
POINT 40: 3.2	-1.1	0.9
POINT 41: -3	-1.3	0.9
POINT 42: 2	-1.3	0.9
POINT 43: 2.7	-1.3	0.9
POINT 44: 3.2	-1.3	0.9
POINT 45: -2.8	-1.4	0.8
POINT 46: 1.8	-1.4	0.8
POINT 47: 2.7	-1.4	0.8
POINT 48: 3.2	-1.4	0.8
POINT 49: 3.2	-1.6	0.8
POINT 50: 2.7	-1.6	0.8
POINT 51: 1.8	-1.6	0.8
POINT 52: -2.8	-1.6	0.8
POINT 53: -2.8	-1.7	0.7
POINT 54: 1.8	-1.7	0.7
POINT 55: 2.7	-1.7	0.7
POINT 56: 3.2	-1.7	0.7
POINT 57: 3.2	-1.9	0.7
POINT 58: 2.7	-1.9	0.7
POINT 59: 1.8	-1.9	0.7
POINT 60: -2.8	-1.9	0.7
POINT 61: -2.4	-2	0.6
POINT 62: 1.4	-2	0.6
POINT 63: 2.7	-2	0.5
POINT 64: 3.2	-2	0.5
POINT 65: 3.2	-2.2	0.5
POINT 66: 2.7	-2.2	0.5
POINT 67: 1.4	-2.2	0.6
POINT 68: -2.4	-2.2	0.6
POINT 69: 0	0	0
POINT 70: 4	-0.8	0
POINT 71: 4	-0.8	0.2
POINT 72: 4	2.7	0.2
POINT 73: 4	2.7	0
POINT 74: 3.9	2.7	-0.2
POINT 75: 3.9	-0.8	-0.2
POINT 76: 4	3	0
POINT 77: 3.9	3	-0.3
POINT 78: 3.9	3	-0.7
POINT 79: 3.6	-0.4	-0.7
POINT 80: 3.2	-2	-0.7
POINT 81: 3.6	-2.5	-0.3
POINT 82: 3.9	-2.8	-0.3
POINT 83: 3.9	-0.4	-0.3
POINT 84: 2.3	-0.4	-0.7
POINT 85: 2.3	-0.4	-0.3
POINT 86: 2.3	3	-0.7
POINT 87: 1.7	-2.7	-0.7
POINT 88: -1.7	-2.7	-0.7
POINT 89: -3.2	-2	-0.7
POINT 90: -3.6	-2.5	-0.3
POINT 91: -2	-2.8	-0.3
POINT 92: 2	-2.8	-0.3
POINT 93: 2	-2.7	-0.1
POINT 94: -2	-2.7	-0.1
POINT 95: -1.7	-2.15	-0.7
POINT 96: 1.7	-2.15	-0.7
POINT 97: 1.7	-2.5	-0.3
POINT 98: -1.7	-2.5	-0.3
POINT 99: -3.9	-2.8	-0.3
POINT 100: -2	-2.7	-0.3
POINT 101: -2	-2.7	-0.1
POINT 102: 2	-2.7	-0.1
POINT 103: 2	-2.7	-0.3
POINT 104: 2.3	3	-0.3
POINT 105: -3.9	3	-0.3
POINT 106: -4	3	0
POINT 107: -2.3	3	-0.3
POINT 108: -2.3	3	-0.7
POINT 109: -2.3	-0.4	-0.7
POINT 110: -2.3	-0.4	-0.3
POINT 111: -3.6	-0.4	-0.7
POINT 112: -3.9	-0.4	-0.3

LINES:122
LINE 1: 1 TO 2
LINE 2: 2 TO 3
LINE 3: 3 TO 4
LINE 4: 4 TO 1
LINE 5: 5 TO 6
LINE 6: 6 TO 7
LINE 7: 7 TO 8
LINE 8: 8 TO 9
LINE 9: 9 TO 10
LINE 10: 10 TO 11
LINE 11: 11 TO 12
LINE 12: 6 TO 6
LINE 13: 6 TO 11
LINE 14: 7 TO 10
LINE 15: 13 TO 15
LINE 16: 16 TO 18
LINE 17: 14 TO 17
LINE 18: 19 TO 20
LINE 19: 21 TO 22
LINE 20: 23 TO 25
LINE 21: 25 TO 27
LINE 22: 80 TO 89
LINE 23: 24 TO 26
LINE 24: 26 TO 28
LINE 25: 27 TO 28
LINE 26: 24 TO 23
LINE 27: 29 TO 30
LINE 28: 31 TO 32
LINE 29: 31 TO 35
LINE 30: 35 TO 36
LINE 31: 36 TO 32
LINE 32: 30 TO 34
LINE 33: 33 TO 34
LINE 34: 33 TO 29
LINE 35: 37 TO 38
LINE 36: 38 TO 42
LINE 37: 42 TO 41
LINE 38: 41 TO 37
LINE 39: 39 TO 40
LINE 40: 40 TO 44
LINE 41: 44 TO 43
LINE 42: 43 TO 39
LINE 43: 45 TO 46
LINE 44: 47 TO 48
LINE 45: 48 TO 49
LINE 46: 49 TO 50
LINE 47: 50 TO 47
LINE 48: 46 TO 51
LINE 49: 51 TO 52
LINE 50: 52 TO 45
LINE 51: 53 TO 54
LINE 52: 55 TO 56
LINE 53: 56 TO 57
LINE 54: 57 TO 58
LINE 55: 58 TO 55
LINE 56: 59 TO 54
LINE 57: 59 TO 60
LINE 58: 60 TO 53
LINE 59: 61 TO 62
LINE 60: 63 TO 64
LINE 61: 64 TO 65
LINE 62: 65 TO 66
LINE 63: 66 TO 63
LINE 64: 62 TO 67
LINE 65: 67 TO 68
LINE 66: 68 TO 61
LINE 67: 73 TO 76
LINE 68: 71 TO 72
LINE 69: 72 TO 74
LINE 70: 74 TO 75
LINE 71: 75 TO 71
LINE 72: 77 TO 82
LINE 73: 3 TO 8
LINE 74: 84 TO 86
LINE 75: 80 TO 81
LINE 76: 79 TO 83
LINE 77: 84 TO 85
LINE 78: 85 TO 83
LINE 79: 84 TO 79
LINE 80: 79 TO 80
LINE 81: 85 TO 104
LINE 82: 82 TO 92
LINE 83: 96 TO 97
LINE 84: 97 TO 81
LINE 85: 97 TO 92
LINE 86: 92 TO 87
LINE 87: 92 TO 93
LINE 88: 93 TO 94
LINE 89: 94 TO 91
LINE 90: 91 TO 88
LINE 91: 88 TO 87
LINE 92: 88 TO 95
LINE 93: 95 TO 98
LINE 94: 98 TO 91
LINE 95: 91 TO 99
LINE 96: 90 TO 89
LINE 97: 90 TO 98
LINE 98: 87 TO 96
LINE 99: 3 TO 106
LINE 100: 106 TO 105
LINE 101: 107 TO 108
LINE 102: 2 TO 82
LINE 103: 108 TO 109
LINE 104: 109 TO 110
LINE 105: 110 TO 112
LINE 106: 112 TO 111
LINE 107: 111 TO 109
LINE 108: 111 TO 89
LINE 109: 99 TO 105
LINE 110: 77 TO 76
LINE 111: 104 TO 86
LINE 112: 86 TO 108
LINE 113: 107 TO 108
LINE 114: 77 TO 105
LINE 115: 76 TO 1
LINE 116: 106 TO 4
LINE 117: 107 TO 110
LINE 118: 101 TO 102
LINE 119: 103 TO 102
LINE 120: 3 TO 99
LINE 121: 9 TO 2
LINE 122: 70 TO 2
800 VIEW DATA:

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
 -12,-12,12       0,0,0       1

800 TOP VIEW DATA:

OBSERVER LOC.   LOOKED AT   ZOOM
-------------   ---------   ----
  0,0,1500        0,0,0     100

Well, that just about does it for 3-D images this month. We received several others, some of which were just too large to print. If you’ve got a 3-D object you’d like to send, try to keep it under 250 points and lines total.

No more boo-boos.

Vinette DePhillipe and Ted Talay, of Hampton, Virginia, submitted this short program modification which traps errors in the initial data entry process. This eliminates the annoyance of having to re-enter a whole object’s data when an entry error is made.

270 FOR I=1 TO PS:? "POINT ";I
272 TRAP 272: INPUT Q1,Q2,Q3
274 X(I)=Q1:Y(I)=Q2:Z(I)=Q3:NEXT I
310 FOR I=1 TO L5:? :? "LINE ";I
312 ? "FROM POINT";:TRAP 312:INPUT Q1:LN(I,0)=Q1
314 ? "  TO POINT";:TRAP 314:INPUT Q1:LN(I,1)=Q1
316 NEXT I

Here’s a quick modification I wrote to give Solid States users with the 1020 Plotter larger plots. It turns the output sideways, giving 6.25 X 3.75 inch plots. No special action is needed.

210 TRAP 190:CL0SE #3:OPEN #3,8,0,"P":? #3;EG$;"*H*I*M0,−820*I":PC=0
860 IF O$="Y" THEN ? #3;"M0,0*D480,0*D480,800*D0,800*D0,0"
1000 ? #3;"M";(191−Y1)*2.5;",";(319−X1)*2.5;"*D";(191−YW)*2.5;",";(319−XW)*2.5:PC=PC+1
1020 IF PC>0 THEN ? #3;"H*M0,−820*I":PC=0

Printer output!

I’ve received quite a few letters from readers wanting hard-copy output on their Epson, Gemini 10X and C.Itoh printers. You asked for it, and you’ve got it!

Here’s the code for Epson-compatible printers (such as Gemini 10X):

1045 IF PEEK(53279)=3 THEN GOSUB 3000:GOTO 1840
3000 REM *** EPSON GRAPHICS DUMP ***
3010 SCREEN=PEEK(88)+PEEK(89)*256:TRAP 3040:CLOSE #1:OPEN #1,8,0,"P:":? #1;"^A";CHR$(8)
3020 FOR I=SCREEN TO SCREEN+39:? #1;"^K";CHR$(192);CHR$(0);
3030 FOR J=I+7640 TO I STEP −40:PUT #1,PEEK(J):NEXT J:? #1:NEXT I:CLOSE #1
3040 RETURN

And here’s the code for C.Itoh printers:

1045 IF PEEK(53279)=3 THEN GOSUB 3000:GOTO 1040
3000 REM *** C.ITOH GRAPHICS DUMP ***
3010 SCREEN=PEEK(88)+PEEK(89)*256:TRAP 3040:CLOSE #1:OPEN #1,8,0,"P:":? #1;"^T16"
3020 FOR I=SCREEN+39 TO SCREEN STEP −1:? #1;"^S0192";
3030 FOR J=I TO 1+7640 STEP 40:PUT #1,PEEK(J):NEXT J:? #1:NEXT I:CLOSE #1
3040 RETURN

After Solid States has completed the picture on the screen, you’ll hear a short tone. Pressing OPTION will print the screen on your printer (the process takes about 2.5 minutes). It’s as easy as that! If you don’t want to print the screen, pressing START will return you to the coordinate entry point, just like the original version of the program.

If your printer isn’t ready, the program will go back and wait for the START or OPTION keys again. Simply ready your printer and press OPTION to print the screen.

Remember, your printer must be equipped with graphics ability in order for the screen-print function to work.

Supply and demand.

As long as I receive your 3-D object data and suggestions for modifications, we’ll be running Solid States updates like this indefinitely.

One thing I’d like to do is equip Solid States with hidden-line removal, so the drawings won’t be cluttered with lines that should be invisible. If you know of a good hidden-line removal algorithm, please let me know. I’m checking my resources, but, so far, I haven’t found anything specific on the process. If you want to see your name in lights (well, at least, in the pages of ANALOG), send me anything you can find!

I’m also working on converting Solid States to a 100% machine language program for much faster operation. I’m going to wait until I find a hidden-line algorithm before I do this, though.

Keep those 3-D objects coming! Send them to:

Solid States
c/o ANALOG Computing
P.O. Box 23
Worcester, MA 01603

If you don’t have the Solid States program, ANALOG issue 16 is still available as a back issue. See the ad elsewhere in this issue.