점과 원의 중심을 통과하는 직선에 평행 한 원의 접선 방정식을 구합니다.
점과 원의 중심을 통과하는 직선에 평행 한 원의 접선 방정식을 구합니다.
점 $Q(x_1,y_1)$ 에서 중심이 $C(x_0,y_0)$ 반경이 $r$ 의 원 $(x-x_0)^2+(y-y_0)^2=r^2$ 의 중심 를 묶은 직선에 평행한 원의 접선 방정식을 구한다.
점 $Q(x_1,y_1)$ 과 원의 중심 $C(x_0,y_0)$ 를 연결한다 직선 방정식
$$(y_1-y_0)x+(x_0-x_1)y+(x_1y_0-x_0y_1)=0\\cdots\①$$
점 $Q$ 와 원의 중심 $C$ 를 묶는 직선 방정식
$$ax+by+c=0\\cdots\①$$
그러면 이 직선의 법선 벡터는 ①에 따라
$$\vec{n}=(a,b)$$
접선의 접점을 $A,B$ 라고 하면,
접점 $A$ 는 원의 중심 $(x_0,y_0)$ 로부터 직선의 법선 벡터 $\vec{n}$ 방향으로 거리 $r$ 의 점이 된다.
접점 $B$ 는 원의 중심 $(x_0,y_0)$ 로부터 직선의 법선 벡터 $\vec{n}$ 방향으로 거리 $-r$ 의 점이 된다.
$\vec{n}$ 의 단위 벡터를 $\vec{h}$ 로 지정하면,
$$\vec{h}=\vec{n}\cdot\frac{1}{\sqrt{a^2+b^2}}=(a,b)\cdot\frac{1}{\sqrt{ a^2+b^2}}=\left(\frac{a}{\sqrt{a^2+b^2}},\frac{b}{\sqrt{a^2+b^2}}\right)$$
가 접점 $A,B$ 의 좌표는,
$$A=(x_0,y_0)+\left(\frac{a}{\sqrt{a^2+b^2}}\cdot r,\frac{b}{\sqrt{a^2+b^ 2}}\cdot r\right)=\left(\frac{ar}{\sqrt{a^2+b^2}}+x_0,\frac{br}{\sqrt{a^2+b^2 }}+y_0\right)$$
$$B=(x_0,y_0)+\left(\frac{a}{\sqrt{a^2+b^2}}\cdot -r,\frac{b}{\sqrt{a^2+b ^2}}\cdot -r\right)=\left(-\frac{ar}{\sqrt{a^2+b^2}}+x_0,-\frac{br}{\sqrt{a^2 +b^2}}+y_0\right)$$
된다.
점 $(x_a,y_a)$ 대로, 직선 $ax+by+c=0$ 에 평행한 직선의 방정식 ( 평행한 직선과 수직인 직선 참조)은,
$$a(x-x_a)+b(y-y_a)=0$$
이 표현식을 확장하고 정리하면,
$$ax+by-(ax_a+by_a)=0$$
이 식의 점 $(x_a,y_a)$ 에 점 $A$ 의 좌표를 대입하면,
$$ax+by-\Biggl\{a\left(\frac{ar}{\sqrt{a^2+b^2}}+x_0\right)+b\left(\frac{br}{\sqrt {a^2+b^2}}+y_0\right)\Biggr\}=0$$
이 표현식을 확장하고 정리하면,
$$ax+by-(ax_0+by_0+r\sqrt{a^2+b^2})=0\\cdots\②$$
여기서, 점 $C,Q$ 의 좌표는 각각 $(x_0,y_0),(x_1,y_1)$ 이므로, 점 $C,Q$ 를 연결하는 직선 $ax+by+c=0$ 의 방정식은, 2점을 통과하는 직선 방정식의 공식에 따라 ( 직선 방정식 참조)
$$(y_1-y_0)x+(x_0-x_1)y+(x_1y_0-x_0y_1)=0$$
된다. 따라서 ①의 식의 계수 $a,b,c$ 는
$$a=y_1-y_0,\\\\b=x_0-x_1,\\\\c=x_1y_0-x_0y_1$$
그리고, 이 값을 ②의 식에 대입하면,
$$(y_1-y_0)x+(x_0-x_1)y-\Biggr\{(y_1-y_0)x_0+(x_0-x_1)y_0+r\sqrt{(y_1-y_0)^2+(x_0-x_1)^ 2}\Biggr\}=0$$
정리하면
$$(y_1-y_0)x+(x_0-x_1)y-(x_0y_1-x_1y_0+r\sqrt{(y_1-y_0)^2+(x_0-x_1)^2})=0$$
이것은 접점 $A$ 쪽의 접선 방정식입니다.
마찬가지로 접점 $B$ 측을 계산하면,
$$(y_1-y_0)x+(x_0-x_1)y-(x_0y_1-x_1y_0-r\sqrt{(y_1-y_0)^2+(x_0-x_1)^2})=0$$
된다.
【예】점(15,5)과 중심(3,2) 반경 5의 원의 중심을 연결한 직선에 평행한 원의 접선의 방정식을 구한다.
위 공식,
$$(y_1-y_0)x+(x_0-x_1)y-(x_0y_1-x_1y_0+r\sqrt{(y_1-y_0)^2+(x_0-x_1)^2})=0$$
$$(y_1-y_0)x+(x_0-x_1)y-(x_0y_1-x_1y_0-r\sqrt{(y_1-y_0)^2+(x_0-x_1)^2})=0$$
따라서 첫 번째 접선 방정식은
$$(5-2)x+(3-15)y-(3\cdot5-15\cdot2+5\sqrt{(5-2)^2+(3-15)^2})=0$$
그러므로
$$3x-12y+15-15\sqrt{17}=0$$
소수로 표현하면,
$$3x-12y-46.8466=0$$
두 번째 접선 방정식은
$$(5-2)x+(3-15)y-(3\cdot5-15\cdot2-5\sqrt{(5-2)^2+(3-15)^2})=0$$
그러므로
$$3x-12y+15+15\sqrt{17}=0$$
소수로 표현하면,
$$3x-12y+76.8466=0$$
된다.
샘플 프로그램
원형 모양을 선택하고 그 다음 점을 지시합니다. 그 점과 원의 중심을 통과하는 직선에 평행 한 원의 접선을 만듭니다.
;; 点と円の中心を通る直線に平行な円の接線の方程式を求める
(defun c:CreateTangentOfParallelPoint (/ circle point)
;; 円を選択
(while (null circle)
(setvar 'ERRNO 0)
(setq circle (car (entsel "円を選択: ")))
(cond
;; 空振り
((= 7 (getvar 'ERRNO))
(princ "\n**空振り!!再選択**\n")
(setq circle nil)
)
;; 空Enter
((= 52 (getvar 'ERRNO))
(princ "\n**空Enter!!再選択**\n")
(setq circle nil)
)
;; 図形が選択された
(circle
(if (/= "CIRCLE" (entity:GetType circle))
(progn
(princ "\n**円ではありません!!再選択**\n")
(setq circle nil)
)
(princ "\n**円が選択されました。**\n")
)
)
)
)
;; 点を選択
(setq point (getpoint "点を指示: " ))
;; 接線を作成
(mapcar
(function
(lambda (f)
(entmake:XlineFromEquation (car f) (cadr f) (caddr f))
)
)
(circle:GetEquationOfParallelPoint circle point)
)
)
;; == sub functions ==
;; 図形のDXF定義データの値を取得
(defun entity:GetDxf (g e)
(cond
((= (type e) 'ENAME) (cdr (assoc g (entget e))))
((listp e) (cdr (assoc g e)))
)
)
;; 図形のタイプを取得
(defun entity:GetType (e) (entity:GetDxf 0 e))
;; 円の中心を取得
(defun circle:GetCenterPoint (e) (entity:GetDxf 10 e))
;; 円の半径を取得
(defun circle:GetRadius (e) (entity:GetDxf 40 e))
;; 点と円の中心を通る直線に平行な円の接線の方程式を求める
(defun circle:GetEquationOfParallelPoint (circle point / a b c d r o x0 x1 y0 y1)
(setq r (circle:GetRadius circle)
o (circle:GetCenterPoint circle)
x0 (car o) y0 (cadr o)
x1 (car point) y1 (cadr point)
a (- y1 y0) b (- x0 x1)
c (- (* x0 y1) (* x1 y0))
d (sqrt (+ (* a a) (* b b)))
)
(list
(list a b (- (- c) (* r d)))
(list a b (+ (- c) (* r d)))
)
)
;; 構築線を定義
(defun entmake:XlineBase (p u)
(list '(000 . "XLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbXline")
(cons 010 p)
(cons 011 u)
)
)
;; 基点と単位方向ベクトルから構築線を作成
(defun entmake:Xline (p u) (entmake (entmake:XlineBase p u)) (entlast))
;; 直線の方程式から構築線を作成
(defun entmake:XlineFromEquation (a b c)
(entmake:Xline (list (- (/ c a)) 0. 0.) (list (- b) a 0.))
)
Reference
이 문제에 관하여(점과 원의 중심을 통과하는 직선에 평행 한 원의 접선 방정식을 구합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tydesign/items/d508437cb9ec363c9f48텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)