Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8941605
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T11:20:42+00:00 2026-06-15T11:20:42+00:00

I have a set of 2d points distributed randomly. I need to perform a

  • 0

I have a set of 2d points distributed randomly. I need to perform a time intensive operation on a small subset of these points but I need to first figure out what points I need to perform this time intensive operation on. To determine what points I need they must pass a series of geometric criteria.

The most basic criteria is are they within a certain distance of a specific point. The second most basic criteria is whether they are contained within a circle sector (a 2-D cone) extending out from that specific point. (Edit: This operation is called regularly with a different specific point each time but the same set of 2d points.)

My initial thought was to create a grid containing the 2d points, then iterate along the cone grabbing grid squares that it intersects. Depending on the size of the grid it would filter out the vast majority of unneeded 2d points. Unfortunately the embedded system I’m running on is severely memory constrained so a large (by our standards not anyone elses) 2d array would be too memory intensive.

I have been trying to investigate using KD trees to speed up the calculation but I haven’t been able to find an algorithm relating circle sectors and kd-trees.

Is there an efficient algorithm for finding what 2d points lie within a circle sector?

Just a note our particular system is slow at both floating point math and trigonometry so a solution that involves less of those is superior one that requires a lot of it.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T11:20:43+00:00Added an answer on June 15, 2026 at 11:20 am

    It’s possible to check if a point is inside a sector with only integer arithmetic and the basic operations of addition, subtraction and multiplication.

    For a point to be inside a circular sector, it has to meet the following tests:

    1. It has to be positioned counter-clockwise from the start “arm” of the sector.
    2. It has to be positioned clockwise from the end arm of the sector.
    3. It has to be closer to the center of the circle than the sector’s radius.

      For a point to be inside a, it has to meet the following tests
      It has to be positioned counter-clockwise from the start "arm" of the sector
      It has to be positioned clockwise from the end arm of the sector
      It has to be closer to the center of the circle than the sector's radius

    Clockwise tests

    To test if a vector v2 is clockwise to a another vector v1, do the following:

    1. Find the counter-clockwise normal vector of v1. The normal vector is at a 90 degrees angle to the original vector. This is straightforward to do: if v1=(x1,y1), then the counter-clockwise normal is n1=(-y1,x1).

    2. Find the size of the projection of v2 on the normal. This can be done by calculating the dot product of v2 and the normal.

      projection = v2.x*n1.x + v2.y*n1.y

    3. If the projection is a positive number, then the v2 is positioned counter-clockwise to v1. Otherwise, v2 is clockwise to v1.

    Here’s a counter-clockwise example:
    Counter-clockwise example

    And a clockwise example:
    Clockwise example

    The steps can be combined:

    function areClockwise(v1, v2) {
      return -v1.x*v2.y + v1.y*v2.x > 0;
    }
    

    Radius test

    The radius test is straightforward. Just check if the distance of the point from the center of the circle is less than the desired radius. To avoid computing square roots, we can compare the square of the distance with the square of the radius instead.

    function isWithinRadius(v, radiusSquared) {
      return v.x*v.x + v.y*v.y <= radiusSquared;
    }
    

    Putting it together

    The complete sector test looks something like:

    function isInsideSector(point, center, sectorStart, sectorEnd, radiusSquared) {
      var relPoint = {
        x: point.x - center.x,
        y: point.y - center.y
      };
    
      return !areClockwise(sectorStart, relPoint) &&
             areClockwise(sectorEnd, relPoint) &&
             isWithinRadius(relPoint, radiusSquared);
    }
    

    The following sample page demonstrates this over several thousand points. You can experiment with the code at: http://jsbin.com/oriyes/8/edit.

    Screenshot

    Sample source code

    <!DOCTYPE html>
    <html>
      <head>
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <style>
          .canvas {
            position: absolute;
            background: #f4f4f4;
            border: 8px solid #f4f4f4;
            width: 400px;
            height: 400px;
          }
    
          .dot {
            position: absolute;
            font: 16px Arial;
          }
          .out { color: #ddd; }
          .in { color: #00dd44; }
        </style>
        <script>
          function isInsideSector(point, center, sectorStart, sectorEnd, radiusSquared) {
            var relPoint = {
              x: point.x - center.x,
              y: point.y - center.y
            };
    
            return !areClockwise(sectorStart, relPoint) &&
                   areClockwise(sectorEnd, relPoint) &&
                   isWithinRadius(relPoint, radiusSquared);
          }
    
          function areClockwise(v1, v2) {
            return -v1.x*v2.y + v1.y*v2.x > 0;
          }
    
          function isWithinRadius(v, radiusSquared) {
            return v.x*v.x + v.y*v.y <= radiusSquared;
          }
    
          $(function() {
            var $canvas = $("#canvas");
            var canvasSize = 400;
            var count = 4000;
    
            // define the sector
            var center = { x: canvasSize / 2, y: canvasSize / 2 };
            var sectorStart = { x: 4, y: 1 };
            var sectorEnd = { x: 1, y: 4 };
            var radiusSquared = canvasSize * canvasSize / 4;
    
            // create, draw and test a number of random points
            for (var i = 0; i < count; ++i) {
    
              // generate a random point
              var point = {
                x: Math.random() * canvasSize,
                y: Math.random() * canvasSize
              };
    
              // test if the point is inside the sector
              var isInside = isInsideSector(point, center, sectorStart, sectorEnd, radiusSquared);
    
              // draw the point
              var $point = $("<div class='dot'></div>")
                  .css({
                    left: point.x - 3,
                    top:  canvasSize - point.y - 8 })
                  .html("&#8226;")
                  .addClass(isInside ? "in" : "out")
                  .appendTo($canvas);
            }
          });
        </script>
      </head>
      <body>
        <div id="canvas" class="canvas"></div>
      </body>
    </html>
    

    Notes, caveats and limitations

    1. You have to specify the boundaries of the sector in terms of vectors. The screenshot above, for example, shows a sector stretching between the vectors of (4,1) and (1,4).

    2. If your sector is specified in other terms, e.g. angles, you will have to convert that to vectors first, e.g. using the tan() function. Fortunately, you only have to do this once.

    3. The logic here works for sectors with an inner angle of less than 180 degrees. If your sectors can span a larger angle, you’ll have to modify it.

    4. Additionally, the code assumes that you know which of the bounding vectors of the sector is the “start” and which is the “end”. If you don’t, you can run the areClockwise() on them to find out.

    5. Note that while all this can be done with integer arithmetic, both the radius and clockwise tests use a larger range of numbers, due to squaring x’s and y’s and multiplying them together. Make sure to use integers of sufficient bits to hold the results.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have set of points which lies on the image. These set of points
I have a set of transactions occurring at specific points in time: CREATE TABLE
I have a set of points (x,y) and I need to find the line
I have a set of points as time of day like 05:36:37 06:31:41 06:38:24
I have a set of xyz coordinates for points distributed on a arbitrary 3D
I have set break points on my attached properties SetXXX and GetXXX static methods.
I have a set of points that i want to turn into a closed
I have a set of points represented as a 2 row by n column
I have a set S of points (2D : defined by x and y)
I have a set of data points in 3D space which apparently all fall

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.