       Re: [mg 1129] Find the center!

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1170] Re: [mg1120] [mg 1129] Find the center!
• From: Allan Hayes <hay at haystack.demon.co.uk>
• Date: Sat, 20 May 1995 03:33:27 -0400

```Gottfried Mayer-Kress <gmk at pegasos.ccsr.uiuc.edu> wrote in
[mg1120] Find the center!

> There are a bunch of points in 3-space and they are supposed to be
> scattered around the surface of a sphere. You want to find the
> center of the sphere and the radius.

Jorma Virtamo ([mg 1129]) gave a function for doing this.

In:=
(*Virtamo*)
center[pts_] := Module[ {R,r=Plus@@pts/Length[pts]},
{ R =  Inverse[ Plus@@(Outer[Times,#-r,#-r]& /@ pts) ].
Plus@@(#.#(#-r)& /@ pts)/2,
Sqrt[Plus@@((#-R).(#-R)& /@ pts)/Length[pts]] } ]

We can use Fit and the standard equation for a circle to get a
different function.

In:=
Block[{data, f,g,h,c},
data = {Sequence@@#,#.#}&/@pts;
{c,f,g,h} = List@@Fit[data, {1,x,y,z}, {x,y,z}]/{1,2x,2y,2z};
{{f,g,h}, Sqrt[f^2+g^2+h^2 +c]}
]

This is faster than Virtamo's function on the test that he uses

TEST

First generate some points, roughly on a sphers center {1,2,3}, radius 1.

In:=
rndnrm[x_] := (.98+.04Random[])x/Sqrt[x.x]

In:=
points = ({1,2,3}+#)& /@ rndnrm /@ Table[Random[]-.5,{10},{3}];

Now try to find the center and radius

In:=

Out=
{{0.995855, 1.98329, 3.00476}, 1.00521}
Out=
0.55 Second

In:=
center[points]
Do[center[points],{10}]//Timing//First
Out=
{{0.995855, 1.98329, 3.00476}, 1.00521}
Out=
1.46667 Second

Allan Hayes
hay at haystack.demon.co.uk

```

• Prev by Date: Re: Sort[] accuracy problem, etc.
• Next by Date: Kernel Shutting Down - Help
• Previous by thread: Re: Sort[] accuracy problem, etc.
• Next by thread: Kernel Shutting Down - Help