LoginSignup
6
3

More than 3 years have passed since last update.

円の内部の点か調べる

Last updated at Posted at 2020-03-07

円の方程式

円の方程式 参照

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

円の内部の点か調べる_03.png

円と点の位置関係は

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

円の内部の点か調べる_04.png
(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
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3