# Inpolygon usage

**URL:** https://discourse.julialang.org/t/inpolygon-usage/39226
**Category:** New to Julia
**Tags:** luxor, polygons
**Created:** [May 10, 2020, 1:43pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226 "2020-05-10T13:43:40Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![O\_Julia](https://avatars.discourse-cdn.com/v4/letter/o/3ab097/32.png) [@O\_Julia](https://discourse.julialang.org/u/O_Julia)
#### Post date: [May 10, 2020, 1:43pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/1 "2020-05-10T13:43:40Z")

</div>

How can we generate following Octave codes in Julia with `GeometricalPredicates` package

```julia
xv = [ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, ...
        1.94545, 2.16477, 1.87639, 1.18218, 0.27615, ...
        0.05840 ];
 yv = [ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, ...
        0.18161, 0.78850, 1.13589, 1.33781, 1.04650, ...
        0.60628 ];
 xa = [0:0.1:2.3];
 ya = [0:0.1:1.4];
 [x,y] = meshgrid (xa, ya);
 [inn,on] = inpolygon (x, y, xv, yv);
 inside = inn & ! on;

```

What is the correct usage of inpolygon function of `GeometricalPredicates` package in this case?

---

<div class="post-metadata">

### Author: ![yha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yha/32/3502_2.png) [@yha](https://discourse.julialang.org/u/yha)
#### Post date: [May 10, 2020, 2:14pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/2 "2020-05-10T14:14:26Z")

</div>

`GeometricalPredicates` is not very convenient to use, since it requires all input coordinates to be in the range `[1,2]`. Also, it seems to only support `inpolygon` for convex polygons.  
If you don’t need the very high precision near the edges that `GeometricalPredicates` seems to be trying to achieve, I recommend using `Luxor` instead:

```julia
using Luxor

xv = [ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, 
        1.94545, 2.16477, 1.87639, 1.18218, 0.27615, 
        0.05840 ]
yv = [ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, 
        0.18161, 0.78850, 1.13589, 1.33781, 1.04650, 
        0.60628 ]

xa = 0:0.1:2.3
ya = 0:0.1:1.4

polygon = Point.(xv,yv)
points = vec(Point.(xa',ya))

inside = [isinside(p, polygon; allowonedge=true) for p in points]

using Plots
plot(Tuple.(polygon), legend=false)
scatter!(Tuple.(points), marker_z=inside)

```

![tmp](https://global.discourse-cdn.com/julialang/original/3X/b/6/b643620a41d4b4594c7444071190c7a049954cd9.png)

---

<div class="post-metadata">

### Author: ![O\_Julia](https://avatars.discourse-cdn.com/v4/letter/o/3ab097/32.png) [@O\_Julia](https://discourse.julialang.org/u/O_Julia)
#### Post date: [May 10, 2020, 3:12pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/3 "2020-05-10T15:12:35Z")

</div>

This is very good. Thank you.

---

<div class="post-metadata">

### Author: ![sjkelly](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sjkelly/32/9280_2.png) [@sjkelly](https://discourse.julialang.org/u/sjkelly)
#### Post date: [May 11, 2020, 2:46am UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/4 "2020-05-11T02:46:51Z")

</div>

If you want something more lightweight and flexible you can try [PolygonOps](https://github.com/JuliaGeometry/PolygonOps.jl), [inpolygon](https://juliageometry.github.io/PolygonOps.jl/stable/#PolygonOps.inpolygon) function.

```julia
using PolygonOps
using StaticArrays

xv = [ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, 
        1.94545, 2.16477, 1.87639, 1.18218, 0.27615, 
        0.05840 ]
yv = [ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, 
        0.18161, 0.78850, 1.13589, 1.33781, 1.04650, 
        0.60628 ]

xa = 0:0.1:2.3
ya = 0:0.1:1.4

polygon = SVector.(xv,yv)
points = vec(SVector.(xa',ya))

inside = [inpolygon(p, polygon; in=true, on=false, out=false) for p in points]

using Plots
plot(Tuple.(polygon), legend=false)
scatter!(Tuple.(points), marker_z=inside)

```

---

<div class="post-metadata">

### Author: ![O\_Julia](https://avatars.discourse-cdn.com/v4/letter/o/3ab097/32.png) [@O\_Julia](https://discourse.julialang.org/u/O_Julia)
#### Post date: [May 12, 2020, 10:57am UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/5 "2020-05-12T10:57:05Z")

</div>

Thank you. This is good.

---

<div class="post-metadata">

### Author: ![O\_Julia](https://avatars.discourse-cdn.com/v4/letter/o/3ab097/32.png) [@O\_Julia](https://discourse.julialang.org/u/O_Julia)
#### Post date: [May 22, 2020, 1:01pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/6 "2020-05-22T13:01:30Z")

</div>

After some experiments, I have found that `PolygonOps` is better suited for me. Thanks again.

---

<div class="post-metadata">

### Author: ![gszep](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gszep/32/14836_2.png) [@gszep](https://discourse.julialang.org/u/gszep)
#### Post date: [December 22, 2020, 2:49pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/7 "2020-12-22T14:49:05Z")

</div>

@sjkelly’s example should be in the docs 🙂  
[https://juliageometry.github.io/PolygonOps.jl/stable/](https://juliageometry.github.io/PolygonOps.jl/stable/)

---

<div class="post-metadata">

### Author: ![sjkelly](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sjkelly/32/9280_2.png) [@sjkelly](https://discourse.julialang.org/u/sjkelly)
#### Post date: [December 24, 2020, 6:15pm UTC](https://discourse.julialang.org/t/inpolygon-usage/39226/8 "2020-12-24T18:15:59Z")

</div>

Good idea! Added 🙂
