円の内部の点か調べる


円の方程式

円の方程式 参照

円と点の位置関係と判定方法

円と点の位置関係は

  • 円の内部の点 $(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 の円に対して、


(1) $Q_1(2,6)$は、

(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