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)は
以下のリンクからダウンロードできます


https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい





 









このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)