Re: determining boundary of a region in n-dimensional euclidean space

• To: mathgroup at smc.vnet.net
• Subject: [mg117203] Re: determining boundary of a region in n-dimensional euclidean space
• From: Nabeel Butt <nabeel.butt at gmail.com>
• Date: Fri, 11 Mar 2011 04:34:34 -0500 (EST)

```Dear Daniel
Most of the time practically my region in d-dimensions is convex
but I really dont need to be very accurate so the inside-outside would work
reasonably fine.
Thanks for all your suggestions.Very useful tips- Ill consider them
all !
best regards,
Nabeel

On Thu, Mar 10, 2011 at 7:53 PM, Daniel Lichtblau <danl at wolfram.com> wrote:

> Nabeel Butt wrote:
>
>> Hi Daniel
>>      Thanks for your response.Actually the problem is two-fold here.The
>> first step is to actually extract the boundary points from a set of points
>> in a list.I have found that built-in ConvexHull function in mathematica
>> can
>> do for 2-dimensions this extraction process.There exists a program also
>> for
>> 3-dimensions written in mathworld.To my best of my knowledge it hasnt been
>> implemented in higher dimensions that well in mathematica(was just a
>> random
>> google search though !!) . Anyways after we get the list for boundary
>> points , like you said I can use Interpolation on list to represent it
>> numerically.What I am more interested in is actually extracting the
>> boundary
>> points from a set of points -Does there exist more robust convexhull like
>> functions for higher dimensions ? Or after having a list of points I can
>> send them to another software which helps me get the convex hull in high
>> dimensions.Possibly if I can call another software inside mathematica that
>> would be great.
>>       Thanks once again.
>>                                  Nabeel
>> [...]
>>
>
> Some follow-up in private email indicates that what is needed, primarily,
> is a reasonable approximation to an inside-outside predicate function.
>
> If given sufficiwently many points inside the region, that can be found
> with the code below. The idea is to form a NearestFunction from the point
> set, and declare an arbitrary point to be "inside" if it is within some
> given epsilon of its nearest point in that set.
>
> nf = Nearest[pts];
>
> inRegion[pt : {_Real, _Real, _Real}, eps_Real] :=
>  TrueQ[Norm[nf[pt, 1][[1]] - pt] < eps]
>
> Here is an example. We'll pick, nonuniformly, points inside the shpere of
> radius 1 centered at the origin.
>
> n = 200000;
>
>   Times, {RandomReal[1, n], RandomReal[{-1, 1}, {n, 3}]}];
> pts = Select[pts, Norm[#] <= 1 &];
>
> Now compute our inRegion predicate function.
>
> nf = Nearest[pts];
>
> inRegion[pt : {_Real, _Real, _Real}, eps_Real] :=
>  TrueQ[Norm[nf[pt, 1][[1]] - pt] < eps]
>
> To see what it gives, one can plot the region thus defined as below.
>
> reg = RegionPlot3D[
>  inRegion[{x, y, z}, .05], {x, -1, 1}, {y, -1, 1}, {z, -1, 1},
>  Mesh -> False]
>
> Offhand I am not sure how to go about this if not presented with a "large"
> set of inside points. If you know your region is convex (which I gather will
> often be the case for this query) then one way to go about filling it would
> be to take some number of points, equally spaced perhaps, on all segments
> connecting initial point pairs. Or could try to dope out how to get the
> convex hull of the initial points, and maybe use those for filling in
> purposes. I myself am not up to speed on how best to do this. I offer one
> possibility below.
>
> ComputationalGeometry`Methods`ConvexHull3D[
>  RandomReal[10, {20, 3}]] // InputForm
>
> I remark that this might (probably will) become obsolete in a future
> release. Also I suspect some others who follow this forum will know more
> functions.
>
> If you do succeed in getting a convex hull for the boundary, then yet
> another inside-outside approach would be to shoot a segment from query point
> northward, say, and count how many faces it hits before going to infinity.
> If zero or two then it is outside, if one then inside.
>
> To make this method fast, you might want to bin the faces so that a given
> point need not test all of them for intersection. I have not done this in
> 3d, but here is a link to some code that might be adapted from the 2d case.
>
> http://forums.wolfram.com/mathgroup/archive/2009/Feb/msg00519.html
>
> If you have any interest in seeing where that inRegion originated (at
> least, in my usage), here is a notebook with an algebraic surface
> reconstruction. It turns out that an exact reconstruction, more or less, was
> possible. But that is because there were derivable defining equations.
> barely so, I might add.
>
>
>
> Daniel Lichtblau
> Wolfram Research
>

--
"We have not succeeded in answering all our problems.The answers we have
found only serve to raise a whole set of new questions.In some ways we feel
that we are as confused as ever,but we believe we are confused on a higher
level and about more important things."
"Maybe one day we get to see all the beauty present in this world"

Nabeel Butt
UWO,London