I'd like to pose a challenge to the Dynamo community:
Using only native dynamo nodes, create an "isovist" function that accepts the following inputs:
- a Point representing the viewpoint
- a list of 2d curves representing any possible obstructions
- a number N representing the number of sample points
- a number R representing the maximum vision radius
and returns a polycurve by points representing the visible polygon from the viewpoint:
The resulting polygon should terminate at the circle of the maximum radius if it doesn't hit any obstructions before that:
I have solved this for myself, but I am eager to see how others might approach it more cleanly / elegantly. My approach
required quite a bit of list@level trickery + lacing etc. I'm happy to share my script once we have a diversity of solutions I'd like to privilege node-based solutions over designscript-based ones - but if someone has a particularly beautiful way of accomplishing this with DS that would be great to see as well.
My ulterior motive here is that I will be teaching a course on dynamo list management at AU UK - I'd like to use this particular problem as a case study in the kinds of list management issues that arise in the course of building more sophisticated scripts. Anyone whose solution I use in my lab will of course get a shout out!
So - gauntlet thrown show me your stuff Dynamaniacs!