Search code examples
sqlpositiongeometrycomputational-geometry

Need "Is the point in the pie?" in SQL


In my SQL Table pie_on_coords, I have following

  id  |  direction_angle  |  pie_angle  |  position_x  |  position_y  |  pie_radius

Entries correspond something like this:

pie_sample

I supposed to find entries, which cover given point (x,y)

But how?


Solution

  • Check is polar coordinates (r, phi) of point (x, y) - (position_x, position_y) in ([0,pie_radius], [direction_angle - pie_angle/2, direction_angle + pie_angle/2]).

    px = x - position_x
    py = y - position_y
    r = sqrt( px^2 + py^2 )
    phi = atan2(py/px)
    

    Point is in if:

    r <= pie_radius
    direction_angle - pie_angle/2 <= phi <= direction_angle + pie_angle/2
    

    Take a care if direction_angle - pie_angle/2 < -pi or direction_angle + pie_angle/2 > pi.