14 votos

Coordenadas 3D del centro del círculo dadas tres puntos del círculo.

Dadas las tres coordenadas $(x_1, y_1, z_1)$ , $(x_2, y_2, z_2)$ , $(x_3, y_3, z_3)$ definiendo un círculo en el espacio 3D, cómo encontrar las coordenadas del centro del círculo $(x_0, y_0, z_0)$ ?

0 votos

@Comportamiento No creo que sea un duplicado exacto porque las respuestas a la pregunta anterior sólo funcionan en 2D.

5voto

fang Puntos 844

Hay muchos artículos en línea para el caso 2D. Una simple búsqueda en Google mostrará que este enlace ofrece una buena explicación sobre cómo se hace esto en 2D. También muestra cómo construir el centro del círculo geométricamente. Así, lo que hay que hacer es

1) Encuentra un plano a partir de los 3 puntos y crea un sistema de coordenadas 2D en ese plano.
2) Convertir los 3 puntos a ese sistema de coordenadas 2D.
3) Encuentra el centro del círculo utilizando el enlace anterior.
4) Convierta el centro del círculo (en 2D) de nuevo en 3D.

Edición 1: He añadido los pasos para crear un sistema de coordenadas local (CS) en un plano definido por 3 puntos

1) Calcular el vector unitario n1 a partir de P1 y P2. Utilízalo como eje x para el CS local.
2) Calcular el vector unitario n2 a partir de P1 y P3.
3) Utilice n1 x n2 (donde "x" significa el producto cruzado) como eje z del CS local.
4) Utilice (n1 x n2) x n1 como eje y del CS local.
5) Ahora, tienes un sistema de coordenadas local, espero que sepas cómo convertir P1, P2 y P3 a este CS local. Después de la conversión, las nuevas coordenadas para estos 3 puntos deberían tener todos sus valores z = 0,0. Entonces puedes utilizar sus valores (x, y) para encontrar el centro del círculo.

Si tienes los 3 puntos colineales, no puedes crear un CS local y tampoco puedes encontrar un círculo a partir de 3 puntos colineales.

0 votos

¿Puede demostrar cómo se pasa de un sistema 3D a un sistema 2D?

0 votos

He añadido más detalles a mi respuesta. Espero que sea de ayuda.

0 votos

Es un método interesante. Sigo prefiriendo mi propio método, que es exactamente el mismo pero sin el cambio de coordenadas.

5voto

Salix alba Puntos 111

Creo que utilizar una proyección en 2D podría ser la forma más fácil de calcular realmente. Si los puntos son $A, B, C$ entonces encuentra

$$\begin{align} \mathbf{u_1} & = B-A \\ \mathbf{w_1} &= (C-A) \times \mathbf{u_1} \\ \mathbf{u} & = \mathbf{u_1} / | \mathbf{u_1} | \\ \mathbf{w} & = \mathbf{w_1} / | \mathbf{w_1} | \\ \mathbf{v} & = \mathbf{w} \times \mathbf{u} \\ \end{align}$$

Esto da tres vectores unitarios ortogonales con $\mathbf{u}$ et $\mathbf{v}$ que abarca el plano.

Obtenga la coordenada 2D tomando los productos punto de $(B-A)$ et $(C-A)$ con $\mathbf{u}$ et $\mathbf{v}$ . Sea

$$\begin{align} b & = (b_x,0) = ( (B-A) \cdot \mathbf{u} , 0 ) \\ c &= (c_x,c_y) = ( (C-A) \cdot \mathbf{u}, (C-A)\cdot \mathbf{v} ) \\ \end{align}$$

Sabemos que el centro debe estar en la línea $x= b_x/2$ . Que este punto sea $(b_x/2,h)$ . La distancia a c debe ser la misma que la distancia al origen $$(c_x-b_x/2)^2 + (c_y - h)^2 = (b_x/2)^2 + h^2$$ Así que $$h = \frac{(c_x-b_x/2)^2 + c_y^2 - (b_x/2)^2}{ 2 c_y } $$

El centro real se puede recuperar entonces tomando $A + (b_x/2)\mathbf{u} + h \mathbf{v}$ .

Este es un buen cálculo explícito.

5voto

Sergio G. Puntos 11

Creo que esta es una de las soluciones más sencillas:

Dados tres puntos de una circunferencia:
$p1~(p1_x, p1_y, p1_z)^T$
$p2~(p2_x, p2_y, p2_z)^T$
$p3~(p3_x, p3_y, p3_z)^T$

Calcula el centro del círculo:
$p0~(p0_x, p0_y, p0_z)^T$


  1. Estimación de vectores $v1$ et $v2$ :

$v1 = p2-p1 = (v1_x, v1_y, v1_z)^T $
$v2 = p3-p1 = (v2_x, v2_y, v2_z)^T $

  1. Estimar productos de puntos:

$v11 = v1^T·v1$
$v22 = v2^T·v2$
$v12 = v1^T·v2$

  1. Estimar los escalares $k_1$ et $k_2$ :

$k_1 = b·v22·(v11 - v12)$

$k_2 = b·v11·(v22 - v12)$

$b = \frac{1}{2·(v11·v22-v12^2)}$

  1. Estimar el centro del círculo p0:

$p0 = p1 + k_1·v1 + k_2·v2$

\==>

$p0_x = p1_x + k_1·v1_x + k_2·v2_x$
$p0_y = p1_y + k_1·v1_y + k_2·v2_y$
$p0_z = p1_z + k_1·v1_z + k_2·v2_z$

Derivación completa y código aquí: https://github.com/sergarrido/random/tree/master/circle3d

3voto

richard Puntos 1

De hecho, tenemos que resolver el siguiente sistema

$\cases{(x_0-x_1)^2+(y_0-y_1)^2+(z_0-z_1)^2=R^2\\ (x_0-x_2)^2+(y_0-y_2)^2+(z_0-z_2)^2=R^2\\ (x_0-x_3)^2+(y_0-y_3)^2+(z_0-z_3)^2=R^2\\ \left|\begin{array}{} x_0 & y_0 & z_0 & 1\\ x_1 & y_1 & z_1 & 1\\ x_2 & y_2 & z_2 & 1\\ x_3 & y_3 & z_3 & 1\\ \end{array}\right|=0}$

Pero espero que alguien escriba de forma más agradable.

Actualización. Parece lo siguiente.

Poner $r_i=(x_i,y_i,z_i)$ . Entonces el problema se transforma en lo siguiente

$$\|r_1\|^2-2(r_0,r_1)= \|r_2\|^2-2(r_0,r_2)= \|r_3\|^2-2(r_0,r_3).$$

Existen números reales $\mu_1, \mu_2, \mu_3$ tal que $\mu_1+\mu_2+\mu_3=1$ et $r_0=\mu_1 r_1+\mu_2 r_2+\mu_3 r_3.$ Podemos encontrar estos números a partir de un sistema de ecuaciones lineales:

$$\mu_1+\mu_2+\mu_3=1$$

$$(1-2\mu_1) (r_1,r_1)-2\mu_2 (r_2,r_1)-2\mu_3 (r_3,r_1)=$$ $$-2\mu_1 (r_1,r_2)+(1-2\mu_2)(r_2,r_2)-2\mu_3 (r_2,r_3)=$$ $$-2\mu_1 (r_1,r_3)-2\mu_2(r_2,r_3)+(1-2\mu_3) (r_3,r_3).$$

0 votos

El problema es que no conoces a R en este momento.

0 votos

@fang Este es el menor de los problemas, :-) porque podemos eliminar fácilmente $R$ y reducir las tres primeras ecuaciones a dos.

0 votos

Eso es cierto. Pero no está inmediatamente claro para los desarrolladores no expertos en matemáticas.:-)

2voto

Emilio Novati Puntos 15832

Otra forma posible.

La ecuación de una esfera en el espacio 3D puede escribirse como $$ x^2+y^2+z^2-2\alpha x -2\beta y -2\gamma z +d=0 $$ donde $(\alpha,\beta,\gamma)$ son las coordenadas del centro $O$ et $d=\alpha^2+\beta^2+\gamma^2-R^2$

Dados tres puntos $A=(x_A,y_A,z_A)$ , $B=(x_B,y_B,z_B)$ , $C=(x_C,y_C,z_C)$ sustituyendo en esta ecuación encontramos tres ecuaciones lineales en $\alpha$ , $\beta$ , $\gamma$ et $d$ que podemos escribir en la forma $$ x_A\alpha+y_A\beta+z_A\gamma=\dfrac{d-|A|^2}{2} $$ $$ x_B\alpha+y_B\beta+z_B\gamma=\dfrac{d-|B|^2}{2} $$ $$ x_C\alpha+y_C\beta+z_C\gamma=\dfrac{d-|C|^2}{2} $$ donde $|A|^2=x_A^2+y_A^2+z_A^2$ , $|B|^2=x_B^2+y_B^2+z_B^2$ et $|C|^2=x_C^2+y_C^2+z_C^2$ .

A partir de estas ecuaciones, podemos encontrar $\alpha$ , $\beta$ et $\gamma$ como funciones de $d$ y esto corresponde al hecho de que hay infinitas esferas que pasan por los puntos dados.

Ahora, el círculo que queremos es el círculo máximo de la esfera que tiene el centro en el plano que contienen los tres puntos y esto menas que los tres vectores $OA$ , $OB$ et $OC$ son linealmente dependientes, por lo que debemos tener

$$ \det \begin{bmatrix} \alpha-x_A &\beta-y_A &\gamma-z_A\\ \alpha-x_B &\beta-y_B &\gamma-z_B\\ \alpha-x_C &\beta-y_C &\gamma-z_C\\ \end{bmatrix}=0 $$ con un poco de cálculo podemos ver que esto se reduce a: $$ \alpha \det \begin{bmatrix} 1 &y_A &z_A\\ 1 &y_B &z_B\\ 1 &y_C &z_C\\ \end{bmatrix}+ \beta \det \begin{bmatrix} x_A &1 &z_A\\ x_B &1 &z_B\\ x_C &1 &z_C\\ \end{bmatrix}+ \gamma \det \begin{bmatrix} x_A &y_A &1\\ x_B &y_B &1\\ x_C &y_C &1\\ \end{bmatrix}- \det \begin{bmatrix} x_A &y_A &z_A\\ x_B &y_B &z_B\\ x_C &y_C &z_C\\ \end{bmatrix}=0 $$

Esta es otra ecuación lineal a partir de la cual podemos encontrar las coordenadas del centro y del radio.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X