複素数による図形処理

 投稿者:山中和義  投稿日:2013年10月23日(水)20時48分8秒
  問題
任意の鋭角三角形ABCの内部の点Pに対して、PA+PB+PCが最小となる点Pを作図せよ。



OPTION ARITHMETIC COMPLEX !複素平面
LET i=COMPLEX(0,1) !虚数単位

SET WINDOW -3,7,-5,5 !表示範囲
DRAW grid !座標

LET o=COMPLEX(0,0) !点O
LET A=COMPLEX(4,0) !点A
LET B=COMPLEX(1,2) !点B
DRAW disk WITH SCALE(0.1)*SHIFT(o)
DRAW disk WITH SCALE(0.1)*SHIFT(A)
DRAW disk WITH SCALE(0.1)*SHIFT(B)
PLOT LINES: o; A; B; o !三角形OAB

LET R60=EXP(2*PI*i/6) !60°の回転

LET P=A/R60 !点Pは、点Aを時計まわりに60°回転させたもの
DRAW disk WITH SCALE(0.1)*SHIFT(P)
LET Q=(A-B)*R60 + B !点Qは、点Bを中心に、点Aを反時計まわりに60°回転させたもの
DRAW disk WITH SCALE(0.1)*SHIFT(Q)
LET R=B*R60 !点Rは、点Bを反時計まわりに60°回転させたもの
DRAW disk WITH SCALE(0.1)*SHIFT(R)
PRINT P;Q;R


PLOT LINES: A; R !線分AR
PLOT LINES: B; P !線分BP
PLOT LINES: o; Q !線分OQ


LET G=(o+P+A)/3 !正三角形の外心と重心は一致する
DRAW circle WITH SCALE(ABS(o-G))*SHIFT(G)
LET G=(A+Q+B)/3
DRAW circle WITH SCALE(ABS(A-G))*SHIFT(G)
LET G=(B+R+o)/3
DRAW circle WITH SCALE(ABS(B-G))*SHIFT(G)


CALL intersection(A,R,B,P, F) !交点
PRINT F

PRINT DEG(arg((A-F)/(o-F))) !∠oFA
PRINT DEG(arg((B-F)/(A-F))) !∠AFB
PRINT DEG(arg((o-F)/(B-F))) !∠BFo

END

EXTERNAL SUB intersection(a,b,c,d, p) !直線ABと直線CDの交点Pを求める
OPTION ARITHMETIC COMPLEX !複素平面
LET i=COMPLEX(0,1) !虚数単位
!三角形の高さを出して、斜辺を出す。AからPまでの距離を計算する。
LET t=ABS(a-c)*SIN(arg((a-c)/(d-c))) / SIN(arg((a-b)/(d-c)))
LET p=a+t*EXP(i*arg(b-a))
END SUB


実行結果

( 2 -3.46410161513775) ( 4.23205080756888  3.59807621135332) (-1.23205080756888  1.86602540378444)
( 1.18209515617771  1.0050135630206)
120
120
120


 

戻る