MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Smalest enclosing circle


Finally!

NMinimize does a better job than FindMinimum, and constraints are not needed:

Needs["Statistics`"]
Needs["Graphics`"]
Needs["DiscreteMath`ComputationalGeometry`"]

data=RandomArray[NormalDistribution[0,1],{3,2}];
hull=data[[ConvexHull@data]];
sq=#.#&;
sqDiff=sq[{x,y}-#]&;
radius[x_?NumericQ,y_?NumericQ]=Sqrt@Max[sqDiff/@hull];
{r,ptRule}=NMinimize[radius[x,y],{x,y}];
pt={x,y}/.ptRule;
Show[Graphics[{PointSize[0.02],Point/@
         data,Red,Point@pt,Circle[pt, \
r],Blue,Line@Join[hull,{First@hull}],Point/@hull}],AspectRatio\[Rule]
       Automatic];

Bobby

On Sat, 14 Aug 2004 01:50:42 -0400 (EDT), Kezhao Zhang <kzhang at flashmail.com> wrote:

> Steve Gray <stevebg at adelphia.net> wrote in message news:<cfi8tm$4p6$1 at smc.vnet.net>...
>> Given n points in the  plane, I want to find the smallest
>> enclosing circle. Does anyone have Mathematica code to do this?
>> 	I will be grateful for any tips.
>>
>> Steve Gray
>
> Here is one way to do it:
> Suppose the equation for the circle is (x-x0)^2+(y-y0)^2==r^2. We want
> to minimize r.
>
> Generate some points:
> In[]:=points=Partition[Table[Random[NormalDistribution[0,1]],{200}],2];
>
> Constraints that all points are enclosed by the circle:
> In[]:= const=(#[[1]]-x0)^2+(#[[2]]-y0)^2<= r^2&/@points;
>
> Numerical minimization with constraints:
> In[]:=NMinimize[ Join[{r, r>0},const], {x0,y0, {r,5,10}}]
>
> Please note that it's better to provide some starting values for r
> otherwise NMinimize will complains that a starting value that doesn't satisfy
> the constraint is used.
>
> K. Z.
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: How does a notebook get its own filename or directory?
  • Next by Date: Re: Can this integration be done?
  • Previous by thread: Re: Smalest enclosing circle
  • Next by thread: Re: Smalest enclosing circle