MathGroup Archive 2003

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

Search the Archive

Re: Circle Fit

  • To: mathgroup at smc.vnet.net
  • Subject: [mg38618] Re: Circle Fit
  • From: atelesforos at hotmail.com (Orestis Vantzos)
  • Date: Wed, 1 Jan 2003 03:39:42 -0500 (EST)
  • References: <aueij4$522$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

"Dieter Palme" <dieter_palme at t-online.de> wrote in message news:<aueij4$522$1 at smc.vnet.net>...
> Hi experts,
> I have a set of points (xi, yi), i>30. I search for a solution to fit a
> circle (x-x0)^2 + (y-y0)^2 = r^2 to these points. I need r and sigma_r.
> It could be helpful to get x0,y0 also, but it is not nessecary.
> I found a algorythm for another system (LeastSquareFit) but not for 
> Mathematica 4.
> Who can help?
> Thanks in advance
> Dieter

Let's say that sample is the list with your points in the form:
sample={{x1,y1},...}
Also:
n=Length[sample]
norm[v_]:=(v.v)^1/2

You can find a decent approximation of {x0,y0} by using:
center=(Plus@@@Transpose[sample])/n

Now you can get a decent approximation of the radius by using:
radius=Plus@@(norm[center-#]&/@sample)/n

Let's estimate the total error for an arbitrary c(center) and
r(radius):
error[c_,r_][sample_]:=Plus@@((norm[c-#]^2-r^2)^2&/@sample)

You can check our approximation by evaluating
error[center,radius][sample]
It is not that good, right?

OK, to get a better approximation we can try to minimize the total
error numerically, using center and radius as initial values:
FindMinimum[error[{x0,y0},r][sample],{x0,center[[1]]},{y0,center[[2]]},{r,radius}]

This returns a list of the form:
{min_,{x0->_,y0->_,r->_}}

To begin with, min/n is (roughly) sigma_r. I can't recall the exact
definition right now...
Anyway, the {x0,y0} and r returned are much better fitted to your
data.

Visualize it:
Show[Graphics[{Circle[{0, 2}, 1], {Hue[0], Circle[center, radius]},
{Hue[.7],
          Circle[{x0, y0}, r] /. sol}, Point /@ sample}], 
    AspectRatio -> Automatic];

Hope that helped,
Orestis


  • Prev by Date: Re: scaling/translating Polyhedra - is this how??
  • Next by Date: Re: scaling/translating Polyhedra - is this how??
  • Previous by thread: Re: easy(?) question on manipulating expressions
  • Next by thread: Re: Circle Fit