C4. イラストの作図

C4.3P3 プログラムリスト-3

目次へ戻る; 前のページ;
表C3 drawcurve.txtのリスト
10 DIM P[2,10]: REM reserve 10 points
20 A=-2+SQR(2):REM draw with ellipse
30 DPERAS: DPWIND 0,-20,200
40 READ P: REM ========= Main loop
50 IF P[1,1]=9999 THEN GOTO 9010
60 NP=1
70 REM: ///loop-A/// to find number of points NP
80 IF P[1,NP+1]=9000 THEN GOTO 1000
90 IF P[1,NP+1]=9900 THEN GOTO 2000
100 NP=NP+1: IF NP>10 THEN GOTO 9000
110 GOTO 70 :REM /// return to loop-A 
120 REM ----------------------------------------
1000 K=1: REM   /// open curve drawing
1010 IF NP<2 THEN GOTO 9000
1020 X1=(P[1,K]+P[1,K+1])/2: Y1=(P[2,K]+P[2,K+1])/2
1030 IF K<>1 THEN GOTO 1050
1040 X1=P[1,K]:   Y1=P[2,K]
1050 X2=P[1,K+1]: Y2=P[2,K+1]
1060 IF NP=2 THEN GOTO 1130
1070 X3=(P[1,K+1]+P[1,K+2])/2: Y3=(P[2,K+1]+P[2,K+2])/2
1080 IF (K+2)<>NP THEN GOTO 1100
1090 X3=P[1,NP]:  Y3=P[2,NP]
1100 GOSUB 3000
1110 IF (K+2)=NP THEN GOTO 40: REM to Main
1120 X1=X3: Y1=Y3: K=K+1: GOTO 1050
1130 DOMOVE X1,Y1:DPDRAW X2,Y2: GOTO 40: REM to Main
1140 REM ----------------------------------------
2000 K=1: REM  /// closed curve drawing
2010 IF NP<=2 THEN GOTO 9000
2020 X1=(P[1,1]+P[1,NP])/2: Y1=(P[2,1]+P[2,NP])/2
2030 X0=X1:Y0=Y1
2040 X2=P[1,K]: Y2=P[2,K]
2050 X3=(P[1,K]+P[1,K+1])/2: Y3=(P[2,K]+P[2,K+1])/2
2060 IF K<>NP THEN GOTO 2080
2070 X3=X0: Y3=Y0
2080 GOSUB 3000
2090 IF K=NP THEN GOTO 40 :REM to Main
2100 X1=X3: Y1=Y3: K=K+1: GOTO 2040
3000 REM ----------------------------------------
3010 REM subroutine curve drawing
3020 REM parameters A,X1,Y1,X2,Y2,X3,Y3
3030 REM shall be set in the Caller 
3040 REM A=-2+SQR(2):REM ellipse
3050 REM A=0 :REM parabolla
3060 REM A>0 :REM hyperbola
3070 DPMOVE X1,Y1
3080 FOR T=0 TO 1.001 STEP 0.05
3090 S1=(1-T)*(1-T)
3100 S2=(2+A)*T*(1-T)
3110 S3=T*T
3120 S4=S1+S2+S3
3130 X=(S1*X1+S2*X2+S3*X3)/S4
3140 Y=(S1*Y1+S2*Y2+S3*Y3)/S4
3150 DPDRAW X,Y
3160 NEXT
3170 RETURN
9000 PRINT "data error"
9010 END

目次へ戻る;