tags:

views:

1272

answers:

4

I'm looking for an algorithm to find the common intersection points between 3 spheres.

Baring a complete algorithm, a thorough/detailed description of the math would be greatly helpful.

This is the only helpful resource I have found so far: http://mathforum.org/library/drmath/view/63138.html

But neither method described there is detailed enough for me to write an algorithm on.

I would prefer the purely algebraic method described in the second post, but what ever works.

+4  A: 

Basically you need to do this in 3 steps. Let's say you've got three spheres, S1, S2, and S3.

  1. C12 is the circle created by the intersection of S1 and S2.
  2. C23 is the circle created by the intersection of S2 and S3.
  3. P1, P2, are the intersection points of C12 and C13.

The only really hard part in here is the sphere intersection, and thankfully Mathworld has that solved pretty well. In fact, Mathworld also has the solution to the circle intersections.

From this information you should be able to create an algorithm.

ReaperUnreal
Thanks for the reply, I'm looking into this now...
Adam
unluckily, the circle intersection discussed in mathworld is in a 2d plane...
fortran
+4  A: 
Eric Bainville
3 planes need not have a a common line. 2 planes that intersect result in either a plane or a line. 3 planes that intersect result in either a plane, a line or a point.
ldog
In this case, since the equations of the planes are not independent, the intersection is either a plane, or a line (possibly at infinity when the three centers are collinear).In the general case, the intersection will be a line.
Eric Bainville
+3  A: 

Consider the intersection of two spheres. To visualize it, consider the 3D line segment N connecting the two centers of the spheres. Consider this cross section

alt text

where the red-line is the cross section of the plane with normal N. By symmetry, you can rotate this cross-section from any angle, and the red line segments length can not change. This means that the resulting curve of the intersection of two spheres is a circle, and must lie in a plane with normal N.

That being said, lets get onto finding the intersection. First, we want to describe the resulting circle of the intersection of two spheres. You can not do this with 1 equation, a circle in 3D is essentially a curve in 3D and you cannot describe curves in 3D by 1 eq.

Consider the picture alt text

let P be the point of intersection of the blue and red line. Let h be the length of the line segment along the red line from point P upwards. Let the distance between the two centers be denoted by d. Let x be the distance from the small circle center to P. Then we must have

x^2 +h^2 = r1^2
(d-x)^2 +h^2 = r2^2
==> h = sqrt(r1^2 - 1/d^2*(r1^2-r2^2+d^2)^2)

i.e. you can solve for h, which is the radius of the circle of intersection. You can find the center point C of the circle from x, along the line N that joins the 2 circle centers.

Then you can fully describe the circle as (X,C,U,V are all vector)

X = C + (h * cos t) U + (h * sin t) V for t in [0,2*PI)

where U and V are perpendicular vectors that lie in a plane with normal N.

The last part is the easiest. It remains only to find the intersection of this circle with the final sphere. This is simply a plug and chug of the equations (plug in for x,y,z in the last equation the parametric forms of x,y,z for the circle in terms of t and solve for t.)

edit ---

The equation that you will get is actually quite ugly, you will have a whole bunch of sine's and cosine's equal to something. To solve this you can do it 2 ways:

  1. write the cosine's and sine's in terms of exponentials using the equality

    e^(it) = cos t + i sin t

    then group all the e^(it) terms and you should get a quadratic equations of e^(it)'s that you can solve for using the quadratic formula, then solve for t. This will give you the exact solution. This method will actually tell you exactly if a solution exists, two exist or one exist depending on how many of the points from the quadratic method are real.

  2. use newton's method to solve for t, this method is not exact but its computationally much easier to understand, and it will work very well for this case.

ldog
The sphere-plane intersection, when it exists, *is* a circle, always.
Eric Bainville
edited: The sphere-plane intersection, when it exists, is a circle, always[citation needed]
Trevor Harrison
Well... You can cite me :-)
Eric Bainville
Hmm are you sure? I remember in univ, I assumed this my prof marked it wrong... maybe I'm rememebring wrong let me consider it more thoroughly
ldog
To see this easily (this is not a demonstration). Consider a sphere and a plane intersecting it. Get the perpendicular to the plane by the center of the sphere, and rotate everything around this line. Nothing changes, so the intersection must be invariant by rotation in the plane.
Eric Bainville
Yep, thats right let me fix that
ldog
Only true if you define a point as a circle, though, which may upset professors ;)
chrispy
Your links are broken. You appear to have changed them to *.PNG at some point.
chrispy
The host I had them up on (google pages) must of cancelled my hosting.
ldog
+1  A: 

Here is another interpretation of the picture which Eric posted above:

Let H be the plane spanned by the centers of the three spheres. Let C1,C2,C3 be the intersections of the spheres with H, then C1,C2,C3 are circles. Let Lij be the line connecting the two intersection points of Ci and Cj, then the three lines L12,L23,L13 intersect at one point P. Let M be the line orthogonal to H through P, then your two points of intersection lie on the line M; hence you just need to intersect M with either of the spheres.

David Lehavi