THE
PAST
MASTER
CLUB
3D PLANE & FLAK.HTM
' ** 3DPlane2.BAS FEB/97 BY: NICK K. VAN VLIET (416) 921-4653
' ** sterioscopic airplane VERS2.13 REV AUG99
' ** Remmember if you can spread your eyes apart, as if looking into the
' ** distance, then apply yourself to these sterioscopic drawings by seeing
' ** 3 pictures, the center one being 3D! -ie. each eye is lined up with the
' ** appropriate picture L/R. One drawback is that the 3D picture is smaller;
' ** since, 3 pictures occupy the one picture if you use a vertical sheet in
' ** in the center of the screen.
'
' TO VIEW 3D: HOLD A LONG PLAIN SHEET VERTICALLY BETWEEN THE CENTER OF THE
' SCREEN AND YOUR NOSE SO THAT EACH EYE SEES ONE OBJECT AND THE MIND SEES A 3D
' PROJECTION OF THE DESIRED EFFECT.
' IF YOU LOOK AT CONSECUTIVE FILM FRAMES (OR EVERY OTHER ONE) LIKE A STERIO-
' SCOPIC VIEW THEN AS LONG AS THERE IS MOTION IN IT YOU WILL SEE A 3D PRO-
' JECTION!
DEFINT H-Z 'INTEGER
DEFDBL A-G 'DOUBLE
TYPE COORD
x AS DOUBLE
y AS DOUBLE
z AS DOUBLE
END TYPE
TYPE LAYER 'sorting stage
g AS DOUBLE 'z-hight
R AS INTEGER 'FACET 1
S AS INTEGER ' " 2
T AS INTEGER ' " 3
U AS INTEGER ' " 4
J AS INTEGER 'clr
ST AS STRING * 1 'ltr$
END TYPE
DECLARE FUNCTION GetKeys () 'keyboard
DECLARE FUNCTION TestCoord (Plane() AS COORD, R, S, T, U, L, m)
DECLARE FUNCTION Area (X1, Y1, X2, y2, X3, y3)
DECLARE SUB TDelay () 'delay
DECLARE SUB StoreSorted () 'store
DECLARE SUB DrawStoreSort (Plane() AS COORD, x0, y0) 'display as sorted
DECLARE SUB TranslateY (Rotation) 'sterio 10
DECLARE SUB TranslateX () 'H 'rot'n X
DECLARE SUB TranslateXZ () 'K 'rot'n Y
DECLARE SUB TranslateZ () 'K 'rot'n Z
DECLARE SUB Face (Plane() AS COORD, R, S, T, U, x0, y0, CLR, LTR$)
'each Facet
DECLARE SUB DrawPlane (Plane() AS COORD, x0, y0) 'SUB draw a Plane
DECLARE SUB Store (Plane() AS COORD, N, RS, SS, TS, US, CLRS, LTRS$)
DECLARE SUB FRAME (XX, YY, x0, y0)
DECLARE SUB CLOUDS ()
DECLARE SUB SKY ()
DECLARE SUB COLUMN ()
DECLARE SUB FRAME2 (XX, YY, x0, y0, ZZ)
DECLARE SUB DISPLAYLINE (w, x, y)
CONST Height = 7
CONST fctr = 40
CONST True = -1 'LOGIC TRUE
CONST False = NOT True 'LOGIC FALSE
CONST pi = 3.141592654# 'PI /7 = 0.44880 4 * ATN(1#) SEE LAST LINE
CONST NN = 178 '# OF ELEMENTS
CONST NSORT = 51 '# OF SECT'NS
CONST SCALE = 3 'scale factor 3=OK
CONST MIL = 10000# 'INFINITY
CONST MaxMX = 319 '640x400
CONST MaxMY = 199 'full screen
CONST ROT = 8 'ROT'N FOR RIGHT EYE
CONST offset = 160 'SEPARATION
CONST SEGMENT = 80 '1ST OBJECT
COMMON SHARED Store1() AS LAYER
COMMON SHARED D, f, L, m, AREA1, CHA
COMMON SHARED LeftPlane() AS COORD, RightPlane() AS COORD, Plane() AS COORD
COMMON SHARED x0, y0, H, K, a$, g, R, S, T, U, c, CLR, LTR$, WRFRM$
COMMON SHARED w, x, y, z, ZZ
DIM SHARED Store1(NSORT) AS LAYER
DIM SHARED Store2(2) AS LAYER
SCREEN 13 '320x200 256 colors
CLS
DIM LeftPlane(1 TO NN) AS COORD
DIM RightPlane(1 TO NN) AS COORD
DIM Plane(1 TO NN) AS COORD
a$ = " "
FOR i = 1 TO NN
READ a, b, c
LeftPlane(i).x = (a * SCALE - 16 * SCALE) * 1 '2=SWEPTBACK
LeftPlane(i).y = b * SCALE * 1 '2=WIDE GLIDER
LeftPlane(i).z = c * SCALE * 1 '+ SCALE 2=STUBBY TRAINER
NEXT i
CLS
R = 1: L = 1: H = -45: K = 45: CHA = 0
WRFRM$ = "OFF" 'SOLID MODEL
''WRFRM$ = "ON" 'WIRE FRAME MODEL
K = -45
TranslateY -45
H = -110
TranslateX
K = -20
TranslateZ
K = 10
'============= MAIN PROGRAM LOOP ==================
DO
IF WRFRM$ = "ON" THEN H = RND * 30: TranslateX 'translate LeftPlane H degrees X-AXIS
IF WRFRM$ = "ON" THEN K = RND * 30: TranslateXZ 'translate LeftPlane K degrees Z-AXIS
IF CHA >= 350 THEN CHA = 0 ELSE CHA = CHA + K
LP1 = 60
LP = FIX(CHA / 360 * LP1)
IF LP >= LP1 / 2 THEN LP0 = -1 ELSE LP0 = 1
IF LP0 > 0 THEN LPT = LP * LP0 ELSE LPT = LP1 + LP * LP0
TranslateXZ 'rotate about X-AXIS
TranslateY ROT 'translate RightPlane 10 degrees
COLOR 2
LOCATE 23, 7
PRINT "3D KVV 3D KVV"
CLOUDS: SKY: COLUMN
DrawPlane LeftPlane(), SEGMENT, MaxMY / 2 'Left 3D Plane
DrawPlane RightPlane(), SEGMENT + offset - LP1 / 4 + LPT, MaxMY / 2'Right 3D Plane
KeyStroke$ = INKEY$ 'get any keystrokes
IF LEN(KeyStroke$) THEN KeyVal = ASC(KeyStroke$) 'convert to an integer
TDelay
COLOR 0
'INPUT U$
CLS
LOOP WHILE KeyVal <> 27 'keep going until escape is pressed
END
'x y z FACET POINT DATA
DATA 29, 1 , 0: '1 TAIL
DATA 36, 1 , 0: '2
DATA 36, 3 , 8: '3
DATA 34, 3 , 8: '4
DATA 29, -1 , 0: '5 TAIL L
DATA 36, -1 , 0: '6
DATA 36, -3 , 8: '7
DATA 34, -3 , 8: '8
DATA 9 , 0 , 2: '9 BACK
DATA 36, 0 , 0: '10
DATA 2 , 1 , 1: '11
DATA 9 , 0 , 2: '12 BACK L
DATA 36, 0 , 0: '13
DATA 2 , -1 , 1: '14
DATA 2 ,0.5, 3: '15 CANOPY 1
DATA 4 , 0 , 3: '16
DATA 9 , 0 , 2: '17
DATA 2 ,-0.5,3: '18 1L
DATA 4 , 0 , 3: '19
DATA 9 , 0 , 2: '20
DATA 2 , 0.5, 3: '21 CANOPY 2
DATA 9 , 0 , 2: '22
DATA 2 , 1 , 1: '23
DATA 2 ,-0.5, 3: '24 CANOPY 2L
DATA 9 , 0 , 2: '25
DATA 2 ,-1 , 1: '26
DATA 2 , 0.5, 3: '27 CANOPY TOP
DATA 4 , 0 , 3: '28
DATA 2 ,-0.5, 3: '29
DATA 2 , 0.5, 3: '30 CONOPY FRONT
DATA 0 , 0.5, 1: '31
DATA 0 ,-0.5, 1: '32
DATA 2 ,-0.5, 3: '33
DATA 2 ,0.5, 3: '34 CONOPY 3
DATA 2 , 1 , 1: '35
DATA 0 ,0.5, 1: '36
DATA 2 ,-0.5, 3: '37 CONOPY 3L
DATA 2 ,-1 , 1: '38
DATA 0 ,-0.5, 1: '39
DATA 2 , 1 , 0: '40 'COCKPIT 1
DATA 2 , 1 , 1: '41
DATA 0 ,0.5, 1: '42
DATA 2 ,-1 , 0: '43 'COCKPIT 1L
DATA 2 ,-1 , 1: '44
DATA 0 ,-0.5, 1: '45
DATA 2 , 1 , 0: '46 'COCKPIT 2
DATA 0 ,0.5, 1: '47
DATA 0 , 1 , 0: '48
DATA 2 ,-1 , 0: '49 'COCKPIT 2 L
DATA 0 ,-0.5, 1: '50
DATA 0 ,-1 , 0: '51
DATA 0 , 1 , 0: '52 COCKPIT 3
DATA 0 , 1 ,-2: '53
DATA 2 , 1 ,-2: '54
DATA 2 , 1 , 0: '55
DATA 0 ,-1 , 0: '56 COCKPIT L 3
DATA 0 ,-1 ,-2: '57
DATA 2 ,-1 ,-2: '58
DATA 2 ,-1 , 0: '59
DATA 0 , 1 ,-2: '60 COCKPIT BOTTM 4
DATA 5 , 1 ,-2: '61
DATA 5 ,-1 ,-2: '62
DATA 0 ,-1 ,-2: '63
DATA 2 , 1 , 1: '64 BODY
DATA 2 , 1 ,-2: '65
DATA 5, 0 ,-2: '66
DATA 5, 0 , 0: '67
DATA 2 ,-1 , 1: '68 BODY L
DATA 2 ,-1 ,-2: '69
DATA 5, 0 ,-2: '70
DATA 5, 0 , 0: '71
DATA 5 , 1 ,-2: '72 BOTTOM
DATA 36, 0 ,-2: '73
DATA 5 ,-1 ,-2: '74
DATA 2 , 1 , 0: '75 WING
DATA 29, 0.3, 0: '76
DATA 29, 16, 0: '77
DATA 26, 16, 0: '78
DATA 2 ,-1 , 0: '79 WING L
DATA 29, -0.3, 0: '80
DATA 29, -16, 0: '81
DATA 26, -16, 0: '82
DATA 29 , 1 , 0: '83 TAIL WING CONECT'N
DATA 29 , 2 , 0: '84
DATA 36 , 2 , 0: '85
DATA 36 , 1 , 0: '86
DATA 32 ,17 , 0: '87 WING END
DATA 31 ,16 , 0: '88
DATA 20 ,16 , 0: '89
DATA 29 ,17 , 0: '90
DATA 32 ,-17, 0: '94 WING END L
DATA 31 ,-16, 0: '91
DATA 20 ,-16, 0: '92
DATA 29 ,-17, 0: '93
DATA 5 , 2 , 0: '95 ENGINE SIDE
DATA 5 , 2 ,-3: '96
DATA 36, 1 ,-2: '97
DATA 36, 1 , 0: '98
DATA 5 ,-2 , 0: '99 ENGINE SIDE L
DATA 5 ,-2 ,-3: '100
DATA 36,-1 ,-2: '101
DATA 36,-1 , 0: '102
DATA 5 ,1,-3: '103 ENGINE BOTTOM
DATA 5 ,2,-3: '104
DATA 36, 1 ,-2: '105
DATA 36, 0 ,-2: '106
DATA 5 ,-1,-3: '107 ENGINE BOTTOM L
DATA 5 ,-2,-3: '108
DATA 36,-1 ,-2: '109
DATA 36, 0 ,-2: '110
DATA 5 , 1 , 0: '111 ENGINE INSIDE
DATA 5 , 1 ,-3: '112
DATA 36, 0 ,-2: '113
DATA 36, 0 , 0: '114
DATA 5 ,-1 , 0: '115 ENGINE INSIDE L
DATA 5 ,-1 ,-3: '116
DATA 36, 0 ,-2: '117
DATA 36, 0 , 0: '118
DATA 0 , 1, 0: '119 NOSE 1
DATA 0 , 1, -2: '120
DATA -8, 0, -2: '121
DATA 0 , 1, 0: '122
DATA 0 ,-1 , 0: '123 NOSE 1 L
DATA 0 ,-1 ,-2: '124
DATA -8,-0 ,-2: '125
DATA 0 , -1 , 0: '126
DATA 0 ,0.5, 1: '127 NOSE 1 TOP
DATA 0 ,-0.5,1: '128
DATA -8,-0 ,-2: '129
DATA 0 ,0.5, 1: '130
DATA 0, 1 , 0: '131 NOSE 1 EXTRA
DATA -3, 0.5, 0: '132
DATA 0, 0.5, 1: '133
DATA 0,-1 , 0: '134 NOSE 1 EXTRA L
DATA -3,-0.5, 0: '135
DATA 0,-0.5, 1: '136
DATA 0 , 1, -2: '137 NOSE 1 BOTTOM
DATA 0 ,-1, -2: '138
DATA -8,-0, -2: '139
DATA 6 , 0, 2.5: '140 CANOPY TAIL #43
DATA 36, 1 , 0: '141 BURNER NEW
DATA 36, 1 , -2: '142
DATA 36,-1 , -2: '143
DATA 36,-1 , 0: '144
DATA 36, 0, 0: '145 BODY CENTER NEW
DATA 9, 0, 2: '146
DATA 0, 0, 0: '147
DATA -8, 0, -2: '148 'ANTENA
DATA 0, 0, 0: '149 NOSE BODY NEW
DATA 0, 0, -2: '150
DATA -8, 0, -2: '151
DATA -11, 0, -2: '152 'ANTENA
DATA 29 ,-1 , 0: '153 TAIL WING CONECT'N L
DATA 29 ,-2 , 0: '154
DATA 36 ,-2 , 0: '155
DATA 36 ,-1 , 0: '156
DATA 31 , 2 , 0: '157 TAIL WING
DATA 36 , 7 , 0: '158
DATA 36 , 2 , 0: '159
DATA 36 , 7, 0: '160 'FLAP
DATA 37 , 7, 0: '161
DATA 37 , 3, 0: '162
DATA 36 , 3 , 0: '163
DATA 31 ,-2 , 0: '164 TAIL WING L
DATA 36 ,-7 , 0: '165
DATA 36 ,-2 , 0: '166
DATA 36 ,-7, 0: '167 'FLAP L
DATA 37 ,-7, 0: '168
DATA 37 ,-3, 0: '169
DATA 36 ,-3 , 0: '170
DATA 5 , 1 , 0: '171 ENGINE COVER
DATA 5 , 2 , 0: '172
DATA 5 , 2 ,-3: '173
DATA 5 , 1 ,-3: '174
DATA 5 ,-1 , 0: '175 ENGINE COVER L
DATA 5 ,-2 , 0: '176
DATA 5 ,-2 ,-3: '177
DATA 5 ,-1 ,-3: '178
DATA 0, 0, 0
FUNCTION Area (X1, Y1, X2, y2, X3, y3)
Area = ABS(CDBL((X1 * y2 + X2 * y3 + X3 * Y1 - (Y1 * X2 + y2 * X3 + y3 * X1))))
END FUNCTION
SUB CLOUDS
COLOR 15
LOCATE 5, 1
PRINT " �۲� �۲� "
PRINT "�۲� �۲� "
PRINT " �۲� �۲� "
COLOR 7
PRINT " �۲� �۲� "
COLOR 8
PRINT " �۲� �۲� "
COLOR 15
PRINT " �۲� �۲� "
COLOR 15
PRINT "�۲� �۲� "
PRINT " �۲� �۲� "
PRINT " �۲� �۲� "
COLOR 8
PRINT " �۲� �۲� "
COLOR 15
PRINT " �۲� �۲� "
COLOR 7
PRINT " �۲� �۲� "
PRINT
PRINT
COLOR 15
PRINT " �۲� �۲� "
COLOR 8
PRINT " �۲� �۲� "
END SUB
SUB COLUMN
z = 0
FOR SEGMENT1 = 1 TO 20 '1st column
DISPLAYLINE 0, (RND * 60), SEGMENT1 * 8 ' +10
NEXT SEGMENT1
Z1 = z + fctr
FOR SEGMENT1 = 1 TO 20 '75 70 '2nd column
DISPLAYLINE 20, (RND * 60 + 65), SEGMENT1 * 8
NEXT SEGMENT1
END SUB
SUB DISPLAYLINE (w, x, y) 'w x0 y0
X1 = RND * 14 + 2 'length of rect'ngl
X2 = RND * 2 * x - x 'loct'n x0?
offset2 = RND * 40 + 155 ' + w '3d
DO
z = RND * 13 + 1 'COLOR
LOOP WHILE (z = 7 OR z = 6)
FRAME2 X1, Height, x, y, z
FRAME2 X1, Height, x + offset2, y, z
END SUB
SUB DrawPlane (Plane() AS COORD, x0, y0)
IF WRFRM$ = "ON" THEN
Face Plane(), 1, 2, 3, 4, x0, y0, 15, "A '1 TAIL"
Face Plane(), 5, 6, 7, 8, x0, y0, 15, "B '5 TAIL L GREEN 4"
Face Plane(), 9, 10, 11, 9, x0, y0, 1, "C '9 BACK blue 1"
Face Plane(), 12, 13, 14, 12, x0, y0, 1, "D '12 BACK L blu 1"
Face Plane(), 15, 16, 17, 15, x0, y0, 10, "E '15 CANOPY 1"
Face Plane(), 18, 19, 20, 21, x0, y0, 10, "F '18 CANOPY 1L"
Face Plane(), 21, 22, 23, 21, x0, y0, 10, "G '21 CANOPY 2"
Face Plane(), 24, 25, 26, 24, x0, y0, 10, "H '24 CANOPY 2L"
Face Plane(), 27, 28, 29, 27, x0, y0, 10, "I '27 CANOPY TOP"
Face Plane(), 30, 31, 32, 33, x0, y0, 10, "J '30 CONOPY FRONT"
Face Plane(), 34, 35, 36, 34, x0, y0, 10, "K '34 CONOPY 3"
Face Plane(), 37, 38, 39, 37, x0, y0, 10, "L '37 CONOPY 3L"
Face Plane(), 40, 41, 42, 40, x0, y0, 1, "M '40 'COCKPIT 1"
Face Plane(), 43, 44, 45, 43, x0, y0, 1, "N '43 'COCKPIT 1L"
Face Plane(), 46, 47, 48, 46, x0, y0, 1, "O '46 'COCKPIT 2"
Face Plane(), 49, 50, 51, 49, x0, y0, 1, "P '49 'COCKPIT 2 L"
Face Plane(), 52, 53, 54, 55, x0, y0, 1, "Q '52 COCKPIT 3"
Face Plane(), 56, 57, 58, 59, x0, y0, 1, "R '56 COCKPIT L 3"
Face Plane(), 60, 61, 62, 63, x0, y0, 1, "S '60 COCCKPIT BOTTM 4"
Face Plane(), 64, 65, 66, 67, x0, y0, 1, "T '64 BODY"
Face Plane(), 68, 69, 70, 71, x0, y0, 1, "U '68 BODY L"
Face Plane(), 72, 73, 74, 72, x0, y0, 1, "V '72 BOTTOM"
Face Plane(), 75, 76, 77, 78, x0, y0, 9, "W '75 WING"
Face Plane(), 79, 80, 81, 82, x0, y0, 9, "X '79 WING L"
Face Plane(), 83, 84, 85, 86, x0, y0, 5, "Y '83 TAIL WING CONECT'N"
Face Plane(), 87, 88, 89, 90, x0, y0, 4, "Z '87 MISSILE"
Face Plane(), 91, 92, 93, 94, x0, y0, 4, "a '91 MISSILE L"
'Face Plane(), 95, 96, 97, 98, X0, Y0, 4, "b '95 ENGINE SIDE"
'Face Plane(), 99, 100, 101, 102, X0, Y0, 4, "c '99 ENGINE SIDE L"
Face Plane(), 103, 104, 105, 106, x0, y0, 4, "d '103 ENGINE BOTTOM"
Face Plane(), 107, 108, 109, 110, x0, y0, 4, "e '107 ENGINE BOTTOM L"
'Face Plane(), 111, 112, 113, 114, X0, Y0, 4, "f '111 ENGINE INSIDE"
'Face Plane(), 115, 116, 117, 118, X0, Y0, 4, "g '115 ENGINE INSIDE L"
Face Plane(), 119, 120, 121, 122, x0, y0, 12, "h '119 NOSE 1"
Face Plane(), 123, 124, 125, 126, x0, y0, 12, "i '123 NOSE 1 L"
Face Plane(), 127, 128, 129, 130, x0, y0, 12, "j '127 NOSE 1 TOP"
Face Plane(), 131, 132, 133, 131, x0, y0, 12, "k '131 NOSE 1 EXTRA"
Face Plane(), 134, 135, 136, 134, x0, y0, 12, "l '134 NOSE 1 EXTRA L"
Face Plane(), 137, 138, 139, 140, x0, y0, 12, "m '137 NOSE 1 BOTTOM"
Face Plane(), 141, 142, 143, 144, x0, y0, 14, "n 'BURNER NEW"
'Face Plane(), 145, 146, 147, 145, X0, Y0, 1, "o '144 BODY CENTER NEW"
Face Plane(), 148, 152, 148, 152, x0, y0, 1, "p '147 ANTENA NEW"
'Face Plane(), 150, 151, 152, 150, X0, Y0, 14, "q '150 NOSE 2 BOTTOM"
Face Plane(), 153, 154, 155, 156, x0, y0, 5, "r '153 TAIL WING CONECT'N L"
Face Plane(), 157, 158, 159, 157, x0, y0, 5, "s '157 TAIL WING"
Face Plane(), 160, 161, 162, 163, x0, y0, 11, "t '160 'FLAP"
Face Plane(), 164, 165, 166, 164, x0, y0, 5, "u '164 TAIL WING L"
Face Plane(), 167, 168, 169, 170, x0, y0, 11, "v '167 'FLAP L"
Face Plane(), 171, 172, 173, 174, x0, y0, 4, "w" '171 'ENGINE COVER
Face Plane(), 175, 176, 177, 178, x0, y0, 4, "x" '167 'ENGINE COVER L
ELSE 'WRFRM OFF
'1=BU 2=GN 3=CY 4=R 5=M 6=GY 7=GY 8=P 9=LBU 10=LGN 11=LCY 12=OR 13=LP 14=Y 15=W
REDIM Store1(1 TO NSORT) AS LAYER 'array for image locations
'' i R S T U CLR LTR$
Store Plane(), 1, 160, 161, 162, 160, 15, "A" 'PREP
Store Plane(), 1, 1, 2, 3, 4, 13, "A" '1 TAIL
Store Plane(), 2, 5, 6, 7, 8, 13, "B" '5 TAIL L GREEN
Store Plane(), 3, 9, 10, 11, 9, 1, "C" '9 BACK
Store Plane(), 4, 12, 13, 14, 12, 1, "D" '12 BACK L
Store Plane(), 5, 15, 16, 17, 15, 10, "E" '15 CANOPY 1
Store Plane(), 6, 18, 19, 20, 21, 10, "F" '18 1 L
Store Plane(), 7, 21, 22, 23, 21, 10, "G" '21 CANOPY 2
Store Plane(), 8, 24, 25, 26, 24, 10, "H" '24 CANOPY 2L
Store Plane(), 9, 27, 28, 29, 27, 10, "I" '27 CANOPY TOP
Store Plane(), 10, 30, 31, 32, 33, 10, "J" '30 CONOPY FRONT
Store Plane(), 11, 34, 35, 36, 34, 10, "K" '34 CONOPY 3
Store Plane(), 12, 37, 38, 39, 37, 10, "L" '37 CONOPY 3L
Store Plane(), 13, 40, 41, 42, 40, 1, "M" '40 'COCKPIT 1
Store Plane(), 14, 43, 44, 45, 43, 1, "N" '43 'COCKPIT 1L
Store Plane(), 15, 46, 47, 48, 46, 1, "O" '46 'COCKPIT 2
Store Plane(), 16, 49, 50, 51, 49, 1, "P" '49 'COCKPIT 2 L
Store Plane(), 17, 52, 53, 54, 55, 1, "Q" '52 COCKPIT 3
Store Plane(), 18, 56, 57, 58, 59, 1, "R" '56 COCKPIT L 3
Store Plane(), 19, 60, 61, 62, 63, 1, "S" '60 COCCKPIT BOTTM 4
Store Plane(), 20, 64, 65, 66, 67, 1, "T" '64 BODY
Store Plane(), 21, 68, 69, 70, 71, 1, "U" '68 BODY L
Store Plane(), 22, 72, 73, 74, 72, 1, "V" '72 BOTTOM
Store Plane(), 23, 75, 76, 77, 78, 9, "W" '75 WING
Store Plane(), 24, 79, 80, 81, 82, 9, "X" '79 WING L
Store Plane(), 25, 83, 84, 85, 86, 5, "Y" '83 TAIL WING CONECT'N
Store Plane(), 26, 87, 88, 89, 90, 4, "Z" '87 WING END new
Store Plane(), 27, 91, 92, 93, 94, 4, "a" '91 WING END L new
Store Plane(), 28, 95, 96, 97, 98, 8, "b" '95 ENGINE SIDE
Store Plane(), 29, 99, 100, 101, 102, 8, "c" '99 ENGINE SIDE L
Store Plane(), 30, 103, 104, 105, 106, 3, "d" '103 ENGINE BOTTOM
Store Plane(), 31, 107, 108, 109, 110, 3, "e" '107 ENGINE BOTTOM L
Store Plane(), 32, 111, 112, 113, 114, 1, "f" '111 ENGINE INSIDE
Store Plane(), 33, 115, 116, 117, 118, 1, "g" '115 ENGINE INSIDE L
Store Plane(), 34, 119, 120, 121, 122, 12, "h" '119 NOSE 1
Store Plane(), 35, 123, 124, 125, 123, 12, "i" '123 NOSE 1 L
Store Plane(), 36, 127, 128, 129, 127, 12, "j" '127 NOSE 1 TOP
Store Plane(), 37, 131, 132, 133, 131, 12, "k" '131 NOSE 1 EXTRA
Store Plane(), 38, 134, 135, 136, 134, 12, "l" '134 NOSE 1 EXTRA L
Store Plane(), 39, 137, 138, 139, 137, 12, "m" '137 NOSE 1 BOTTOM
Store Plane(), 40, 141, 142, 143, 144, 14, "n" '141 BURNER NEW
Store Plane(), 41, 145, 146, 147, 145, 1, "o" '144 BODY CENTER NEW
Store Plane(), 42, 149, 150, 151, 149, 12, "p" '147 NOSE 1 BODY NEW
Store Plane(), 43, 28, 140, 28, 140, 10, "q" '152 28 EXTRA ELEMENT CANOPY TAIL
Store Plane(), 44, 153, 154, 155, 156, 5, "r" '153 TAIL WING CONECT'N L
Store Plane(), 45, 157, 158, 159, 157, 5, "s" '157 TAIL WING
Store Plane(), 46, 160, 161, 162, 163, 11, "t" '160 'FLAP
Store Plane(), 47, 164, 165, 166, 164, 5, "u" '164 TAIL WING L
Store Plane(), 48, 167, 168, 169, 170, 11, "v" '167 'FLAP L
Store Plane(), 49, 171, 172, 173, 174, 4, "w" '171 'ENGINE COVER
Store Plane(), 50, 175, 176, 177, 178, 4, "x" '167 'ENGINE COVER L
Store Plane(), 51, 148, 152, 148, 152, 1, "y" '148 'ANTENA
StoreSorted
DrawStoreSort Plane(), x0, y0
END IF
COLOR 15
END SUB
SUB DrawStoreSort (Plane() AS COORD, x0, y0)
FOR JJ = 1 TO NSORT
IF NOT (CHA >= 200 AND CHA <= 290 AND (Store1(JJ).R = 15 OR Store1(JJ).R = 18 OR Store1(JJ).R = 21 OR Store1(JJ).R = 24)) THEN
Face Plane(), Store1(JJ).R, Store1(JJ).S, Store1(JJ).T, Store1(JJ).U, x0, y0, FIX(Store1(JJ).J), Store1(JJ).ST
END IF
IF (Store1(JJ).R = 9 OR Store1(JJ).R = 12) THEN 'REDRAW CANOPY LINE
IF (CHA < 200 OR CHA > 290) THEN
LINE (FIX(Plane(Store1(JJ).R).x) + x0, FIX(Plane(Store1(JJ).R).y) + y0)-(FIX(Plane(Store1(JJ).T).x) + x0, FIX(Plane(Store1(JJ).T).y) + y0), 10
END IF
END IF
IF (Store1(JJ).R = 75 OR Store1(JJ).R = 79) THEN 'WING/WING-L HIDES CANOPY
IF (FIX(Plane(9).z) >= 12 AND FIX(Plane(9).z) <= 18) THEN
Face Plane(), 9, 10, 11, 9, x0, y0, 1, "C" 'REDRAW BACK
'REDRAW GREEN CANOPY LINE
LINE (FIX(Plane(9).x) + x0, FIX(Plane(9).y) + y0)-(FIX(Plane(11).x) + x0, FIX(Plane(11).y) + y0), 10
Face Plane(), 12, 13, 14, 12, x0, y0, 1, "D" 'REDRAW BACK L
'REDRAW GREEN CANOPY LINE
LINE (FIX(Plane(12).x) + x0, FIX(Plane(12).y) + y0)-(FIX(Plane(14).x) + x0, FIX(Plane(14).y) + y0), 10
END IF
END IF
NEXT JJ
END SUB
SUB Face (Plane() AS COORD, R, S, T, U, x0, y0, CLR, LTR$)
LOCATE 1, 1
COLOR CLR
H = True
IF WRFRM$ = "ON" THEN 'WIRE FRAME
LINE (Plane(R).x + x0, Plane(R).y + y0)-(Plane(U).x + x0, Plane(U).y + y0), CLR
LINE (Plane(S).x + x0, Plane(S).y + y0)-(Plane(R).x + x0, Plane(R).y + y0), CLR
LINE (Plane(T).x + x0, Plane(T).y + y0)-(Plane(S).x + x0, Plane(S).y + y0), CLR
LINE (Plane(U).x + x0, Plane(U).y + y0)-(Plane(T).x + x0, Plane(T).y + y0), CLR
ELSE
IF NOT (R = 150) THEN 'NOSE 2 EXTRA ELEMENT=150
X1 = (FIX(Plane(R).x) + FIX(Plane(S).x)) / 2
Y1 = (FIX(Plane(R).y) + FIX(Plane(S).y)) / 2
Z1 = (FIX(Plane(R).z) + FIX(Plane(S).z)) / 2
X2 = (FIX(Plane(R).x) + FIX(Plane(T).x)) / 2
y2 = (FIX(Plane(R).y) + FIX(Plane(T).y)) / 2
Z2 = (FIX(Plane(R).z) + FIX(Plane(T).z)) / 2
X3 = (FIX(Plane(S).x) + FIX(Plane(T).x)) / 2
y3 = (FIX(Plane(S).y) + FIX(Plane(T).y)) / 2
Z3 = (FIX(Plane(S).z) + FIX(Plane(T).z)) / 2
XL = X3: YM = y3
IF ((R < 15) OR (R > 39)) THEN 'NOT CANOPY
LINE (X1 + x0, Y1 + y0)-(X2 + x0, y2 + y0), CLR 'TRIANGLE CENTERS
LINE (X1 + x0, Y1 + y0)-(X3 + x0, y3 + y0), CLR
LINE (X3 + x0, y3 + y0)-(X2 + x0, y2 + y0), CLR
END IF
IF R = U THEN '1
IF NOT ((X1 = FIX(Plane(R).x) AND Y1 = FIX(Plane(R).y)) OR (X1 = FIX(Plane(S).x) AND Y1 = FIX(Plane(S).y))) THEN '2
XL = FIX((FIX(Plane(T).x) + X1) / 2)
YM = FIX((FIX(Plane(T).y) + Y1) / 2)
z = FIX((FIX(Plane(T).z) + Z1) / 2)
'2-1
ELSEIF NOT ((X2 = FIX(Plane(R).x) AND y2 = FIX(Plane(R).y)) OR (X2 = FIX(Plane(T).x) AND y2 = FIX(Plane(T).y))) THEN '3
XL = FIX((FIX(Plane(S).x) + X2) / 2)
YM = FIX((FIX(Plane(S).y) + y2) / 2)
z = FIX((FIX(Plane(S).z) + Z2) / 2)
'2-2
ELSEIF NOT ((X3 = FIX(Plane(S).x) AND y3 = FIX(Plane(S).y)) OR (X3 = FIX(Plane(T).x) AND y3 = FIX(Plane(T).y))) THEN '2
XL = FIX((FIX(Plane(R).x) + X3) / 2)
YM = FIX((FIX(Plane(R).y) + y3) / 2)
z = FIX((FIX(Plane(R).z) + Z3) / 2)
ELSE '2-3
H = False
END IF '2
ELSE '1 R<>U
X4 = (FIX(Plane(R).x) + FIX(Plane(U).x)) / 2
Y4 = (FIX(Plane(R).y) + FIX(Plane(U).y)) / 2
X5 = (FIX(Plane(T).x) + FIX(Plane(U).x)) / 2
Y5 = (FIX(Plane(T).y) + FIX(Plane(U).y)) / 2
IF ((R < 15) OR (R > 39)) THEN 'NOT CANOPY
LINE (X4 + x0, Y4 + y0)-(X2 + x0, y2 + y0), CLR 'TRIANGLE CENTERS
LINE (X4 + x0, Y4 + y0)-(X5 + x0, Y5 + y0), CLR
LINE (X5 + x0, Y5 + y0)-(X2 + x0, y2 + y0), CLR
LINE (X1 + x0, Y1 + y0)-(X5 + x0, Y5 + y0), CLR 'CENTER CRSS
LINE (X3 + x0, y3 + y0)-(X4 + x0, Y4 + y0), CLR
'DIAGS
LINE (FIX(Plane(S).x) + x0, FIX(Plane(S).y) + y0)-(FIX(Plane(U).x) + x0, FIX(Plane(U).y) + y0), CLR
LINE (FIX(Plane(R).x) + x0, FIX(Plane(R).y) + y0)-(FIX(Plane(T).x) + x0, FIX(Plane(T).y) + y0), CLR
END IF
XL = FIX(((FIX(Plane(S).x) + FIX(Plane(U).x)) / 2 + X2) / 2)
YM = FIX(((FIX(Plane(S).y) + FIX(Plane(U).y)) / 2 + y2) / 2)
z = FIX(((FIX(Plane(S).z) + FIX(Plane(U).z)) / 2 + Z2) / 2)
END IF '1
LINE (FIX(Plane(R).x + x0), FIX(Plane(R).y + y0))-(FIX(Plane(S).x + x0), FIX(Plane(S).y + y0)), 7 'OUT-LINE
LINE (FIX(Plane(S).x + x0), FIX(Plane(S).y + y0))-(FIX(Plane(T).x + x0), FIX(Plane(T).y + y0)), 7 'FOR PAINT
LINE (FIX(Plane(T).x + x0), FIX(Plane(T).y + y0))-(FIX(Plane(U).x + x0), FIX(Plane(U).y + y0)), 7
LINE (FIX(Plane(U).x + x0), FIX(Plane(U).y + y0))-(FIX(Plane(R).x + x0), FIX(Plane(R).y + y0)), 7
IF TestCoord(Plane(), R, S, T, U, XL, YM) THEN
'NOT CANOPY
IF ((R < 15) OR (R > 39)) THEN PAINT (XL + x0, YM + y0), 15, 7 '1ST PAINT WHITE
END IF
LINE (FIX(Plane(R).x + x0), FIX(Plane(R).y + y0))-(FIX(Plane(S).x + x0), FIX(Plane(S).y + y0)), 7
LINE (FIX(Plane(S).x + x0), FIX(Plane(S).y + y0))-(FIX(Plane(T).x + x0), FIX(Plane(T).y + y0)), 7
LINE (FIX(Plane(T).x + x0), FIX(Plane(T).y + y0))-(FIX(Plane(U).x + x0), FIX(Plane(U).y + y0)), 7
LINE (FIX(Plane(U).x + x0), FIX(Plane(U).y + y0))-(FIX(Plane(R).x + x0), FIX(Plane(R).y + y0)), 7
IF TestCoord(Plane(), R, S, T, U, XL, YM) = True THEN
'NOT CANOPY
IF ((R < 15) OR (R > 39)) THEN PAINT (XL + x0, YM + y0), CLR, 7 '2ND PAINT CLR
END IF
LINE (FIX(Plane(R).x + x0), FIX(Plane(R).y + y0))-(FIX(Plane(T).x + x0), FIX(Plane(T).y + y0)), CLR 'CLR OUTLINE
LINE (FIX(Plane(S).x + x0), FIX(Plane(S).y + y0))-(FIX(Plane(U).x + x0), FIX(Plane(U).y + y0)), CLR
LINE (FIX(Plane(R).x + x0), FIX(Plane(R).y + y0))-(FIX(Plane(S).x + x0), FIX(Plane(S).y + y0)), CLR
LINE (FIX(Plane(S).x + x0), FIX(Plane(S).y + y0))-(FIX(Plane(T).x + x0), FIX(Plane(T).y + y0)), CLR
LINE (FIX(Plane(T).x + x0), FIX(Plane(T).y + y0))-(FIX(Plane(U).x + x0), FIX(Plane(U).y + y0)), CLR
LINE (FIX(Plane(U).x + x0), FIX(Plane(U).y + y0))-(FIX(Plane(R).x + x0), FIX(Plane(R).y + y0)), CLR
END IF 'NOSE 2
IF (R = 1 OR R = 5) THEN 'OUT-LINE TAIL
LINE (FIX(Plane(R).x + x0), FIX(Plane(R).y + y0))-(FIX(Plane(S).x + x0), FIX(Plane(S).y + y0)), 2
LINE (FIX(Plane(S).x + x0), FIX(Plane(S).y + y0))-(FIX(Plane(T).x + x0), FIX(Plane(T).y + y0)), 2
LINE (FIX(Plane(T).x + x0), FIX(Plane(T).y + y0))-(FIX(Plane(U).x + x0), FIX(Plane(U).y + y0)), 2
LINE (FIX(Plane(U).x + x0), FIX(Plane(U).y + y0))-(FIX(Plane(R).x + x0), FIX(Plane(R).y + y0)), 2
END IF
END IF
END SUB
SUB FRAME2 (XX, YY, x0, y0, ZZ)
LINE (x0 - FIX(XX / 2), y0 - FIX(YY / 2))-(x0 + FIX(XX / 2), y0 + FIX(YY / 2)), ZZ, BF
END SUB
SUB SKY
X1 = 140: Y1 = 80: X2 = SEGMENT: y2 = MaxMY / 3: y3 = MaxMY * 2 / 3
LINE (10, y2)-(120, y3), 3, BF
LINE (205, y2)-(315, y3), 3, BF
END SUB
SUB Store (Plane() AS COORD, N, RS, SS, TS, US, CLRS, LTRS$)
f = (Plane(RS).z + Plane(SS).z + Plane(TS).z) / 3
Store1(N).g = f
Store1(N).R = RS
Store1(N).S = SS
Store1(N).T = TS
Store1(N).U = US
Store1(N).J = CLRS
Store1(N).ST = LTRS$
END SUB
SUB StoreSorted
LOCATE 1, 1
FOR ii = 1 TO (NSORT - 1)
a = Store1(ii).g
FOR KK = (ii + 1) TO NSORT
b = Store1(KK).g
IF b > a THEN
Store2(1).R = Store1(ii).R
Store2(1).S = Store1(ii).S
Store2(1).T = Store1(ii).T
Store2(1).U = Store1(ii).U
Store2(1).J = Store1(ii).J
Store2(1).ST = Store1(ii).ST
Store1(ii).g = b: Store1(KK).g = a: a = b
Store1(ii).R = Store1(KK).R
Store1(ii).S = Store1(KK).S
Store1(ii).T = Store1(KK).T
Store1(ii).U = Store1(KK).U
Store1(ii).J = Store1(KK).J
Store1(ii).ST = Store1(KK).ST
Store1(KK).R = Store2(1).R
Store1(KK).S = Store2(1).S
Store1(KK).T = Store2(1).T
Store1(KK).U = Store2(1).U
Store1(KK).J = Store2(1).J
Store1(KK).ST = Store2(1).ST
END IF
NEXT KK
NEXT ii
END SUB
SUB TDelay
FOR i = 0 TO 1000
FOR ii = 0 TO 100
REM FOR iii = 0 TO RND * 60 + 40
REM NEXT iii
NEXT ii
NEXT i
END SUB
FUNCTION TestCoord (Plane() AS COORD, R, S, T, U, L, m)
TestCoord = True
AREAT = Area(FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(S).x), FIX(Plane(S).y), FIX(Plane(T).x), FIX(Plane(T).y))
IF R = U THEN
a = Area(L, m, FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(S).x), FIX(Plane(S).y))
b = Area(L, m, FIX(Plane(S).x), FIX(Plane(S).y), FIX(Plane(T).x), FIX(Plane(T).y))
c = Area(L, m, FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(T).x), FIX(Plane(T).y))
IF a + b + c > AREAT THEN H = False
IF a < 2.5 + SQR((FIX(Plane(R).x) - FIX(Plane(S).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(S).y)) ^ 2) THEN H = False
IF b < 2.5 + SQR((FIX(Plane(S).x) - FIX(Plane(T).x)) ^ 2 + (FIX(Plane(S).y) - FIX(Plane(T).y)) ^ 2) THEN H = False
IF c < 2.5 + SQR((FIX(Plane(R).x) - FIX(Plane(T).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(T).y)) ^ 2) THEN H = False
a = SQR((FIX(Plane(R).x) - FIX(Plane(S).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(S).y)) ^ 2)
b = SQR((FIX(Plane(S).x) - FIX(Plane(T).x)) ^ 2 + (FIX(Plane(S).y) - FIX(Plane(T).y)) ^ 2)
c = SQR((FIX(Plane(R).x) - FIX(Plane(T).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(T).y)) ^ 2)
ELSE 'R<>U
AREAT = AREAT + Area(FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(T).x), FIX(Plane(T).y), FIX(Plane(U).x), FIX(Plane(U).y))
a = Area(L, m, FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(S).x), FIX(Plane(S).y))
b = Area(L, m, FIX(Plane(S).x), FIX(Plane(S).y), FIX(Plane(T).x), FIX(Plane(T).y))
c = a + b
e = SQR((FIX(Plane(R).x) - FIX(Plane(S).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(S).y)) ^ 2)
f = SQR((FIX(Plane(S).x) - FIX(Plane(T).x)) ^ 2 + (FIX(Plane(S).y) - FIX(Plane(T).y)) ^ 2)
IF a < 2.5 + e THEN H = False
IF b < 2.5 + f THEN H = False
a = Area(L, m, FIX(Plane(R).x), FIX(Plane(R).y), FIX(Plane(U).x), FIX(Plane(U).y))
b = Area(L, m, FIX(Plane(T).x), FIX(Plane(T).y), FIX(Plane(U).x), FIX(Plane(U).y))
IF (a + b + c) > AREAT THEN H = False
e = SQR((FIX(Plane(R).x) - FIX(Plane(U).x)) ^ 2 + (FIX(Plane(R).y) - FIX(Plane(U).y)) ^ 2)
f = SQR((FIX(Plane(T).x) - FIX(Plane(U).x)) ^ 2 + (FIX(Plane(T).y) - FIX(Plane(U).y)) ^ 2)
IF a < 2.5 + e THEN H = False
IF b < 2.5 + f THEN H = False
END IF
TestCoord = H
END FUNCTION
SUB TranslateX
a = COS(CDBL(H) * pi / 180#)
b = SIN(CDBL(H) * pi / 180#)
FOR i = 1 TO NN
c = LeftPlane(i).y * a + LeftPlane(i).z * b
LeftPlane(i).z = -LeftPlane(i).y * b + LeftPlane(i).z * a
LeftPlane(i).y = c
LeftPlane(i).x = LeftPlane(i).x
NEXT i
END SUB
SUB TranslateXZ
LOCATE 1, 1
a = COS(K * pi / 180)
b = SIN(K * pi / 180)
FOR i = 1 TO NN
LOCATE 3, 1
c = LeftPlane(i).x * a + LeftPlane(i).z * b
LeftPlane(i).z = -LeftPlane(i).x * b + LeftPlane(i).z * a
LeftPlane(i).x = c
LeftPlane(i).y = LeftPlane(i).y
NEXT i
END SUB
SUB TranslateY (Rotation)
a = COS(Rotation * pi / 180)
b = SIN(Rotation * pi / 180)
FOR i = 1 TO NN
LOCATE 3, 1
RightPlane(i).x = LeftPlane(i).x * a + LeftPlane(i).z * b
RightPlane(i).z = -LeftPlane(i).x * b + LeftPlane(i).z * a
RightPlane(i).y = LeftPlane(i).y
NEXT i
END SUB
SUB TranslateZ
LOCATE 1, 1
a = COS(CDBL(K) * pi / 180#)
b = SIN(CDBL(K) * pi / 180#)
FOR i = 1 TO NN
c = LeftPlane(i).x * a + LeftPlane(i).y * b
LeftPlane(i).y = -LeftPlane(i).x * b + LeftPlane(i).y * a
LeftPlane(i).x = c
LeftPlane(i).z = LeftPlane(i).z
NEXT i
END SUB
RETURN TO TOP
RETURN TO PMC MENU
HOME PAGE