Grasshopper

algorithmic modeling for Rhino

Hello, 

I am having some trouble removing points from inside a large number of circles. I want to remove the points that appear inside of each circle depending on how big the circles each get. 

I have tried, Cull, Containment and using area of the circles as a driver for the point selection. 

Any thoughts? There are quite a number of points and circles. 

Views: 1313

Replies to This Discussion

Hi.

Why don't you use "point in Curves" component.(under the Curve-Analysis tab)

Thanks of the suggestion - I tried something like that - I am going to try again.

One problem is that the definition sort of freezes when I plug in the points and the curves. 

It's analyzing 200k about and about 300 circles. I was wondering if that is having some effect. 

It'll have to check all points with all circles (unless it finds an early circle). Yes I'd expect it to take a while with those sort of numbers. Doing it fast will require custom code. Maybe involving spatial trees to speed up searches...

The attached file has a C# algorithm which samples the inside/outside relationship using a bitmap for fast lookup. Benefit of this approach is that it fairly easily extends to shapes other than circles. Downside is that it only uses pixel accuracy for the sampling. An improvement would be to draw the shape outlines in a third colour, and switch to expensive inside/outside testing when points end up on these edges.

Sampling 100k points takes about 700ms using this approach. The algorithm also has O(N+M) complexity instead of O(N*M)   (where N is the number of circles, M is the number of points), so it scales better to larger data sets.

Attachments:

Nice!

Does GH_MemoryBitmap utilize the LockBits method ?

Yes, but it does much more. It's not as fast as it possibly could be, as I copy the image bytes into a managed array. It's this array that gets read from and written to. If you apply any effects or set any values, you have to call Release(True) when you're done. That copies the data back into the image and unlocks it. If you didn't make any changes, then you must call Release(False) to just unlock the image.

I use GH_MemoryBitmap mostly for applying some effects to small images (making disabled versions of component icons for example) and also in the Image Sampler component.

Let me know if you need any other curves besides circles, I can probably add that quickly enough.

RSS

About

Translate

Search

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service