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
Hosted by www.Geocities.ws

1