N88-BASICで円の接線

2022/3/29(火)
N88-BASICで円の接線
 
点P(px,py)を通る、中心C(x0,y0)、半径rの円
への接線を描く
 
円の方程式
円は、中心(x0,y0)から任意の点(x,y)へのベクトル
の長さがrとなる点(x,y)の集合なので
|(x-x0,y-y0)| = rより
(x-x0)2 + (y-y0)2 = r2 
原点が中心なら
x2 + y2 = r2 
 
原点Oを中心とした半径rの円周上の点P(p,q)を
通る接線は
原点から点Pへの方向に垂直なので
傾きは-p/qで、点Pを通るので
y - q = -(p/q)(x - p)
qy - q2 = -px + p2 
px + qy = p2 + q2 (OからPの距離の2乗はr2)
px + qy = r2 
 
点A(x1,y1)を通る、原点Oを中心とした半径rの円
の接線は
円周上の点P(p,q)を通るとすると
px + qy = r2 
この直線は点Aを通るので
px1 + qy1 = r2 
また点Pは円周上にあるので
p2 + q2 = r2 にq = (r2 - px1)/y1 を代入
p2 + (r2 - px1)2/y12 = r2 
y12p2 + r4 - 2x1r2p + p2x12 = y12r2 
(x12 + y12)p2 - 2x1r2p + r2(r2 - y12) = 0
p = x1r2 ±√{x12r4 - (x12 + y12)r2(r2 - y12)}/(x12 + y12)
= x1r2 ±r√{x12r2 - (x12 + y12)(r2 - y12)}/(x12 + y12)
= x1r2 ±r√(x12r2 - r2x12 - r2y12 + x12y12 + y14)/(x12 + y12)
= x1r2 ±ry1√(x12 + y12 - r2)/(x12 + y12)
= r{x1r±y1√(x12 + y12 - r2)}/(x12 + y12)
 
p2 + q2 = r2 にp = (r2 - qy1)/x1 を代入すると
pの式のp,x1,y1をq,y1,x1に置き換えたものとなり
 
接線の円周上の点P(p,q)は
p = r{x1r±y1√(x12 + y12 - r2)}/(x12 + y12)
q = r{y1r±x1√(x12 + y12 - r2)}/(x12 + y12)
となります
円周上の点はxが増えればyが減るので
±はx,yで逆のペアとなります
p = r{x1r +- y1√(x12 + y12 - r2)}/(x12 + y12)
q = r{y1r -+ x1√(x12 + y12 - r2)}/(x12 + y12)
 
 
点P(px,py)を通る、中心C(x0,y0)、半径rの円
への接線を描く
接点の座標A(p,q)が分かれば接線の線分APを引くことが
出来ます
 
点Pと円を円の中心が原点になるように移動し、
上記式で点Aを求め、元の座標に戻せばよいので
 
f(x1, y1) = r{x1r +- y1√(x12 + y12 - r2)}/(x12 + y12)
g(x1, y1) = r{y1r -+ x1√(x12 + y12 - r2)}/(x12 + y12)
と定義すれば
接点の座標A(p,q)は
p = f(x1-x0, y1-y0) + x0 
q = g(x1-x0, y1-y0) + y0 
で求まります
  
NL-BASICとblg~.zip(tan001.bas)は
以下のリンクからダウンロードできます

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













このブログの人気の投稿

NEWS

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