N88-BASICでCIRCLE (1回目)
2022/3/8(火)
N88-BASICでCIRCLE (1回目)
3点を通る円をCIRCLE命令で描画します
ベクトルは大文字、スカラーは小文字で
書くことにします
ベクトルの内積の行列表記
A=(ax,ay), B=(bx,by)
A・B = axbx + ayby
|ax ay||bx| = axbx + axby = A・B
|by|
行列M =|a b|の行列式det|M|=ad-bc
|c d|
det|M|はベクトル(a b),(c d)または
(a c),(b d)が作る平行四辺形の面積(方向有)
行列や、平行四辺形の面積は、このブログの
https://ulprojectmail.blogspot.com/2021/06/n88-basicmatrix-1.html
N88-BASICで行列(matrix) (1回目)
https://ulprojectmail.blogspot.com/2022/03/n88-basicvector-2.html
N88-BASICでベクトル (2回目)
で、それぞれ解説しています
逆行列M-1= 1 | d -b| (det|M|=ad-bc≠0)
ad-bc |-c a|
単位行列I=|1 0|
|0 1|
(ad-bc)M-1M=|ad-bc -ab+ab|=|ad-bc 0 |
|cd-cd -cb+ad| | 0 ad-bc|
M-1M=|1 0| = I
|0 1|
--------------------------------------------
円周上の3点と中心の位置ベクトルを
A,B,C,O、円の半径をrとする
A=(ax,ay), B=(bx,by), C=(cx,cy), O=(x,y), r
中心から各3点までの距離はrなので
|A-O|=r
|B-O|=r
|C-O|=r
両辺2乗して
|A|2 - 2A・O + |O|2 = r2 … ①
|B|2 - 2B・O + |O|2 = r2 … ②
|C|2 - 2C・O + |O|2 = r2 … ③
②-①より(B-A)・O = (|B|2 - |A|2) / 2
③-②より(C-B)・O = (|C|2 - |B|2) / 2
(bx-ax)x + (by-ay)y = (|B|2 - |A|2) / 2
(cx-bx)x + (cy-by)y = (|C|2 - |B|2) / 2
a = bx - ax , b = by - ay
c = cx - bx , d = cy - by
e = |B|2 - |A|2
f = |C|2 - |B|2
と置くと、
xa + yb = e / 2
xc + yd = f / 2
行列表記にすると
|a b||x| = 1|e|
|c d||y| 2|f|
左辺行列の逆行列を両辺行列の左に掛けて
|x| = 1 | d -b||e|
|y| 2(ad - bc) |-c a||f|
よって、中心O=(x,y)と半径rは
x = k( de - bf)
y = k(-ce + af)
r = |A - O| = √{(ax - x)2 + (ay - y)2}
ただし、
a = bx - ax
b = by - ay
c = cx - bx
d = cy - by
e = |B|2 - |A|2 = bx2 + by2 - (ax2 + ay2)
f = |C|2 - |B|2 = cx2 + cy2 - (bx2 + by2)
k = 1
2(ad - bc)
ad - bc = 0のときは3点A,B,Cが
1直線上にあるので円は描けません
NL-BASICとblg~.zip(cir001.bas)は
以下のリンクからダウンロードできます