Having a circle with the centre $(x_c, y_c)$ with the radius $r$ how to know whether a point $(x_p, y_p)$ is inside the circle?
How to know if a point is inside a circle?
-
2Do you know the formula for the distance between two points, given their coordinates? – 2012-09-18
-
0Well, it would definitely help. – 2012-09-18
-
1Inside the radius? You mean inside the circle? – 2012-09-18
-
0Exactly, @PeterTamaroff. – 2012-09-18
4 Answers
The distance between $\langle x_c,y_c\rangle$ and $\langle x_p,y_p\rangle$ is given by the Pythagorean theorem as $$d=\sqrt{(x_p-x_c)^2+(y_p-y_c)^2}\;.$$ The point $\langle x_p,y_p\rangle$ is inside the circle if $d
The point is inside the circle if the distance from it to the center is at most $r$. Symbolically, this is $$\sqrt{|x_p-x_c|^2+|y_p-y_c|^2}< r.$$
-
0I would not say that it’s **inside** the circle when the distance is $r$. – 2012-09-18
-
2It depends on whether you include the boundary. If you don't, replace $\leq$ with $<$. – 2012-09-18
-
3I’d say that you’re confusing the (closed) disk with the circle. A point at distance $r$ for the centre is inside the disk but not inside the circle; rather, it’s **on** the circle. (It’s a fairly minor point, but there are enough occasions for terminological confusion that I like to avoid it when it’s easy to do so.) – 2012-09-18
-
0@BrianM.Scott That's a fair point. – 2012-09-18
Alex and Brian have answered your question already. In case you're trying to implement this algorithm in some programming language, here's my Haskell implementation:
distance :: Floating a => (a, a) -> (a, a) -> a distance (x1,y1) (x2,y2) = sqrt((x1-x2)**2 + (y1-y2)**2) isInsideCircle :: (Ord a, Floating a) => a -> (a, a) -> (a, a) -> Bool isInsideCircle r (xc,yc) (x,y) | (distance (xc,yc) (x,y) < r) = True | (distance (xc,yc) (x,y) >= r) = False
Suppose you have a circle whose radius is $r = 1$ and whose center is the origin $(0,0)$. You would like to know if $(\frac{1}{2},0)$, $(1,0)$, and $(1,1)$ are inside the circle. The following interactive GHCi session answers the question:
*Main> isInsideCircle 1 (0,0) (0.5,0) True *Main> isInsideCircle 1 (0,0) (1,0) False *Main> isInsideCircle 1 (0,0) (1,1) False
-
0Here is also implementation in Kotlin: `fun isInsideCircle(x: Float, y: Float, circleX: Float, circleY: Float, circleRadius: Float): Boolean { val absX = Math.pow(Math.abs(x - circleX).toDouble(), 2.0) val absY = Math.pow(Math.abs(y - circleY).toDouble(), 2.0) return Math.sqrt(absX + absY) < circleRadius }` – 2017-10-26
-
0@YuriySeredyuk That Kotlin code is unnecessary inefficient. Using Math.pow is a very inefficient way to multiply two numbers, especially because it takes a double as exponent. Math.abs is not necessary, because squaring a negative numbers will also result in a positive value. The square root is also not necessary when you multiply circleRadius with itself (Squaring both sides of the comparison). The only operations you need are addition, subtraction, and multiplying. – 2018-09-19
If you have the equation of the circle, simply plug in the x and y from your point (x,y). After working out the problem, check to see whether your added values are greater than, less than, or equal to the r^2 value. If it is greater, then the point lies outside of the circle. If it is less than, the point is inside the circle. If it is equal, the point is on the circle.