1 votos

solución de mínimos cuadrados para obtener una línea 3d mediante la intersección de muchos planos

Si me han dado 4 planos y sólo conozco un punto (sólo un punto situado en el plano, por ejemplo o1,o2, o3 y o4) y el vector normal de cada plano (n1, n2, n3 y n4). Entonces, mediante la intersección de todos los 4 (o más) planos, si esto hace una línea 3D, entonces cómo se calcularía utilizando el método de mínimos cuadrados. Supongamos que mi mínimo cuadrado ajustó la mejor línea de intersección como la línea roja en la imagen.

enter image description here

Por favor, muéstrame la solución paso a paso para conseguirlo. Mostrando esto en forma de matriz es útil para mí ya que quiero implementar esto en el entorno de programación c++. Gracias de antemano.

Nota: si tomo 2 planos por vez, entonces las líneas de intersección no son exactamente colineales... puede haber un pequeño desplazamiento... Así que quiero obtener la mejor línea que represente la intersección de todos los planos.

He actualizado un poco mi post original para que quede más claro.

3voto

Evan Anderson Puntos 118832

Supongamos que hay $m (m\geq 4)$ planos, para el número de plano $k$ conocemos un punto $\mathbf{x}_k = (x_{k,1},x_{k,2},x_{k,3})$ en el plano, y el vector normal unitario del plano número $k$ es $\mathbf{n}_k$ .

Aquí no estoy seguro de si te refieres a "un punto para cada plano", o a "un punto común para todos los planos", ambos se discuten.


Si suponemos que todos los planos pasan por el punto $\mathbf{x}_0$ . Entonces esta línea se puede representar utilizando este punto $\mathbf{x}_0$ y una dirección $\mathbf{b} = (b_1,b_2,b_3)$ $$ \mathbf{x} = \mathbf{x}_0 + t\mathbf{b} \quad\text{ for } t\in \mathbb{R} $$ Entonces el problema no necesita un tratamiento de mínimos cuadrados en absoluto, ya que no estamos resolviendo un sistema sobredeterminado, $\mathbf{b}$ puede obtenerse simplemente mediante el producto cruzado de dos normales cualesquiera: $$ \mathbf{b} = \mathbf{n}_1\times\mathbf{n}_2, \tag{1} $$ donde $\times$ es el producto cruzado de vectores. Porque los vectores normales de todos los planos son coplanares (por tanto, los planos se cruzan exactamente en una línea), $\mathbf{b}\perp \mathbf{n}_1, \mathbf{n}_2,\ldots, \mathbf{n}_m$ . Y hemos terminado.


Si sólo conocemos un punto por cada plano, y no sabemos si todos pasan por una línea común. Las cosas se complican. El problema de mínimos cuadrados puede no estar bien planteado. Queremos que esta recta sea perpendicular a todos los planos (en la medida de lo posible), y que pase por un punto que tenga la mínima distancia a todos los planos. El sistema de ecuaciones para $\mathbf{x} = (x_1,x_2,x_3)$ es: $$ \mathrm{dist}(\mathbf{x},P_k) = |\mathbf{n}_k \cdot (\mathbf{x} - \mathbf{x}_k )| = 0 $$ escrito en forma de matriz $$ \mathbf{N}\mathbf{x}:= \begin{pmatrix}n_{1,1} &n_{1,2} &n_{1,3} \\ n_{2,1} &n_{2,2} &n_{2,3} \\ \vdots&\vdots&\vdots \\ n_{m,1} &n_{m,2} &n_{m,3}\end{pmatrix}\begin{pmatrix}x_1 \\x_2 \\x_3\end{pmatrix} = \mathbf{y} := \begin{pmatrix}\mathbf{n}_1 \cdot \mathbf{x}_1 \\ \mathbf{n}_2 \cdot \mathbf{x}_2 \\ \vdots \\ \mathbf{n}_m \cdot \mathbf{x}_m\end{pmatrix}\tag{2} $$ donde $\mathbf{N}$ es un $m\times 3$ matriz, que es básicamente la lista de todos los vectores normales fila por fila. La formulación de mínimos cuadrados para el problema (2) es minimizar: $$ \min_{\mathbf{x}} \|\mathbf{N}\mathbf{x}-\mathbf{y}\|, $$ donde la norma es simplemente la norma euclidiana, la solución es el punto $\mathbf{x}_0$ satisfactorio: $$ \mathbf{N}^{T}\mathbf{N}\mathbf{x}_0 = \mathbf{N}^{T}\mathbf{y}. \tag{$ \N - Puñal $} $$ $(\dagger)$ es la primera ecuación matricial que quieres resolver. Después de obtener esta $\mathbf{x}_0$ Queremos encontrar un $\mathbf{b}$ tal que:

  • O bien si todos estos planos se cruzan en 1 línea, podemos encontrar esto $\mathbf{b}$ exactamente para esta línea.

  • O si no se cruzan en 1 línea, pero cada dos de ellos se cruzan en 1 línea (no hay planos paralelos, se puede descartar planos paralelos comprobando mismas normales o normales con signos opuestos pero iguales en cada componente). Usamos el mínimo cuadrado para encontrarlo.

Para el primer caso, sabemos que $\mathbf{b}$ se satisface: $$ \mathbf{b}\cdot \mathbf{n}_j = 0 $$ para cada número de plano $j$ porque el hecho de que la línea esté en todos los planos significa que es perpendicular a todos los vectores normales $ \mathbf{n}_j $ . En este caso, basta con calcular (1).

Para el segundo caso, el sistema de mínimos cuadrados producido por $\mathbf{b}\cdot \mathbf{n}_j = 0$ es: $$ \min_{\mathbf{b}} \|\mathbf{N}\mathbf{b}\|, $$ y la solución es cero si estos planos no se cruzan. Una forma posible es simplemente calcular la media de $\mathbf{n}_i\times\mathbf{n}_j$ que es el vector de la línea de intersección para cada dos de los planos, y establecer esta media como $\mathbf{b}$ . Otra forma (esencialmente la misma) es más de mínimos cuadrados es tratar de resolver la minimización: $$ \min_{\mathbf{b}} \sum_{i,j}\|\mathbf{b} - \mathbf{n}_i\times\mathbf{n}_j\|^2, $$ para que el resultado $\mathbf{b}$ es la línea paralela más cercana a todos los vectores de intersección de cada dos de los planos en sentido de mínimos cuadrados. En esta minimización, hay que tener cuidado con la dirección normal debido a $\mathbf{n}_i\times\mathbf{n}_j = -\mathbf{n}_j\times\mathbf{n}_i$ , quieres asegurarte de que todos los vectores de la línea de intersección estén en la misma dirección, es decir, $(\mathbf{n}_i\times\mathbf{n}_j)\cdot (\mathbf{n}_k\times\mathbf{n}_l) \geq 0$ . El minimizador final es la media de $\mathbf{n}_i\times\mathbf{n}_j$ para el caso de cuatro planos: $$ \begin{aligned} \mathbf{b} =& (\mathbf{n}_1\times\mathbf{n}_2 + \mathbf{n}_1\times\mathbf{n}_3 + \mathbf{n}_1\times\mathbf{n}_4 \\ &+\mathbf{n}_2\times\mathbf{n}_3 + \mathbf{n}_2\times\mathbf{n}_4 \\ &+ \mathbf{n}_3\times\mathbf{n}_4)/6, \end{aligned} $$ si suponemos que mirando desde la perspectiva de la línea de intersección, la dirección apuntada por $\mathbf{n}_1$ , $\mathbf{n}_2$ , $\mathbf{n}_3$ , a $\mathbf{n}_4$ está girando en sentido contrario a las agujas del reloj. Por ejemplo, en tu imagen quieres hacer que el cuarto vector normal apunte en la dirección opuesta.


Para un conjunto de datos aún mayor, consulte: http://en.wikipedia.org/wiki/Principal_component_analysis

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