Check whether a point exists in circle sector or not.
We have a circle centered at origin (0, 0). As input we are given with starting angle of the circle sector and the size of the circle sector in percentage.
Examples:
Input : Radius = 8 StartAngle = 0 Percentage = 12 x = 3 y = 4 Output : Point (3, 4) exists in the circle sector Input : Radius = 12 Startangle = 45 Percentage = 25 x = 3 y = 4 Output : Point (3, 4) does not exist in the circle sector
In this image starting angle is 0 degree, radius r and suppose that percentage of colored area is 12% then we calculate Ending Angle as 360/percentage + starting angle.
To find whether a point (x, y) exists in a circle sector (centered at origin) or not we find polar coordinates of that point and then go through the following steps:
- Convert x, y to polar coordinates using this
Angle = atan(y/x); Radius = sqrt(x * x + y * y); - Then Angle must be between StartingAngle and EndingAngle, and Radius between 0 and your Radius.
C++
// C++ program to check if a point lies inside a circle // sector. #include<bits/stdc++.h> using namespace std; void checkPoint( int radius, int x, int y, float percent, float startAngle) { // calculate endAngle float endAngle = 360/percent + startAngle; // Calculate polar co-ordinates float polarradius = sqrt (x*x+y*y); float Angle = atan (y/x); // Check whether polarradius is less then radius of circle // or not and Angle is between startAngle and endAngle // or not if (Angle>=startAngle && Angle<=endAngle && polarradius<radius) printf ( "Point (%d, %d) exist in the circle sector\n" , x, y); else printf ( "Point (%d, %d) does not exist in the circle sector\n" , x, y); } // Driver code int main() { int radius = 8, x = 3, y = 4; float percent = 12, startAngle = 0; checkPoint(radius, x, y, percent, startAngle); return 0; } |
Java
// Java program to check if // a point lies inside a circle // sector. class GFG { static void checkPoint( int radius, int x, int y, float percent, float startAngle) { // calculate endAngle float endAngle = 360 /percent + startAngle; // Calculate polar co-ordinates double polarradius = Math.sqrt(x*x+y*y); double Angle = Math.atan(y/x); // Check whether polarradius is // less then radius of circle // or not and Angle is between // startAngle and endAngle // or not if (Angle>=startAngle && Angle<=endAngle && polarradius<radius) System.out.print( "Point" + "(" +x+ "," +y+ ")" + " exist in the circle sector\n" ); else System.out.print( "Point" + "(" +x+ "," +y+ ")" + " exist in the circle sector\n" ); } // Driver Program to test above function public static void main(String arg[]) { int radius = 8 , x = 3 , y = 4 ; float percent = 12 , startAngle = 0 ; checkPoint(radius, x, y, percent, startAngle); } } // This code is contributed // by Anant Agarwal. |
Python3
# Python3 program to check if a point # lies inside a circle sector. import math def checkPoint(radius, x, y, percent, startAngle): # calculate endAngle endAngle = 360 / percent + startAngle # Calculate polar co-ordinates polarradius = math.sqrt(x * x + y * y) Angle = math.atan(y / x) # Check whether polarradius is less # then radius of circle or not and # Angle is between startAngle and # endAngle or not if (Angle > = startAngle and Angle < = endAngle and polarradius < radius): print ( "Point (" , x, "," , y, ") " "exist in the circle sector" ) else : print ( "Point (" , x, "," , y, ") " "does not exist in the circle sector" ) # Driver code radius, x, y = 8 , 3 , 4 percent, startAngle = 12 , 0 checkPoint(radius, x, y, percent, startAngle) # This code is contributed by # Smitha Dinesh Semwal |
C#
// C# program to check if a point lies // inside a circle sector. using System.IO; using System; class GFG { static void checkPoint( int radius, int x, int y, float percent, float startAngle) { // calculate endAngle float endAngle = 360 / percent + startAngle; // Calculate polar co-ordinates float polarradius = ( float )Math.Sqrt(x * x + y * y); float Angle = ( float )Math.Atan(y / x); // Check whether polarradius is less then // radius of circle or not and Angle is // between startAngle and endAngle or not if (Angle >= startAngle && Angle <= endAngle && polarradius < radius) Console.Write( "Point ({0}, {1}) exist in " + "the circle sector" , x, y); else Console.Write( "Point ({0}, {1}) does not " + "exist in the circle sector" , x, y); } // Driver code public static void Main() { int radius = 8, x = 3, y = 4; float percent = 12, startAngle = 0; checkPoint(radius, x, y, percent, startAngle); } } // This code is contributed by Smitha Dinesh Semwal |
Javascript
<script> // Javascript program to check if // a point lies inside a circle // sector. function checkPoint(radius, x, y, percent, startAngle) { // Calculate endAngle let endAngle = 360 / percent + startAngle; // Calculate polar co-ordinates let polarradius = Math.sqrt(x * x + y * y); let Angle = Math.atan(y / x); // Check whether polarradius is // less then radius of circle // or not and Angle is between // startAngle and endAngle // or not if (Angle >= startAngle && Angle <= endAngle && polarradius < radius) document.write( "Point" + "(" + x + "," + y + ")" + " exist in the circle sector\n" ); else document.write( "Point" + "(" + x + "," + y + ")" + " exist in the circle sector\n" ); } // Driver code let radius = 8, x = 3, y = 4; let percent = 12, startAngle = 0; checkPoint(radius, x, y, percent, startAngle); // This code is contributed by splevel62 </script> |
Output :
Point(3, 4) exists in the circle sector
Time complexity: O(1)
Auxiliary Space: O(1)