Considere la intersección de dos esferas. Para visualizarlo, considere el segmento de línea 3D N que conecta los dos centros de las esferas. Considere esta sección transversal
alt text http://gara.matt.googlepages.com/circles.PNG
donde la línea roja es la sección transversal del plano con normal N. Por simetría, puede girar esta sección transversal desde cualquier ángulo, y la longitud de los segmentos de línea roja puede Sin cambio. Esto significa que la curva resultante de la intersección de dos esferas es un círculo, y debe estar en un plano con N. normal
Dicho esto, vamos a encontrar la intersección. Primero, queremos describir el círculo resultante de la intersección de dos esferas. Usted no puede hacer esto con 1 ecuación, un círculo en 3D es esencialmente una curva en 3D y no puede describir las curvas en 3D en 1 eq.
considerar el cuadro alt text http://gara.matt.googlepages.com/circlesa.PNG
Sea P el punto de intersección de la línea azul y rojo. Deje h ser la longitud del segmento de línea a lo largo de la línea roja desde el punto P hacia arriba. Deje que la distancia entre los dos centros sea denotada por d. Sea x la distancia desde el centro del círculo pequeño a P. Entonces tenemos que tener
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)
es decir, se puede resolver para h, que es el radio del círculo de intersección. Puedes encontrar el punto central C del círculo desde x, a lo largo de la línea N que une los 2 centros del círculo.
Entonces se puede describir completamente el círculo como (X, C, U, V son todos vector)
X = C + (h * cos t) U + (h * sin t) V for t in [0,2*PI)
donde U y V son vectores perpendiculares que se encuentran en un plano con normal N.
La última parte es la más fácil. Solo resta encontrar la intersección de este círculo con la esfera final. Esto es simplemente un complemento y chug de las ecuaciones (inserte para x, y, z en la última ecuación las formas paramétricas de x, y, z para el círculo en términos de t y resuelva para t)
editar ---
La ecuación que obtendrá es bastante fea, tendrá un montón de seno y coseno igual a algo. Para solucionar esto se puede hacer de 2 maneras:
escribir las ay seno del coseno en términos de exponenciales utilizando la igualdad
e^(es) = cos t + i sen t
entonces agrupe todos los términos e^(it) y obtendrá una ecuación cuadrática de e^(it) que puede resolver utilizando la fórmula cuadrática, luego resuelva para t. Esto te dará la solución exacta.Este método realmente le dirá exactamente si existe una solución, existen dos o existe uno dependiendo de cuántos de los puntos del método cuadrático son reales.
use el método de newton para resolver t, este método no es exacto pero es mucho más fácil de entender desde el punto de vista computacional, y funcionará muy bien para este caso.
¿Puedes confirmar que te refieres a superficies esféricas en lugar de sólidos, y agregar algo para que sea algo más que una pregunta matemática y de alguna manera esté relacionado con la programación? –
Bueno, quiero un algoritmo de C++ para hacer esto, pero primero tengo que entender las matemáticas detrás de él. En cuanto a la otra parte de su pregunta, sí, solo la superficie de la esfera. – Adam
solo google para 'trilateration': http://en.wikipedia.org/wiki/Trilateration – thalm