N88-BASICで点と直線の距離 (1回目)

 2022/3/25(金)
N88-BASICで点と直線の距離 (1回目)
 
初めに
1. 原点(0,0)と直線ax+by+c=0との距離dを求める
 










 





y切片と傾きを書いたグラフの
2つの相似な直角三角形の
辺の比で求めています
 
直線ax + by + c = 0 [ y = -(a/b)x - c/b ]と
原点O(0, 0)との距離dは
上記図より
d = |c| / √(a2+b2)
となる
 
次にグラフの平行移動を考える
2. 平行移動

 




















ちなみに、平行移動を使って
A(x1,y1)を通る傾きmの直線の方程式
y-y1=m(x-x1)
を求める事ができる
 
最後に
3. 点P(x1,y1)と直線ax+by+c=0との距離dを求める

 
 














点P(x1,y1)と直線ax+by+c=0を
x方向に-x1、y方向に-y1移動させると
点Pは原点(0,0)に、直線はax+by+(ax1+by1+c)=0
に移動するが、距離dは変わらないので
原点と直線の距離の公式のcを(ax1+by1+c)で
置き換えれば良い
よって
直線L: ax + by + c = 0 [ y = -(a/b)x - c/b ]と
点P(x1, y1)との距離d = |ax1+by1+c|/√(a2+b2)
となる
 
また、距離d = |ax1+by1+c|/√(a2+b2)は
以下の図で求める事も出来る

 
 






点P(x1, y1)を-x1, -y1 移動して原点に持ってくる
ax + by + c = 0も-x1, -y1 移動して
a{x-(-x1)} + b{y-(-y1)} + c = 0
ax + by + ax1+by1+c = 0
この式と原点の距離がdと同じになる
 
上図のようにax + by + ax1+by1+c = 0
を変形して傾きと切片からグラフを書くと
相似な2つの直角三角形が書ける
 
三平方の定理より
r' = √(a2/b2 + 12) = √{(a2+b2)/b2}
= √(a2+b2)/b
 
d : 1 = r : r' = (ax1+by1+c)/b : √(a2+b2)/b
d : 1 =  ax1+by1+c  : √(a2+b2)
d / 1 = (ax1+by1+c) / √(a2+b2)
d = |ax1+by1+c|/√(a2+b2)
 
おまけ
 
点P(x1, y1)から
直線L: ax + by + c = 0
への垂線との交点H(x,y)を求める
 
原点からax + by + (ax1 + by1 + c) = 0
への垂線との交点(x,y)は
x = -ac/(a2+b2)
y = -bc/(a2+b2)
のcをax1 + by1 + cに置き換た式となり
原点を点P(x1, y1)へ移動させる
つまり(x1, y1)を足せば
点H(x, y)となるので
 
x = x1 - a(ax1 + by1 + c)/(a2+b2)
= {x1(a2+b2) - a(ax1 + by1 + c)}/(a2+b2)
= {x1b2 - a(by1 + c)}/(a2+b2)
= { b(bx1 - ay1) - ac}/(a2+b2)
 
y = y1 - b(ax1 + by1 + c)/(a2+b2)
= {y1(a2+b2) - b(ax1 + by1 + c)}/(a2+b2)
= {y1a2 - b(ax1 + c)}/(a2+b2)
= {-a(bx1 - ay1) - bc}/(a2+b2)
 
よって
点Pから直線Lへの垂線との交点H(x,y)は
x = { b(bx1 - ay1) - ac}/(a2+b2)
y = {-a(bx1 - ay1) - bc}/(a2+b2)
となる
 

4x-3y+24=0 [y=(4/3)x+8]
とP(1,1)の距離dは
d = |ax1+by1+c|/√(a2+b2)
= |4・1-3・1+24|/√{42+(-3)2}
= |25|/√25 = 25/5 = 5
d = 5
点から直線への垂線の交点H(x,y)は
x = { b(bx1 - ay1) - ac}/(a2+b2)
= {-3(-3・1-4・1)-4・24}/{42+(-3)2}
= {-3・(-7)-96}/25 = -75/25 = -3
y = {-a(bx1 - ay1) - bc}/(a2+b2)
= {-4(-3・1-4・1)-(-3)・24}/{42+(-3)2}
= {-4・(-7)+72}/25 = 100/25 = 4
H(-3,4)
 
NL-BASICとblg~.zip(dis001.bas)は
以下のリンクからダウンロードできます

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












 

このブログの人気の投稿

NEWS

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