PLOT 文における複素数座標の使用

 投稿者:SECOND  投稿日:2011年 4月23日(土)19時06分33秒
  !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
 

戻る