5 votos

encontrar puntos intermedios en el pequeño círculo de una esfera

Lo que quiero saber/tener:

  • Una esfera con radio de $r_0=1$ centrada en el espacio Cartesiano en $c_0=(0,0,0)$
  • Tres puntos en la esfera $S$: $p_1$, $p_2$, y $p_3$
  • Un avión $P$ a través de los puntos $p_1$, $p_2$, y $p_3$
  • Un círculo de $C$, la cual es producida por la intersección del plano de $P$ con la esfera $S$. Todos los puntos $p_1$, $p_2$, y $p_3$ están en el círculo $C$
  • El arc $A$ al pasar de $p_1$ sobre circle $C$ $p_3$tiene la interesante propiedad de que en la fracción $0.5$ del total de su distancia, nos encontramos con $p_2$
  • Por lo tanto, en la fracción $0$ de la distancia total de arc $A$ nos encontramos con $p_1$, y en la fracción $1$ de la distancia total de arc $A$ nos encontramos con $p_3$

Lo que yo quiero:

Un punto de $p_4$ en el espacio Cartesiano ($x$,$y$,$z$ con respecto al origen $c_0$), que se encuentra en el arco $A$ a una fracción arbitraria $X$ de la distancia total que el arc $A$ abarca desde $p_1$ $p_3$

Desde una perspectiva computacional , esto significaría:

  • de entrada las coordenadas de 3 puntos y una fracción
  • coordenadas de salida de 1 punto

Por desgracia, todos los pasos son entre un cuadro negro para mí en términos de la matemática y computacional pasos y agradecería una solución ... o ayudar con la búsqueda de la solución de mí mismo.

Visualización del Problema

La visualización fue dibujado a mano, usando geogebra así que por favor, acaba de asumir los supuestos anteriores mantienen cierto (a pesar de que puede tener un aspecto diferente en la visualización) geogebra visualization 3d

Investigaciones anteriores:

  • El Gran Círculo es el círculo que viene de la intersección de una esfera y un plano que contiene el origen de la esfera como un punto de
  • Hay cálculos para encontrar puntos intermedios a lo largo del Gran Círculo de la Distancia en Ed William Aviación del Formulario
  • En mi caso, el plano NO contiene el origen de la esfera, pero otros tres puntos en la esfera
  • Lo que estoy buscando son los puntos intermedios de un "Pequeño Círculo de Distancia"

Anexos (no se requiere para responder a la pregunta) - aplicaciones en la Vida Real:

Cuando la medición de EEG de datos, no es convencional, conjunto de reglas de cómo colocar los electrodos (botones blancos en la imagen de abajo) en el cuero cabelludo de un ser humano. Generalmente esto se mide con una cinta de medir, pero por supuesto que también se puede modelar la cabeza de los humanos por un geométrica de la esfera y calcular la relación de los electrodos puestos en esa esfera (basado únicamente en las reglas y la inicial arbitraria de la colocación de un electrodo ... no hay mediciones en cuestión).

EEG 10 20 electrode placement

Observando la figura B de la imagen de arriba, y en relación a esta pregunta, supongamos que yo sepa las posiciones $F7$, $F8$, y $Fz$. Saber las reglas, $F3$ $F4$ se encuentran en las fracciones en el contorno de conectar $F7$ $F8$ a través de $Fz$.

2voto

Nominal Animal Puntos 23

Tenemos una esfera de radio $R$ con centro en el origen, y de tres puntos $$\vec{p}_1 = \left [ \begin{matrix} x_1 \\ y_1 \\ z_1 \end{matrix} \right ], \quad \vec{p}_2 = \left [ \begin{matrix} x_2 \\ y_2 \\ z_2 \end{matrix} \right ], \quad \vec{p}_3 = \left [ \begin{matrix} x_3 \\ y_3 \\ z_3 \end{matrix} \right ]$$ en la esfera, es decir,$\lVert\vec{p}_1\rVert = R$, $\lVert\vec{p}_2\rVert = R$, y $\lVert\vec{p}_3\rVert = R$.

Los tres puntos forman un plano con normal $\vec{n}$, $$\vec{n} = (\vec{p}_2 - \vec{p}_1) \times (\vec{p}_3 - \vec{p}_1) \tag{1}\label{NA1}$$ donde $\times$ representa la cruz del producto. Por simplicidad, vamos a utilizar una unidad de vector normal $\hat{n}$, $\lVert\hat{n}\rVert = 1$: $$\hat{n} = \left [ \begin{matrix} x_n \\ y_n \\ z_n \end{matrix} \right ] = \frac{\vec{n}}{\left\lVert\vec{n}\right\rVert} \tag{2}\label{NA2}$$ Tenga en cuenta que si $\lVert\vec{n}\rVert = 0$, los tres puntos son colineales, o dos o más tienen el mismo sistema de coordenadas.

El avión está a una distancia $d$ de origen: $$d = \hat{n} \cdot \vec{p}_1 = \hat{n} \cdot \vec{p}_2 = \hat{n} \cdot \vec{p}_3 \tag{3}\label{NA3}$$ donde $\cdot$ representa el producto escalar. (En un programa de ordenador, puede utilizar cualquiera de los tres; puede ser que difieren por error de redondeo.)

La intersección entre el plano y la esfera es un círculo, con centro de $\vec{c}$ y radio de $r$, $$\vec{c} = \left [ \begin{matrix} x_c \\ y_c \\ z_c \end{matrix} \right ] = d \hat{n}, \quad r = \sqrt{R^2 - d^2} = \left\lVert\vec{p}_1 - \vec{c}\right\rVert = \left\lVert\vec{p}_2 - \vec{c} \right\rVert = \left\lVert \vec{p}_3 - \vec{c} \right\rVert \tag{4}\label{NA4}$$

My suggested approach would be to construct a 2D coordinate system, where the unit circle corresponds to the above circle, with the first axis towards $\vec{p}_1$, and the second axis so that $\vec{p}_2$ is in the positive half-plane.

The origin is obviously at $\vec{c}$. The $u$ eje vector unitario es $$\hat{u} = \left [ \begin{matrix} x_u \\ y_u \\ z_u \end{matrix} \right ] = \vec{p}_1 - \vec{c} \tag{5}\label{NA5}$$ Tenga en cuenta que, por definición, $\left\lVert\hat{u}\right\rVert = r$.

El $v$ unidad de eje de vector es perpendicular a la normal del plano $\vec{n}$ e las $u$ eje vector unitario; también tenemos que seleccionar su signo (lateralidad), de modo que $\vec{p}_2$ positivo $v$ coordinar. Así, en primer lugar calculamos el producto cruzado, y la escala a la longitud adecuada: $$\hat{q} = r \frac{\vec{n} \times \hat{u}}{\left\lVert\vec{n}\times\hat{u}\right\rVert} = \hat{n} \times \hat{u}\tag{6}\label{NA6}$$ A continuación, recogemos su dirección (diestro o zurdo, o el signo de $v$ coordenadas), de modo que $\vec{p}_2$ positivo $v$ coordinar: $$\hat{v} = \left [ \begin{matrix} x_v \\ y_v \\ z_v \end{de la matriz} \right ] = \begin{cases} \hat{q}, & (\vec{p}_2 - \vec{c}) \cdot \hat{q} \gt 0 \\ -\hat{q}, & \text{otherwise} \end{casos} \etiqueta{7}\label{NA7}$$ Tenga en cuenta que $\vec{p}_2$ puede tener un cero $v$ coordinar sólo si es contrario a $\vec{p}_1$ sobre el círculo; y por OP definición, que requeriría $\vec{p}_3 = \vec{p}_1$, en cuyo caso no tendríamos un avión.

En este punto, tenemos un sistema de coordenadas 2D $(u, v)$: $$\vec{p} = \vec{c} + u \hat{u} + v \hat{v} \tag{8a}\label{NA8a}$$ y a la inversa $$\left\lbrace\begin{aligned} u &= \frac{(\vec{p} - \vec{c}) \cdot \hat{u}}{r^2} \\ v &= \frac{(\vec{p} - \vec{c}) \cdot \hat{v}}{r^2} \\ \end{aligned}\right.\la etiqueta{8}\label{NA8b}$$ Tenemos que calcular la dirección de la $\vec{p}_3$ en este círculo. La mayoría de los lenguajes de programación proporcionan una atan2(y, x) función que calcula el $\arctan(y/x)$ excepto incluyendo el cuadrante de $(x, y)$; es decir, con el resultado de cubrimiento completo de 360°. Esencialmente, $$\theta^\prime = \operatorname{atan2}\bigl( (\vec{p}_3 - \vec{c})\cdot\hat{v} ,\, (\vec{p}_3 -\vec{c})\cdot\hat{u} \bigr) \tag{9}\label{NA9}$$ mencionar que, dado que ambos componentes están divididos por $r^2$, podemos omitir ambas divisiones.

Ya hemos definido el sistema de coordenadas 2D de manera que la rotación en sentido antihorario se inicia a partir de $\vec{p}_1$, luego llega a $\vec{p}_2$, y, finalmente,$\vec{p}_3$, necesitamos un positivo $\theta$. Por lo tanto,

$$\theta = \begin{cases} \theta^\prime + 360°, & \theta^\prime \lt 0 \\ \theta^\prime, & \text{otherwise} \end{casos} \etiqueta{10}\label{NA10}$$

If we now want to parametrise the arc using $t$ as the arc length parameter, $0 \le t \le 1$, so that $\vec{P}(0) = \vec{p}_1$, $\vec{P}(0.5) = \vec{p}_2$, $\vec{P}(1) = \vec{p}_3$, we simply use $u = \cos(t\theta)$, $v = \sin(t\theta)$. En resumen, $$\vec{P}(t) = \vec{c} + \hat{u}\cos(t\theta) + \hat{v}\sin(t\theta) \tag{11}\label{NA11}$$

Note that the approach works for any $\vec{p}_2$ that is on the circular arc between $\vec{p}_1$ and $\vec{p}_3$; there is no need to require $\vec{p}_2 = \vec{P}(0.5)$. (Having $\vec{p}_2$ away from $\vec{p}_1$ and $\vec{p}_3$ means the triangle they form is as "wide" as possible, reducing the rounding error in $\hat{n}$, so it is a very good choice; but other than that, this algorithm only expcets $\vec{p}_2$ to be somewhere on the arc between $\vec{p}_1$ and $\vec{p}_2$, i.e. at $\vec{P}(\tau)$ with $0 < \tau < 1$.)

In pseudocode, the function could be written as

Globals: xc, yc, zc, xu, yu, zu, xv, yv, zv, theta

Function x(t) = xc + xu*cos(t*theta) + xv*sin(t*theta)
Function y(t) = yc + yu*cos(t*theta) + yv*sin(t*theta)
Function z(t) = zc + zu*cos(t*theta) + zv*sin(t*theta)

Function Setup(x1, y1, z1, x2, y2, z2, x3, y3, z3):
    # Note: This assumes
    #           x1*x1 + y1*y1 + z1*z1 == R*R
    #           x2*x2 + y2*y2 + z2*z2 == R*R
    #           x3*x3 + y3*y3 + z3*z3 == R*R
    #       although the exact value of R is irrelevant.

    # Find plane unit normal vector (xn, yn, zn):
    Let  x12 = x2 - x1
    Let  y12 = y2 - y1
    Let  z12 = z2 - z1
    Let  x13 = x3 - x1
    Let  y13 = y3 - y1
    Let  z13 = z3 - z1

    Let  xn = y12*z13 - z12*y13
    Let  yn = z12*x13 - x12*z13
    Let  zn = x12*y13 - y12*x13
    Let  n = sqrt(xn*xn + yn*yn + zn*zn)
    If (n <= 0.0) Then
        Fail: "The three points are not in general position."
    End If
    Let  xn = xn / n
    Let  yn = yn / n
    Let  zn = zn / n

    # Signed distance from plane to origin
    Let  d = xn*x1 + yn*y1 + zn*z1

    # Center of circle
    Let  xc = d*xn
    Let  yc = d*yn
    Let  zc = d*zn

    # 2D U axis unit vector
    Let  xu = x1 - xc
    Let  yu = y1 - yc
    Let  zu = z1 - zc

    # 2D V axis unit vector
    Let  xv = yn*zu - zn*yu
    Let  yv = zn*xu - xn*zu
    Let  zv = xn*yu - yn*xu

    # Choose V axis towards (x2,y2,z2)
    Let  v2 = (x2 - xc)*xv + (y2 - yc)*yv + (z2 - zc)*zv
    If (v2 < 0.0) Then
        Let  xv = -xv
        Let  yv = -yv
        Let  zv = -zv
    End If

    # Note: If needed, you can calculate
    #           r = sqrt(xu*xu + yu*yu + zu*zu)
    #             = sqrt(xv*xv + yv*yv + zv*zv)
    #             = sqrt(R*R - d*d)
    #       All three match to within rounding error,
    #       iff the initial assumption of all three
    #       points being at the same distance from
    #       origin is true.

    # Find theta, the positive plane angle towards (x3,y3,z3).
    Let  xt = x3 - xc
    Let  yt = y3 - yc
    Let  zt = z3 - zt
    Let  thetau = xt*xu + yt*yu + zt*zu
    Let  thetav = xt*xv + yt*yv + zt*zv
    Let  theta = atan2(thetav, thetau)
    If (theta < 0.0) Then
        # Add 360 degrees, or 2*Pi in radians, to make it positive
        Let  theta = theta + 6.2831853071795864769252867665590
    End If

    # Done.
End Function 

After calling Setup(), x(0) == x1, y(0) == y1, z(0) == z1; x(0.5) == x2, y(0.5) == y2, z(0.5) == z2; and x(1) == x3, y(1) == y3, z(1) == z3. The argument is relative arc length, or equivalently angle, from the first point to the third point (via the second point).

(I've tested this with an awk snippet and some random points. Do note that the initial assumption of the three points being equidistant from origin is necessary for the results to make sense; the pseudocode function above does not verify this is true. Obviously, small errors (rounding or measurement error) is allowed, and only causes an error of similar magnitude in the result; the function is surprisingly stable, numerically.)


Another possible approach would be to simply consider $\vec{p}_1$, $\vec{p}_2$, and $\vec{p}_3$ to be points on a circle, and solve $\hat{n}$, $\vec{c}$, and $r$ a partir de ellos, ignorando el original de la esfera completamente. Si ese enfoque produce resultados más precisos que los que se muestra arriba, no sé, depende de la precisión relativa de los puntos; esencialmente, de cómo las mediciones se realizan, y el grado de precisión del 3D de origen para la medición de la esfera.

1voto

N.Bach Puntos 111

En principio, sólo se puede establecer una ecuación paramétrica de la arc, donde el parámetro es la longitud de arco. Especialmente en el caso de los círculos, su ecuación paramétrica es bastante simple.

Dicen que usted tiene un punto de $O$, y dos ortogonal de vectores unitarios $\mathbf u$$\mathbf v$. Entonces la ecuación paramétrica de la circunferencia de centro $O$, radio $r>0$, y en el plano a través de la $O$ con las direcciones $\mathbf u$$\mathbf v$, está dada por $$M(\theta) = O+r\left(\cos\theta\mathbf u+\sin\theta\mathbf v\right)$$ para $\theta\in\mathbb R$. Restringir el valor de $\theta$ a un rango de longitud de menos de $2\pi$ rendimiento arcos circulares apoyado por el círculo.


Para aplicar esto a su problema, usted sólo tiene que averiguar lo que la elección de $\mathbf u$ $\mathbf v$ le hará la vida simple. Una posibilidad es calcular el centro de $O$ y radio de $r$ de su círculo, a continuación, establezca $\hat{\mathbf u} = \vec{Op_1}$ y $\hat{\mathbf v} = \vec{Op_2}$. Deje $\mathbf u$ $\mathbf v$ ser la de Gram–Schmidt orthonormalisation de $\hat{\mathbf u}$$\hat{\mathbf v}$. Vamos también a $\varphi$ ser el único número real en $(O,2\pi)$ tal que $p_3=O+r(\cos\varphi\mathbf u+\sin\varphi\mathbf v)$.

A continuación, el arc $A$ es la colección de puntos de $M(\theta)$$0\le\theta\le\varphi$. Si desea utilizar una fracción del total de la longitud de arco, puede utilizar $\theta = f\times\varphi$ $0\le f\le 1$ de su fracción.

1voto

Joe Gauterin Puntos 9526

Olvídate de pequeños círculos sobre una esfera. Considere la posibilidad de la generalización de que tenemos $3$ $p_1, p_2, p_3$ mintiendo en algún círculo centrado en $c$ radio $r$ $p_2$ es el punto medio del arco circular $p_1p_3$. Deje $\theta_0$ ser la mitad de ángulo del arco $p_1p_3$ subtendido en $c$.

Podemos parametrizar el arco circular por un ángulo de $\theta \in [-\theta_0,\theta_0]$ utilizando la siguiente fórmula: $$p(\theta) = c + (p_2 - c)\cos\theta + \frac{p_3-p_1}{2}\frac{\sin\theta}{\sin\theta_0} \tag{*1}$$

Independiente del valor de la $c$,$p(0) = p_2$. En orden para$p(-\theta_0) = p_1$$p(\theta_0) = p_3$, necesitamos

$$c + (p_2 - c)\cos\theta_0 = \frac{p_1+p_3}{2} \quad\implica\quad c = \frac{1}{1-\cos\theta_0} \left(\frac{p_1+p_3}{2} - p_2 \cos\theta_0\right)$$ Conecte esta de vuelta en $(*1)$, obtenemos

$$\bbox[padding: 1em;border: 1px solid blue]{ p(\theta) = \frac{1-\cos\theta}{1-\cos\theta_0}\frac{p_3+p_2}{2} + \frac{\sin\theta}{\sin\theta_0} \frac{p_3-p_1}{2} + \frac{\cos\theta\cos\theta_0}{1-\cos\theta_0} p_2}\etiqueta{*2}$$

Lo que queda es calcular los $\theta_0$.

Aviso de $|p_3 - p_1| = 2r\sin\theta_0$$|p_2 - p_1| = 2r\sin\frac{\theta_0}{2}$, tenemos $$\cos\frac{\theta_0}{2} = \frac{\sin\theta_0}{2\sin\frac{\theta_0}{2}} = \frac{|p_3-p_1|}{2|p_2-p_1|} \quad\implica\quad \theta_0 = 2\cos^{-1}\left(\frac{|p_3-p_1|}{2|p_2-p_1|}\right) $$

Para parametrizar el arco utilizando una fracción $t$, uno sólo necesita asociar $t \in [0,1]$ con el punto de $p((2t-1)\theta_0)$ dado en la fórmula $(*2)$.

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