home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / s85xx / s8504b.d64 / 3d-2 (.txt) < prev    next >
Commodore BASIC  |  1995-03-30  |  8KB  |  382 lines

  1. 1 REM
  2. 2 REM      3D-SUPERGRAFIK
  3. 3 REM      BY OLIVER GUENTER
  4. 4 REM      GRAEVINGHOLZSTR. 44
  5. 5 REM      4600 DORTMUND 16
  6. 6 REM      TEL: 0231/853317
  7. 7 REM
  8. 8 REM      FUER C-64 MIT VC-1541
  9. 9 REM
  10. 100 REM *******************************
  11. 101 REM *   INITIALISIERUNG           *
  12. 102 REM *******************************
  13. 103 SYS50212:SYS50182:SYS50191,15,15
  14. 104 V=53248:POKE50168,63
  15. 105 POKEV+21,0:POKEV+32,15:POKEV+33,15
  16. 106 DIMDX(150),DY(150),DZ(150)
  17. 107 DIMMX(150),MY(150),MZ(150)
  18. 108 DIMBX(150),BY(150)
  19. 109 DIMWX(120),WY(120),WZ(120)
  20. 110 DIMFL(120,8)
  21. 111 DIMPF(120),RF(120)
  22. 112 REM *******************************
  23. 113 REM *   HAUPTMENUE                *
  24. 114 REM *******************************
  25. 115 FU$="[200]AUPTMENUE":GOSUB124
  26. 116 PRINTTAB(11);"-1- [196]ATEN EINGEBEN"
  27. 117 PRINTTAB(11);"-2- [196]ATEN LADEN"
  28. 118 PRINTTAB(11);"-3- [196]ATEN SPEICHERN"
  29. 119 PRINTTAB(11);"-4- [194]ILD BERECHNEN"
  30. 120 PRINTTAB(11);"-5- [200]ARDCOPY"
  31. 121 GETIN$:IN=VAL(IN$)
  32. 122 ONINGOTO134,175,201,228,387
  33. 123 GOTO121
  34. 124 REM *******************************
  35. 125 REM *   TITEL + FUNKTION          *
  36. 126 REM *******************************
  37. 127 PRINT"[147][144][198]UNKTION : ";FU$
  38. 128 PRINT"****************************************";
  39. 129 PRINT"*          [144]3[196]-[211]UPERGRAFIK              *";
  40. 130 PRINT"*                                      *";
  41. 131 PRINT"*          [144]([195]) [207]LIVER [199]UENTER          *";
  42. 132 PRINT"****************************************[144]"
  43. 133 RETURN
  44. 134 REM *******************************
  45. 135 REM *   DATEN EINGEBEN            *
  46. 136 REM *******************************
  47. 137 FU$="[196]ATEN EINGEBEN":GOSUB124
  48. 138 INPUT"[215]IE VIELE [208]UNKTE   ";AP
  49. 139 IFAP=0THENGOTO112
  50. 140 INPUT"[215]IE VIELE [198]LAECHEN ";AF
  51. 141 IFAF=0THENGOTO112
  52. 142 FORQ=1TOAP
  53. 143 FU$="[208]UNKTE EINGEBEN":GOSUB124
  54. 144 PRINT"[208]UNKT :";Q
  55. 145 INPUT"[216]-[203]OORDINATE ";DX(Q)
  56. 146 INPUT"[217]-[203]OORDINATE ";DY(Q)
  57. 147 INPUT"[218]-[203]OORDINATE ";DZ(Q)
  58. 148 PRINT"RICHTIG ?"
  59. 149 POKE198,0:WAIT198,1
  60. 150 IFPEEK(631)=78THENPRINT"[145][145][145][145][145][145][145][145][145][145]":POKE198,0:GOTO143
  61. 151 NEXT
  62. 152 POKE198,0
  63. 153 FORQ=1TOAF
  64. 154 FU$="[198]LAECHEN EINGEBEN":GOSUB124
  65. 155 PRINT"[198]LAECHE :";Q;""
  66. 156 R=0
  67. 157 FORW=1TO8
  68. 158 IFR=1THENNEXT:GOTO168
  69. 159 PRINT"[208]UNKT :";W;
  70. 160 T$=""
  71. 161 INPUTT$
  72. 162 T=VAL(T$)
  73. 163 IFT<0ORT>APORINT(T)<>TTHENPRINT"[145][145]":GOTO159
  74. 164 IFRIGHT$(T$,1)="L"THENT=-T
  75. 165 FL(Q,W)=T
  76. 166 IFT=0THENR=1:PF(Q)=W-1:NEXT
  77. 167 NEXT:PF(Q)=8
  78. 168 PRINT"RICHTIG ?"
  79. 169 POKE198,0:WAIT198,1
  80. 170 IFPEEK(631)=78THENPRINT"":POKE198,0:GOTO154
  81. 171 NEXT
  82. 172 PRINT"< [211][208][193][195][197] >[146]"
  83. 173 GETIN$:IFIN$<>" "THEN173
  84. 174 GOTO112
  85. 175 REM *******************************
  86. 176 REM *   DATEN LADEN               *
  87. 177 REM *******************************
  88. 178 FU$="[196]ATEN LADEN ($=[196]IR)":GOSUB124
  89. 179 INPUT"[198]ILENAME ";FL$
  90. 180 IFFL$="@"THENGOTO112
  91. 181 IFFL$="$"THENPRINT:SYS50209:GOTO179
  92. 182 OPEN15,8,15:OPEN1,8,2,"3D-"+FL$+",S,R"
  93. 183 GOSUB423
  94. 184 IFER=1THENCLOSE1:CLOSE15:GOTO179
  95. 185 GET#1,A$:AP=ASC(A$)
  96. 186 FORQ=1TOAP
  97. 187 INPUT#1,A$:DX(Q)=VAL(A$)
  98. 188 INPUT#1,A$:DY(Q)=VAL(A$)
  99. 189 INPUT#1,A$:DZ(Q)=VAL(A$)
  100. 190 NEXT
  101. 191 GET#1,A$:AF=ASC(A$)
  102. 192 FORQ=1TOAF
  103. 193 GET#1,A$:PF(Q)=ASC(A$)
  104. 194 FORW=1TOPF(Q)
  105. 195 GET#1,A$:FL(Q,W)=ASC(A$)-128
  106. 196 NEXT
  107. 197 NEXT
  108. 198 CLOSE1
  109. 199 CLOSE15
  110. 200 GOTO112
  111. 201 REM *******************************
  112. 202 REM *   DATEN SPEICHERN           *
  113. 203 REM *******************************
  114. 204 FU$="[196]ATEN SPEICHERN ($=[196]IR)":GOSUB124
  115. 205 GOSUB413:IFER=1THENGOTO112
  116. 206 INPUT"[198]ILENAME ";FL$
  117. 207 IFFL$="@"THENGOTO112
  118. 208 IFFL$="$"THENPRINT:SYS50209:GOTO206
  119. 209 OPEN15,8,15:OPEN1,8,2,"3D-"+FL$+",S,W"
  120. 210 GOSUB423
  121. 211 IFER=1THENCLOSE1:CLOSE15:GOTO206
  122. 212 PRINT#1,CHR$(AP);
  123. 213 FORQ=1TOAP
  124. 214 PRINT#1,DX(Q)
  125. 215 PRINT#1,DY(Q)
  126. 216 PRINT#1,DZ(Q)
  127. 217 NEXT
  128. 218 PRINT#1,CHR$(AF);
  129. 219 FORQ=1TOAF
  130. 220 PRINT#1,CHR$(PF(Q));
  131. 221 FORW=1TOPF(Q)
  132. 222 PRINT#1,CHR$(FL(Q,W)+128);
  133. 223 NEXT
  134. 224 NEXT
  135. 225 CLOSE1
  136. 226 CLOSE15
  137. 227 GOTO112
  138. 228 REM *******************************
  139. 229 REM *   BILD BERECHNEN            *
  140. 230 REM *******************************
  141. 231 FU$="[194]ILD BERECHNEN":GOSUB124
  142. 232 GOSUB413:IFER=1THENGOTO112
  143. 233 INPUT"[216]-[196]REHWINKEL ";XD
  144. 234 INPUT"[217]-[196]REHWINKEL ";YD
  145. 235 INPUT"[218]-[196]REHWINKEL ";ZD
  146. 236 INPUT"[200]INTERSCHNEIDUNG (J/N) ";HI$
  147. 237 IFHI$="J"THENHI=1:GOTO240
  148. 238 IFHI$<>"N"THENPRINT"[145][145][145]":GOTO236
  149. 239 HI=0
  150. 240 INPUT"[198]LUCHTPUNKT (J/N) ";F$
  151. 241 IFF$="J"THENF=1:GOTO245
  152. 242 IFF$<>"N"THENPRINT"[145][145][145]":GOTO240
  153. 243 F=0
  154. 244 GOTO247
  155. 245 INPUT"[193]UGPUNKT-[203]OOR.   0,0,25[157][157][157][157][157][157][157][157]";FX,FY,FZ
  156. 246 IFFZ<=0THENPRINT"[145][145][145]":GOTO245
  157. 247 INPUT"[215]ERTE AUSGEBEN (J/N)   N[157][157][157]";WE$
  158. 248 IFWE$="J"THENWE=1:GOTO251
  159. 249 IFWE$<>"N"THENPRINT"[145][145][145]":GOTO247
  160. 250 WE=0
  161. 251 PRINT"[196]REHE [208]UNKTE"
  162. 252 FORQ=1TOAP
  163. 253 WX(Q)=DX(Q)
  164. 254 WY(Q)=DY(Q)
  165. 255 WZ(Q)=DZ(Q)
  166. 256 NEXT
  167. 257 IFXD=0THENGOTO262
  168. 258 FORQ=1TOAP
  169. 259 WI=XD:XP=WY(Q):YP=WZ(Q):GOSUB434
  170. 260 WY(Q)=XP:WZ(Q)=YP
  171. 261 NEXT
  172. 262 IFYD=0THENGOTO267
  173. 263 FORQ=1TOAP
  174. 264 WI=YD:XP=WZ(Q):YP=WX(Q):GOSUB434
  175. 265 WZ(Q)=XP:WX(Q)=YP
  176. 266 NEXT
  177. 267 IFYD=0THENGOTO272
  178. 268 FORQ=1TOAP
  179. 269 WI=ZD:XP=WX(Q):YP=WY(Q):GOSUB434
  180. 270 WX(Q)=XP:WY(Q)=YP
  181. 271 NEXT
  182. 272 IFF=1THENGOTO278
  183. 273 FORQ=1TOAP
  184. 274 BX(Q)=WX(Q)
  185. 275 BY(Q)=WY(Q)
  186. 276 NEXT
  187. 277 GOTO285
  188. 278 PRINT"[145][194]ERECHNE [194]ILDPUNKTE"
  189. 279 FORQ=1TOAP
  190. 280 X1=FX:Y1=FY:Z1=FZ
  191. 281 X2=WX(Q):Y2=WY(Q):Z2=WZ(Q)
  192. 282 GOSUB446
  193. 283 BX(Q)=X1:BY(Q)=Y1
  194. 284 NEXT
  195. 285 IFHI=0THENGOTO298
  196. 286 PRINT"[145][194]ERECHNE [205]ITTELPUNKTE"
  197. 287 FORQ=1TOAF
  198. 288 ZX=0:ZY=0:ZZ=0
  199. 289 FORW=1TOPF(Q)
  200. 290 ZX=ZX+BX(ABS(FL(Q,W)))
  201. 291 ZY=ZY+BY(ABS(FL(Q,W)))
  202. 292 ZZ=ZZ+WZ(ABS(FL(Q,W)))
  203. 293 NEXT
  204. 294 MX(Q)=ZX/PF(Q)
  205. 295 MY(Q)=ZY/PF(Q)
  206. 296 MZ(Q)=ZZ/PF(Q)
  207. 297 NEXT
  208. 298 PRINT"[145][194]ERECHNE [193]CHSEINHEITEN"
  209. 299 PX=0:NX=0:PY=0:NY=0
  210. 300 FORQ=1TOAP
  211. 301 ZX=BX(Q)
  212. 302 ZY=BY(Q)
  213. 303 GOSUB458
  214. 304 NEXT
  215. 305 AX=-(PX+NX)/2
  216. 306 AY=-(PY+NY)/2
  217. 307 BX=(ABS(PX)+ABS(NX))/3.2
  218. 308 BY=(ABS(PY)+ABS(NY))/2
  219. 309 AE=BX
  220. 310 IFBX<BYTHENAE=BY
  221. 311 AE=AE*100/98
  222. 312 FORQ=1TOAF
  223. 313 RF(Q)=Q
  224. 314 NEXT
  225. 315 IFHI=0THENGOTO325
  226. 316 PRINT"[145][194]ERECHNE [210]EIHENFOLGE  "
  227. 317 FORQ=1TOAF-1
  228. 318 FORW=Q+1TOAF
  229. 319 IFMZ(RF(Q))<=MZ(RF(W))THENGOTO323
  230. 320 A=RF(Q)
  231. 321 RF(Q)=RF(W)
  232. 322 RF(W)=A
  233. 323 NEXT
  234. 324 NEXT
  235. 325 PRINT"[145][218]EICHNE [194]ILD          "
  236. 326 SYS50185:SYS50176
  237. 327 FORQ=1TOAF
  238. 328 SYS50188
  239. 329 NF=RF(Q)
  240. 330 FORW=1TOPF(NF)
  241. 331 ZX=BX(ABS(FL(NF,W)))
  242. 332 ZY=BY(ABS(FL(NF,W)))
  243. 333 GOSUB466
  244. 334 E=W+1:IFE>PF(NF)THENE=1
  245. 335 X=ZX:Y=ZY
  246. 336 ZX=BX(ABS(FL(NF,E)))
  247. 337 ZY=BY(ABS(FL(NF,E)))
  248. 338 GOSUB466
  249. 339 R=SGN(FL(NF,E))
  250. 340 LO=0
  251. 341 IFR=1THENGOTO344
  252. 342 IFHI=0THENGOTO347
  253. 343 LO=3
  254. 344 SYS50200+LO,X,Y,ZX,ZY
  255. 345 IFLO=3THENSYS50194,X,Y
  256. 346 IFLO=3THENSYS50194,ZX,ZY
  257. 347 NEXT
  258. 348 IFHI=0THENGOTO353
  259. 349 ZX=MX(NF)
  260. 350 ZY=MY(NF)
  261. 351 GOSUB466
  262. 352 SYS50206,ZX,ZY
  263. 353 NEXT
  264. 354 PRINT"[145]< [211][208][193][195][197] >[146]   "
  265. 355 GETIN$:IFIN$<>" "THENGOTO355
  266. 356 SYS50182
  267. 357 INPUT"[145][194]ILD AENDERN (J/N) ";AE$
  268. 358 IFAE$="N"THENGOTO376
  269. 359 IFAE$<>"J"THENGOTO357
  270. 360 X=160:Y=100:LO=3:SYS50176:POKEV+21,1
  271. 361 GETIN$:IFIN$="S"THENLO=0
  272. 362 IFIN$="L"THENLO=3
  273. 363 IFIN$="E"THENPOKEV+1,0:GOTO373
  274. 364 JO=PEEK(249)
  275. 365 IF(JOAND1)=0ANDY>0THENY=Y-1
  276. 366 IF(JOAND2)=0ANDY<199THENY=Y+1
  277. 367 IF(JOAND4)=0ANDX>0THENX=X-1
  278. 368 IF(JOAND8)=0ANDX<319THENX=X+1
  279. 369 IF(JOAND16)=0THENSYS50194+LO,X,Y
  280. 370 POKEV,((X+13)AND255):POKEV+1,Y+40
  281. 371 POKEV+16,((X+13)AND256)/256
  282. 372 GOTO361
  283. 373 PRINT"[145]< [211][208][193][195][197] >[146]             "
  284. 374 SYS50182
  285. 375 GETIN$:IFIN$<>" "THENGOTO375
  286. 376 IFWE=0THENGOTO112
  287. 377 FORQ=1TOAP
  288. 378 FU$="[215]ERTE AUSGEBEN":GOSUB124
  289. 379 PRINT"[208]UNKT :";Q
  290. 380 PRINT"[216]-[203]OORDINATE :";BX(Q)
  291. 381 PRINT"[217]-[203]OORDINATE :";BY(Q)
  292. 382 IFF=0THENPRINT"[218]-[203]OORDINATE :";WZ(Q)
  293. 383 PRINT"< [211][208][193][195][197][160]>[146]"
  294. 384 GETIN$:IFIN$<>" "THENGOTO384
  295. 385 NEXT
  296. 386 GOTO112
  297. 387 REM *******************************
  298. 388 REM *   HARDCOPY EPSON RX-80      *
  299. 389 REM *******************************
  300. 390 FU$="[200]ARDCOPY":GOSUB124
  301. 391 INPUT"[201]ST DER [196]RUCKER WIRKLICH AN ";D$
  302. 392 IFD$="J"THENGOTO395
  303. 393 IFD$<>"N"THENPRINT"[145][145][145]":GOTO391
  304. 394 GOTO112
  305. 395 OPEN4,4,2:REM ++ GROSS/KLEIN ++
  306. 396 PRINT#4
  307. 397 PRINT#4,"[206]AME             : ";FL$
  308. 398 PRINT#4,"[216]-[196]REHWINKEL     :";XD
  309. 399 PRINT#4,"[217]-[196]REHWINKEL     :";YD
  310. 400 PRINT#4,"[218]-[196]REHWINKEL     :";ZD
  311. 401 PRINT#4,"[200]INTERSCHNEIDUNG : ";HI$
  312. 402 PRINT#4,"[198]LUCHTPUNKT      : ";F$
  313. 403 IFF=1THENPRINT#4,"[193]UGPUNKT         :";FX;",";FY;",";FZ
  314. 404 PRINT#4
  315. 405 PRINT#4
  316. 406 CLOSE4
  317. 407 OPEN4,4,1:REM ++ EPSON MODE ++
  318. 408 SYS50215,4
  319. 409 PRINT#4,CHR$(10)
  320. 410 PRINT#4,CHR$(10)
  321. 411 CLOSE4
  322. 412 GOTO112
  323. 413 REM *******************************
  324. 414 REM *   AUF DATEN TESTEN          *
  325. 415 REM *******************************
  326. 416 ER=0
  327. 417 IFAP>0THENRETURN
  328. 418 PRINT"[203]EINE [196]ATEN VORHANDEN ![146]"
  329. 419 PRINT"< [211][208][193][195][197] >[146]"
  330. 420 GETIN$:IFIN$<>" "THENGOTO420
  331. 421 ER=1
  332. 422 RETURN
  333. 423 REM *******************************
  334. 424 REM *   FEHLERKANAL ABFRAGEN      *
  335. 425 REM *******************************
  336. 426 ER=0
  337. 427 INPUT#15,FE,FE$,T,S
  338. 428 IFFE=0THENRETURN
  339. 429 PRINT"[196]ISKFEHLER :[146] ";FE$
  340. 430 PRINT"[212]RACK      :[146]";T
  341. 431 PRINT"[211]EKTOR     :[146]";S
  342. 432 ER=1
  343. 433 RETURN
  344. 434 REM *******************************
  345. 435 REM *   REC->POL + WI POL->REC    *
  346. 436 REM *******************************
  347. 437 LA=SQR(XP^2+YP^2)
  348. 438 IFXP=0THENWK=(null)/2*SGN(YP):GOTO442
  349. 439 WK=ATN(YP/XP)
  350. 440 IFSGN(XP)=-1THENWK=WK+(null)*SGN(YP)
  351. 441 IFSGN(XP)=-1ANDSGN(YP)=0THENWK=(null)
  352. 442 WK=WK+(WI*(null)/180)
  353. 443 XP=COS(WK)*LA
  354. 444 YP=SIN(WK)*LA
  355. 445 RETURN
  356. 446 REM *******************************
  357. 447 REM *   SCHNITTPT. GERADE/EBENE   *
  358. 448 REM *******************************
  359. 449 IFX2=X1THENGOTO453
  360. 450 M=(Z2-Z1)/(X2-X1)
  361. 451 B=Z1-M*X1
  362. 452 X1=-B/M
  363. 453 IFY2=Y1THENGOTO457
  364. 454 N=(Z2-Z1)/(Y2-Y1)
  365. 455 C=Z1+N*Y1
  366. 456 Y1=-C/N
  367. 457 RETURN
  368. 458 REM *******************************
  369. 459 REM *   AE BERECHNEN              *
  370. 460 REM *******************************
  371. 461 IFPX<ZXTHENPX=ZX
  372. 462 IFNX>ZXTHENNX=ZX
  373. 463 IFPY<ZYTHENPY=ZY
  374. 464 IFNY>ZYTHENNY=ZY
  375. 465 RETURN
  376. 466 REM *******************************
  377. 467 REM *   BILDKOOR. BERECHNEN       *
  378. 468 REM *******************************
  379. 469 ZX=160+((ZX+AX)*100/AE)
  380. 470 ZY=100-((ZY+AY)*100/AE)
  381. 471 RETURN
  382.