ワイヤーフレームモデルを表示するプログラム。
行列演算なんか無理なので、極座標系を採用。カメラを縦回転しない代わりに
比較的高速に表示できるようにした。
といってももともとSPALM向けに作った物ではないので、遅い。
SPALM用の最適化をちゃんとすれば1.5倍くらいのスピードは出るかもしれない。
特に変わったアルゴリズムは使ってない。
soft1("EXIT") @(VY,90,330,210,270,270,3,0,354,315,357,0,6,45,90,270,270) @(VZ,2,358,358,300,100,170,176,170,179,10,4,10,1,260,200,0) @(VD,38,10,10,6,8,25,40,25,9,25,40,25,9,15,10,8) @(LINE,-999,0100,0200,0300,0400,0401,0301,0402,0302,0201,-559,0502,0605,0706,0807,0901,1009,1110,1211,1303,1413) @(CRCL,-940,1515) PN=16 LN=23 CN=2 ox=0 oy=15 oz=80 ou=348 cy=0 label 2 CRCL[1]=1515+(ANM++&3) lock() col(0) frect(0,0,240,240) for(kx=(ox*cos(cy)+oz*sin(cy))*100,kz=(oz*cos(cy)-ox*sin(cy))*100,display=1,i=PN;i;){ if(0<tz=(kz+VD[--i]*(sin(VY[i]-cy+ou)*cos(VZ[i])))/285){ (tx[i]=120+(kx+VD[i]*(cos(VZ[i])*cos(VY[i]-cy+ou)))/tz, ty[i]=120+(oy*100+VD[i]*(sin(VZ[i])))*100/tz, tz[i]=tz) }else{ display=0 break } } if(display){ for(i=0;i<LN;++i){ if(0<=J=LINE[i]){ line(tx[J%100],ty[J%100],tx[J/100],ty[J/100]) }else{ color(-J/100*28,-J/10%10*28,-J%10*28) } } for(i=0;i<CN;++i){ if(0<=J=CRCL[i]){ arc(tx[j=J/100%50]-r=J%100*2000/tz[i],ty[j]-r,r*2,r*2) }else{ color(-J/100*28,-J/10%10*28,-J%10*28) } } } unlock(1) if(scan&32768){oz=oz-8} if(scan&4096){oz=oz+8} if(scan&8192){cy=cy-4} if(scan&16384){cy=cy+4} if(scan&4){oy=oy-4} if(scan&256){oy=oy+4} if(scan&16){ox=ox-4} if(scan&64){ox=ox+4} if(scan&2){ou=ou-4} if(scan&8){ou=ou+4} if(input(0)==131072){end} goto 2