Jw_cad 作者さんのホームページの掲示板にて、
垂心・重心・外心・オイラー線、の話がありましたので
当方の「Script!17」で作ってみました。
点座標を取り込むことは出来ませんので、座標値を手入力する必要はあります。最初に、3点を結ぶ直線3つで三角形を描かせています。そして取りあえず、各点間の角度と距離を計算しています。
垂心は、点から垂直に降ろした線の交点だから、辺に垂直=辺の角度+90°で頂点を通る直線の交点ですね。重心は、頂点から辺の中点への線の交点との事で、2点間の中点は、(x1+x2)/2 , (y1+y2)/2 。で、交点を出してます。外心は、中点からの垂線の交点のようだから、その交点を出してます。
各点には、円を描かせてます。
垂心〜重心、重心〜外心を結ぶ線を描画しています。これがオイラー線ですね。双方の角度が同じであれば、一直線上に3点が並ぶ、という事ですね。

垂心・重心・外心・オイラー線、の話がありましたので
当方の「Script!17」で作ってみました。
#VAR
x1 = 10 ;*点1X座標
y1 = 0 ;*点1Y座標
x2 = 100 ;*点2X座標
y2 = 0 ;*点2Y座標
x3 = 20 ;*点3X座標
y3 = 50 ;*点3Y座標
ra1 ;*角度1[°]
ra2 ;*角度2[°]
// 作業用
w1
w2
an1 // 点1〜点2の角度
an2 // 点2〜点3の角度
an3 // 点3〜点1の角度
ln1 // 点1〜点2の長さ
ln2 // 点2〜点3の長さ
ln3 // 点3〜点1の長さ
wx1
wy1
wx2
wy2
wx3
wy3
wx4
wy4
rr
rx1
ry1
rx2
ry2
rx3
ry3
ran1
ran2
#DRAW
LAYER SetLineLay1 // 外形線
PEN SetLineCol1,SetLineLtp1,SetLineWid1
// 三角形を描く
LINE x1,y1,x2,y2
LINE x2,y2,x3,y3
LINE x3,y3,x1,y1
CAL w1 = x2-x1
CAL w2 = y2-y1
GETANGLE an1,w1,w2
CAL w1 = x3-x2
CAL w2 = y3-y2
GETANGLE an2,w1,w2
CAL w1 = x1-x3
CAL w2 = y1-y3
GETANGLE an3,w1,w2
GETDIST ln1,x1,y1,x2,y2
GETDIST ln2,x2,y2,x3,y3
GETDIST ln3,x3,y3,x1,y1
CAL rr = (ln1+ln2+ln3)/3/50
LAYER SetLineLay7 // 補助線
PEN 6,SetLineLtp7,SetLineWid7
// 垂心
CAL w1 = 200
CAL wx1 = x1 + w1*Cos(an2-0.5*PI)
CAL wy1 = y1 + w1*Sin(an2-0.5*PI)
CAL wx2 = x1 + w1*Cos(an2+0.5*PI)
CAL wy2 = y1 + w1*Sin(an2+0.5*PI)
LINE wx1,wy1,wx2,wy2
CAL wx3 = x2 + w1*Cos(an3-0.5*PI)
CAL wy3 = y2 + w1*Sin(an3-0.5*PI)
CAL wx4 = x2 + w1*Cos(an3+0.5*PI)
CAL wy4 = y2 + w1*Sin(an3+0.5*PI)
LINE wx3,wy3,wx4,wy4
GETCRSLL w1,rx1,ry1,wx1,wy1,wx2,wy2, wx3,wy3,wx4,wy4
CIRCLE rx1,ry1,rr
// 重心
PEN 4,SetLineLtp7,SetLineWid7
CAL wx1 = x1
CAL wy1 = y1
CAL wx2 = (x2 + x3)/2
CAL wy2 = (y2 + y3)/2
LINE wx1,wy1,wx2,wy2
CAL wx3 = x2
CAL wy3 = y2
CAL wx4 = (x1 + x3)/2
CAL wy4 = (y1 + y3)/2
LINE wx3,wy3,wx4,wy4
GETCRSLL w1,rx2,ry2,wx1,wy1,wx2,wy2, wx3,wy3,wx4,wy4
CIRCLE rx2,ry2,rr
// 外心
PEN 3,SetLineLtp7,SetLineWid7
CAL w1 = 200
CAL wx1 = (x1 + x2)/2
CAL wy1 = (y1 + y2)/2
CAL wx2 = wx1 + w1*Cos(an1+0.5*PI)
CAL wy2 = wy1 + w1*Sin(an1+0.5*PI)
LINE wx1,wy1,wx2,wy2
CAL wx3 = (x2 + x3)/2
CAL wy3 = (y2 + y3)/2
CAL wx4 = wx3 + w1*Cos(an2+0.5*PI)
CAL wy4 = wy3 + w1*Sin(an2+0.5*PI)
LINE wx3,wy3,wx4,wy4
GETCRSLL w1,rx3,ry3,wx1,wy1,wx2,wy2, wx3,wy3,wx4,wy4
CIRCLE rx3,ry3,rr
// オイラー線
LAYER SetLineLay5 // 想像線
PEN 8,SetLineLtp5,SetLineWid5
LINE rx1,ry1, rx2,ry2
LINE rx2,ry2, rx3,ry3
CAL w1 = rx2-rx1
CAL w2 = ry2-ry1
GETANGLE ran1,w1,w2
CAL w1 = rx3-rx2
CAL w2 = ry3-ry2
GETANGLE ran2,w1,w2
CAL ra1 = ran1*180/PI
CAL ra2 = ran2*180/PI
// この2つの角度が同じであれば、オイラー線は1直線上にあると言える
点座標を取り込むことは出来ませんので、座標値を手入力する必要はあります。最初に、3点を結ぶ直線3つで三角形を描かせています。そして取りあえず、各点間の角度と距離を計算しています。
垂心は、点から垂直に降ろした線の交点だから、辺に垂直=辺の角度+90°で頂点を通る直線の交点ですね。重心は、頂点から辺の中点への線の交点との事で、2点間の中点は、(x1+x2)/2 , (y1+y2)/2 。で、交点を出してます。外心は、中点からの垂線の交点のようだから、その交点を出してます。
各点には、円を描かせてます。
垂心〜重心、重心〜外心を結ぶ線を描画しています。これがオイラー線ですね。双方の角度が同じであれば、一直線上に3点が並ぶ、という事ですね。



このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。