Checking if a point is inside a polygon is RIDICULOUSLY simple (Ray casting algorithm) - Inside code

  Рет қаралды 31,125

Inside code

Inside code

Күн бұрын

Пікірлер: 53
@insidecode
@insidecode Жыл бұрын
Discover the new graph theory algorithms course: inscod.com/graphalgo 🔴 / \ 🔵-🔴 | | 🔴-🔵
@vid2422
@vid2422 Жыл бұрын
That even/odd technic blew my mind, I never expected the method to be simple yet genius at the same time
@insidecode
@insidecode Жыл бұрын
Me neither
@BlackSharkfr
@BlackSharkfr Жыл бұрын
Simple and fast algorithm, but it has one small edge case (literally). This code behaves inconsistently when the point is located on one of the polygon's edges : some edges will count as inside, and others will count as outside. To fix this : check whether the point is on any of the edges before actually running this algorithm.
@kleare520
@kleare520 2 ай бұрын
I'd say a proper and rigorous implementation that works for ANY points and polygon is RIDICULOUSLY difficult for what it acheives. I'm not talking about the edge cases "what if you select a point on the edge", I'm talking about the (very annoying edge case) where the raycast intersect with a vertex of the polygon. In that case, you have no choice but to pick another random direction, and then the math become way more difficult and messy. Also you need to run tons of test to avoid division by 0. Thankfully there are some workarround. If you can ensure that your polygone coordinates are integers, then just offset the y raycast coordinate by 0.5.
@Kobold666
@Kobold666 11 күн бұрын
Using offsets and epsilons introduces a whole bunch of new problems that have to be fixed with more offsets and epsilons. Division by 0 is not an error and the result (infinity) is quite useful in comparisons.
@iWillRun_K
@iWillRun_K 3 ай бұрын
I was thinking to check where point lines relative to each vector representing polygon side, it is also O(n) (in worst case) time and it works faster than above algorithm since it don't have to iterate through each side of polygon,
@JamesSarantidis
@JamesSarantidis 4 ай бұрын
Awesome. I watch searching for an explanation on ray casting and yours was perfect. Now, I have a different problem to solve. I want to generate the shape of a city starting from a rectangle and want to morph semi-randomly in a way that it contains some Point of Interest (POI) while it excludes Points of Avoidance (POA). Any Idea as to how to do this smartly; without checking each time if every single deformation left some POI out or let some POA in?
@miguelchenier4817
@miguelchenier4817 Жыл бұрын
Thank you. This worked so well. I've been beating myself up trying to think of a solution.
@hhkl3bhhksm466
@hhkl3bhhksm466 11 ай бұрын
Hey, this is kinda weird, but I was doing a programming challenge and you needed to know where a certain point needed to be in a list of coordinates for a polygon. This video helped a lot, and the solution worked like a charm. Keep up the good work
@WeloveKoora
@WeloveKoora 11 ай бұрын
adventofcode 2023 Day 10 pipe maze ?
@hhkl3bhhksm466
@hhkl3bhhksm466 11 ай бұрын
@@WeloveKoora Yeah, haha, did you also use the same method?
@WeloveKoora
@WeloveKoora 11 ай бұрын
@@hhkl3bhhksm466 Yes, after 24 hours of searching hhhhh
@WeloveKoora
@WeloveKoora 11 ай бұрын
@@hhkl3bhhksm466 it was very challenging problem, but i learned a lot
@jumpsneak
@jumpsneak Ай бұрын
No sound???
@CrescentP-wi7ps
@CrescentP-wi7ps 8 ай бұрын
4:55 You didn't handle divide by zero case.
@manolski7615
@manolski7615 Жыл бұрын
what if y2 - y1 = 0 for the 2nd cond? Do we just ignore that count?
@fnxph03n1x
@fnxph03n1x Жыл бұрын
If y2 == y1, it means that you have a horizontal line, then you can check if your point is on this line too or not. if y2 == y1, check if yp == y1 (or == y2, both are equal), if yes, your point is on the same direction as the line y1 == y2, and then you can check the x-condition. If x-condition is also satisfied, it means that your point is on the edge itself. It's up to you if you want the points on the edge to be included in or not. If you wanted it included, increment the counter
@gdclemo
@gdclemo 10 ай бұрын
@@fnxph03n1x if y2 == y1 then the first condition ( (yp < y1) != (yp < y2) ) will never be True, so the second condition will not be evaluated.
@surenbono6063
@surenbono6063 Жыл бұрын
...do you have link to the world timezones vertex defined database?..for automatic local GPS clock decoder
@yusufbulbul7100
@yusufbulbul7100 Ай бұрын
great explanation. thank you.
@RandomGeometryDashStuff
@RandomGeometryDashStuff Жыл бұрын
what if ray passes through polygon corner?
@insidecode
@insidecode Жыл бұрын
I think that it will count once
@janasimjanovska855
@janasimjanovska855 Жыл бұрын
@@insidecode what if the point is outside of a concave quadrilateral, we cast a line along the x - axis, and the line passes through a vertex?
@samsaraAI2025
@samsaraAI2025 9 ай бұрын
Nice video thanks. Could you upload the same video for 3D non convex o bjects? :)
@antonioradu2842
@antonioradu2842 Жыл бұрын
just got a homework where I need to check if a point is inside a polygon, thx :D
@aakashs1806
@aakashs1806 6 ай бұрын
Does this work for bodies in 3D space?
@trungkstn
@trungkstn 4 ай бұрын
How about case y1 = y2
@juststudying1019
@juststudying1019 Жыл бұрын
Thanks, but why to check the intersection of the point with each edge? isn't it enough to check for one direction and the equilivant edges?
@insidecode
@insidecode Жыл бұрын
But how to know the edges of that directon?
@juststudying1019
@juststudying1019 Жыл бұрын
Yes that's right, but in this case will we count the point intersection twice and it will be even, for example a point in a square if we count it with the four edges it will be 4, is that right? so it is outside but if we only calculate the intersection with left edge for example it will be odd then it is inside @@insidecode
@insidecode
@insidecode Жыл бұрын
Why would we count the intersection twice?
@juststudying1019
@juststudying1019 Жыл бұрын
@@insidecode I mean ehen we loop through each edge of the shape when the point is inside it will be counter 4 times if the shape is square
@insidecode
@insidecode Жыл бұрын
No we increment the counter only when there's an intersection
@JehanSaren
@JehanSaren Жыл бұрын
Hi sir, I made a net simulation, how do I know that the particles are inside the net?
@xLainik
@xLainik 11 ай бұрын
Check out "Determining if a point lies on the interior of a polygon" by University of Michigan. It's on google
@matshagerlind
@matshagerlind 7 ай бұрын
Thank you very much, great video! :)
@toohadi
@toohadi Жыл бұрын
Great video, thanks!
@Phosdoq
@Phosdoq 8 ай бұрын
some shapes must be treated with their own condition: like circles, rectangles, triangles...
@colefrankenhoff1428
@colefrankenhoff1428 4 ай бұрын
Nope, they don't
@Phosdoq
@Phosdoq 4 ай бұрын
@@colefrankenhoff1428 they don't if you are bad programmer. you will gain instant 120% performance if you do so :)
@Prakash-cw2ml
@Prakash-cw2ml Жыл бұрын
It very useful🎉
@senthil6382
@senthil6382 Жыл бұрын
is it possible to generate all the points inside the polygon, if the polygon is represented by vertices
@insidecode
@insidecode Жыл бұрын
There is an infinity of points inside a polygon
@pauliusviskaitis9640
@pauliusviskaitis9640 Жыл бұрын
Thanks!
@andreasbritzemeier6901
@andreasbritzemeier6901 Жыл бұрын
Does anyone know if there is an easy extension to 3D ?
@ОрландоОрсо
@ОрландоОрсо Жыл бұрын
Project you shape to 2D plane and then try this method.
@cosmoquissoyt5636
@cosmoquissoyt5636 Жыл бұрын
Alto capo me sirvió
@SetszawA
@SetszawA 11 ай бұрын
Bad solution if point is in the direction of two or more edges, it will give inconsistent results.
@igorfujs7349
@igorfujs7349 9 ай бұрын
So true.
@解夢人
@解夢人 10 ай бұрын
Why always think in terms of the plane? How about presenting an algorithm example for three-dimensional space?
@_danisson
@_danisson 6 ай бұрын
what question is that ? a lot of things works in terms of the plane. If you have a three dimensional space maybe you can use another algorithm
How to find fixed-radius neighbors of a point? - Inside code
6:59
Inside code
Рет қаралды 3,2 М.
Super Fast Ray Casting in Tiled Worlds using DDA
30:03
javidx9
Рет қаралды 188 М.
How To Choose Mac N Cheese Date Night.. 🧀
00:58
Jojo Sim
Рет қаралды 89 МЛН
When u fight over the armrest
00:41
Adam W
Рет қаралды 31 МЛН
Disrespect or Respect 💔❤️
00:27
Thiago Productions
Рет қаралды 43 МЛН
ТВОИ РОДИТЕЛИ И ЧЕЛОВЕК ПАУК 😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 6 МЛН
The hidden beauty of the A* algorithm
19:22
Polylog
Рет қаралды 898 М.
How to find the closest pair of points in O(nlogn)? - Inside code
12:22
This is how Paint's bucket fill works (Flood fill algorithm)
8:54
Coding Challenge 145: 2D Raycasting
36:02
The Coding Train
Рет қаралды 644 М.
When Your Game Is Bad But Your Optimisation Is Genius
8:52
Vercidium
Рет қаралды 1,5 МЛН
Check if a point is inside a polygon | JavaScript code
3:49
Edgar Programmator
Рет қаралды 20 М.
How Ray Tracing (Modern CGI) Works And How To Do It 600x Faster
32:06
Josh's Channel
Рет қаралды 581 М.
5 Math Skills Every Programmer Needs
9:08
Sahil & Sarra
Рет қаралды 1,1 МЛН
How To Choose Mac N Cheese Date Night.. 🧀
00:58
Jojo Sim
Рет қаралды 89 МЛН