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
Source:wikibooks.org

Source:wikibooks.org

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:



  1. Convert x, y to polar coordinates using this
    Angle = atan(y/x); Radius = sqrt(x * x + y * y);
  2. Then Angle must be between StartingAngle and EndingAngle, and Radius between 0 and your Radius.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right



Output :

Point(3, 4) exists in the circle sector

Time complexity = O(1)

This article is contributed by Niteesh kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : Smitha Dinesh Semwal



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.