円の方程式
円の方程式 参照
円と点の位置関係と判定方法
円と点の位置関係は
- 円の内部の点 $(Q_1)$
- 円周上の点 $(Q_2)$
- 円の外部の点 $(Q_3)$
の3通り。
その判定方法は、円の中心から調べる点までの長さと、半径を比較して、
- 半径より小さい場合は、円の内部の点 $(CQ_1<r)$
- 半径と同じ場合は、円周上のの点 $(CQ_2=r)$
- 半径より大きい場合は、円の外部の点 $(CQ_3>r)$
となる。
円の中心の座標を$(a,b)$、半径を$r$、調べる点$Q$の座標を$(x,y)$としたとき、
$$ \sqrt{(x - a)^2 + (y - b)^2}<r$$
両辺を二乗して、
$$ (x - a)^2 + (y - b)^2<r^2$$
を満たす場合、円の内部の点と判断できる。
円周上の点も内部とみなす場合の判定式は、
$$ (x - a)^2 + (y - b)^2 \leqq r^2$$
となる。
【例】 中心(3,2) 半径 5 の円に対して、
(2-3)^2+(6-2)^2=1+16=17\\
r^2=5^2=25\\
17<25\quad なので\quad Q_1は円の内部の点
(2) $Q_2(7,5)$は、
(7-3)^2+(5-2)^2=16+9=25\\
r^2=5^2=25\\
25=25\quad なので\quad Q_2は円周上の点
(3) $Q_3(8,-2)$は、
(8-3)^2+(-2-2)^2=25+16=41\\
r^2=5^2=25\\
41>25\quad なので\quad Q_3は円の外部の点
判定プログラム
;; 円周上の点か調べる
;; Args - cx : 円の中心のx座標
;; cy : 円の中心のy座標
;; cr : 円の半径
;; x : 調べる点のx座標
;; y : 調べる点のy座標
(defun circle:IsOn (cx cy cr x y)
(equal (+ (expt (- x cx) 2) (expt (- y cy) 2)) (* cr cr) 1e-8)
)
;; 円の内部の点か調べる
(defun circle:Contains (cx cy cr x y)
(< (+ (expt (- x cx) 2) (expt (- y cy) 2)) (* cr cr))
)
;; 円の内部の点か調べる
;; 円周上の点も含める
(defun circle:IsOnOrContains (cx cy cr x y)
(or (circle:IsOn cx cy cr x y) (circle:Contains cx cy cr x y))
)
;; < Example >
(circle:IsOn 3. 2. 5. 2. 6.) ;;Q1
;; -> T
(circle:IsOn 3. 2. 5. 7. 5.) ;;Q2
;; -> nil
(circle:IsOn 3. 2. 5. 8. -2.) ;;Q3
;; -> nil
(circle:Contains 3. 2. 5. 2. 6.) ;;Q1
;; -> nil
(circle:Contains 3. 2. 5. 7. 5.) ;;Q2
;; -> T
(circle:Contains 3. 2. 5. 8. -2.) ;;Q3
;; -> nil
(circle:IsOnOrContains 3. 2. 5. 2. 6.) ;;Q1
;; -> T
(circle:IsOnOrContains 3. 2. 5. 7. 5.) ;;Q2
;; -> T
(circle:IsOnOrContains 3. 2. 5. 8. -2.) ;;Q3
;; -> nil