4
$\begingroup$

I have this interesting, seemingly difficult problem I came across while think about rendering. It seems simple enough that I suspect it might have a name already (and hopefully be solved), but I can't find anything. So I'll state the problem here, maybe it sounds familiar.

Consider some finite closed curve in 2D (for simplicity). Take some random point inside (strictly) the curve. Draw lines radially outward from the point onto the curve. This process creates some map $R(\theta)$. It's obvious that this won't always be a function, sometimes a $\theta$ corresponds to multiple $R$, i.e. the line intersects the curve twice. Is there a way to, given a curve in some form, figure out if $R(\theta)$ can be a function? So figure out if there exists a point somewhere such that no line intersects the curve twice? And better then proving existence, can such a point be found reliable through some algorithm? Better yet, for curves where multiple points are necessary, can that be solved too and can some points be found?

This whole thing reminds me of the illumination problem. It's like a reflectionless illumination problem, except I need to know specifically where the point(s) need(s) to be for an arbitrary curve.

The reason I'm interested in this btw is that it might be useful to encode surfaces by mapping distance functions like this, which can then be compressed with spherical harmonics. To be able to do an arbitrary surface I need to solve this problem pretty much.

Update: Turns out this is called the 'art gallery problem' (if you replace the curves by a polygon). It's a very hard CS problem, nothing close to a solution exists, just an upper bound on the number of points necessary. Any ideas and resources on approximately solving these questions (so using more points than necessary) are appreciated!

$\endgroup$
1
  • $\begingroup$ You need the curve to bound a star-shaped region (with respect to some point). I actually don’t know a useful criterion. $\endgroup$ Commented Aug 16, 2022 at 18:11

0

You must log in to answer this question.