|
!Ver 7.5.0 以降に追加された機能「 PLOT 文における複素数座標の使用 」
!
!によると、2次元グラフを2変数xyでなく、1つの複素変数で描ける。
!某掲示板に次の様な問題があったので、これをサンプルに描いてみる。
!左ボタン押下で、O,A,P の3点をドラッグ、自由に回転、変形。
!右ボタン終了。
!平面上に2点 O, A 、線分 OA 上にない動点 P がある。
!線分 OA の中点を B 、線分 OP を、2:1に内分する点を Q 。
!△OBQ の重心を G 、直線 QA と直線 BP との交点を R 。
!
!空欄に適切な数値を入れよ。
!(1)↑OG =(ア)↑OA+(イ)↑OP 、↑OR =(ウ)↑OA +(エ)↑OP
!
!(2)点 P が、点 O を中心とし、半径3の円周上を動くとき、
! 点 G は、ある点 C を中心とする半径(オ)の円周上にあり、又、↑OC =(カ)↑OA
!----------------------------------------
OPTION ARITHMETIC COMPLEX
SET WINDOW -4.3,4.3, -4.3,4.3
LET O=0
LET A=O+4
LET P=O+COMPLEX(15/13, 36/13)
!LET P=O+3*EXP(COMPLEX(0, PI/3 ))
DO
LET B=(A+O)/2
LET Q=2/3*(P-O)+O
!
SET DRAW mode hidden
CLEAR
SET COLOR MIX(15) .8,.8,.8
DRAW grid0(1/3,1/3)
SET COLOR MIX(15) .6,.6,.6
DRAW grid
!
SET LINE COLOR "green"
DRAW circle WITH SCALE( P-O )*SHIFT( O) !Pの円 scale(半径), shift(中心)
DRAW circle WITH SCALE(2/9*(P-O))*SHIFT(1/6*(A-O)+O) !Gの円
DRAW circle WITH SCALE(1/2*(P-O))*SHIFT(1/4*(A-O)+O) !Rの円
!
SET LINE COLOR "blue"
PLOT LINES: O; A
PLOT LINES: O; P
PLOT LINES: B; Q
!
PLOT LINES: P; B
PLOT LINES: Q; A
!
SET LINE STYLE 3
PLOT LINES:(Q+O)/2; B
PLOT LINES: Q ;(B+O)/2
PLOT LINES: O ;(B+Q)/2
SET LINE STYLE 1
!
SET TEXT COLOR "red"
PLOT TEXT,AT O :"O"
PLOT TEXT,AT A :"A"
PLOT TEXT,AT B :"B"
PLOT TEXT,AT P :"P"
PLOT TEXT,AT Q :"Q"
PLOT TEXT,AT (Q+B+O)/3 :"G"
PLOT TEXT,AT (P+B)/2 :"R"
PLOT TEXT,AT (A-O)/6+O :"C"
!
PLOT POINTS: (A-O)/6+O !* C
PLOT POINTS: (A-O)/6+O +2/9*(P-O) !* G ==(Q+B+O)/3
PLOT POINTS: (A-O)/4+O +1/2*(P-O) !* R ==(P+B)/2
!
SET DRAW mode explicit
mouse poll x,y,mlb,mrb
DO WHILE mlb=0 AND mrb=0
WAIT DELAY 0 !省電力(待機中のクロックアップ防止。)
mouse poll x,y,mlb,mrb
LET z=COMPLEX(x,y)
IF ABS(z-P)< 1/3 THEN
LET i$="P"
ELSEIF ABS(z-A)< 1/3 THEN
LET i$="A"
ELSEIF ABS(z-O)< 1/3 THEN
LET i$="O"
ELSEIF ABS(z-Q)< 1/3 THEN
LET i$="OP"
ELSE
LET i$=""
END IF
LOOP
LET z=COMPLEX(x,y)
IF i$="P" THEN
LET P=z
ELSEIF i$="A" THEN
LET A=z
ELSEIF i$="O" THEN
LET O=z
ELSEIF i$="OP" AND z-O<>0 THEN
LET P=ABS(P-O)*(z-O)/ABS(z-O)+O
END IF
LOOP UNTIL 0< mrb
!------------
!左ボタン押下で、O,P,A 3点をドラッグ、自由に回転、変形。
!右ボタン終了。"
!
!※ OP の長さを変えずに OP を回転する方法。
!
! OP 線上「Q 」で左ボタン押下、そのまま引きずる。
!------------
END
|
|