JuliaGeometry / GeometryBasics.jl

Basic Geometry Types
MIT License
165 stars 54 forks source link

Point2 in Polygon gives bad result. #220

Open valegnr opened 2 months ago

valegnr commented 2 months ago

I am unsure if i am using your code correctly, but i assume that the following code behaves different to what i would expect:

using GeometryBasics,StableRNGs

rng = StableRNG(123) 

results_tri = Vector{Bool}(undef,100)
results_poly = Vector{Bool}(undef,100)
for i in eachindex(results_tri)
    xs = sort(rand(rng,Float32,3))[[1,3,2]] #sorting for orientation of area
    ys = sort(rand(rng,Float32,3))
    points = Point2.(xs,ys)
    tri = Triangle(points...)
    pol = Polygon(points)
    point = 1/3 * sum(points)

    results_tri[i] = point in tri 
    results_poly[i] = point in pol 
end

sum(results_tri) == length(results_tri) # returns true
sum(results_poly) == length(results_poly) #returns false

This means to me that in(p::Point2,pol::Polygon) gives a wrong result. Thank you for your time and effort!

asinghvi17 commented 2 months ago

GeometryBasics is meant to be a library that just defines types - try https://github.com/JuliaGeo/GeometryOps.jl or its predecessor https://github.com/JuliaGeometry/PolygonOps.jl for geometry algorithms that work with GeometryBasics!