Intersección de una línea con una superficie de revolución específica

Aug 21 2020

Como parte de un proyecto de arte, estoy tratando de escribir un programa para rastrear huevos, como lo define el modelo descrito en este documento . Como parte de la escritura de este programa, estoy tratando de calcular la intersección entre una línea en el espacio 3d y la superficie obtenida al girar la ecuación de ese papel, que es.

$ r = T \times (1 + z)^\frac{1}{1 + \lambda} \times (1-z)^\frac{\lambda}{1+\lambda} $

Dónde $r$ es el radio del huevo en altura $z$ y $T$ y $\lambda$ son parámetros del modelo.

Usando esto, y la siguiente ecuación para una línea en el espacio 3d, pasando por un punto $(x_0, y_0, z_0)$ en la dirección $(x_d, y_d, z_d)$:

$ \frac{x - x_0}{x_d} = \frac{y - y_0}{y_d} = \frac{z - z_0}{z_d} $

y la siguiente ecuación para $r$ en términos de $x$ y $y$

$ r^2 = x^2 + y^2 $

He podido sustituir el $x$ y $y$ coordenadas en términos de $z$, para obtener la siguiente igualdad que creo que debería mantenerse en la intersección.

$ \sqrt{(y_0 + y_d \frac{z - z_0}{z_d})^2 + (x_0 + x_d * \frac{z - z_0}{z_d})^2} = T \times (1 + z)^\frac{1}{1 + \lambda} \times (1-z)^\frac{\lambda}{1+\lambda}) $

Aquí es donde estoy atrapado. Si puedo resolver esto, puedo encontrar las coordenadas z de cualquier intersección, y a partir de eso, las coordenadas completas, y esto debería ser suficiente para generar el huevo.

Respuestas

2 J.Heller Aug 24 2020 at 09:29

La función $$ r = T\cdot (1+z)^{1/(1+\lambda)} (1-z)^{\lambda/(1+\lambda)} $$parece ser más complicado de lo necesario. Otra forma de ecuación de huevo de dos parámetros es una curva algebraica de grado tres total,$x^2 + a_0y^2 + a_1xy^2 = 1$, dónde $$ a_0 = \frac{1 + x_{\textrm{max}}^2}{y_{\textrm{max}}^2} $$ y $$ a_1 = \frac{-2x_{\textrm{max}}}{y_{\textrm{max}}^2}. $$ los $x_{\textrm{max}}$ parámetro es el $x$ valor donde el huevo tiene su máximo y mínimo $y$ valor y el $y_{\textrm{max}}$ el parámetro es este máximo $y$valor. Esta ecuación resulta de una simple transformación de una ecuación de elipse (ver "Del óvalo a la forma de huevo" ).

Aquí hay un ejemplo de esta curva algebraica para $x_{\textrm{max}}=-0.4$ y $y_{\textrm{max}} = 0.7$:

La ecuación de la superficie de revolución cuando esta curva algebraica gira alrededor de la $x$ eje es $$ y^2 + z^2 = \frac{1-x^2}{a_0 + a_1x}. $$ Suponga que define su ecuación lineal como $(x,y,z) = \vec{P} + t\vec{v}$, dónde $\vec{P}$ es un punto en la línea y $\vec{v}$es la dirección de la línea. Entonces la intersección de la línea y la superficie de revolución es una ecuación cúbica en la variable$t$(que se puede resolver con bastante facilidad). Definitivamente, esto es más fácil de resolver que la ecuación de la intersección de una línea con la ecuación original del huevo. En ese caso, necesitaría usar algún solucionador de ecuaciones no lineales.


Aquí hay una comparación de la curva de huevo algebraica y la curva de huevo de exponente fraccionario para $x_{\textrm{max}}=-0.2$ y $y_{\textrm{max}}=0.7$ (un $\lambda$ valor de 1,5 da un $x_{\textrm{max}}$ de -0,2):

La curva de exponente fraccionario anterior está parametrizada por el ángulo polar $\theta$ para conseguir un mejor espaciado de puntos cerca $x=-1$ y $x=1$de modo que la forma de la curva se ilustra mejor en los extremos. Puede ver que el extremo derecho del huevo del exponente fraccionario es demasiado agudo (la curvatura es realmente infinita) y el extremo izquierdo es demasiado plano. El artículo de "The Auk" no consideró la bondad del ajuste en los extremos de la curva generatriz. El documento solo calculó algunos diámetros interiores de la generatriz y comparó estos números con las medidas del ancho de los huevos reales. Aquí hay una imagen de un huevo de gallina real para mostrar la forma en los extremos:

1 Cesareo Aug 25 2020 at 23:06

Dado $f(x)=r$ como una curva para $-1\le x\le 1$ la superficie de revolución alrededor del $x$ El eje se obtiene como $$S\to F(x,y,z) = f(x)-\sqrt{y^2+z^2}=0$$. Definiendo ahora una línea como

$$ L\to p = p_0 +\mu \vec v,\ \ \ p = (x,y,z),\ \ \ p_0 =(x_0,y_0,z_0),\ \ \ \vec v = (v_x,v_y,v_z),\ \ \ \mu\in\mathbb{R} $$

la intersección $S\cap L$ se obtiene resolviendo para $\mu$

$$ G(\mu) = F(x_0+\mu v_x,y_0+\mu v_y, z_0+\mu v_z) = 0 $$

Aquí $G(\mu)$ nos da la pista para encontrar el $\mu^*$ satisfactorio $G(\mu^*)=0$ cuando existe.

Calculador $\mu_m=\arg\max_{\mu}G(\mu)$ Si $G(\mu_m) < 0$ entonces $S,L$no se cruza. Cuando$G(\mu_m) \gt 0$tenemos dos soluciones y elegimos la de menor valor como solución. La determinación de$\mu_m,\mu^*$ se puede hacer usando un procedimiento iterativo como el de Newton resolviendo $G'(\mu)=0,G(\mu)=0$.

Sigue un script MATHEMATICA con el procedimiento iterativo necesario.

Aquí está $f(x)$

T = 0.6;
lambda = 0.7;
Plot[T (1 + x)^(1/(1 + lambda)) (1 - x)^(lambda/(1 + lambda)), {x, -1, 1}, PlotRange -> {{-1, 1}, {-1, 1}}, AspectRatio -> 1, PlotStyle -> {Thick, Blue}]

sigue la determinación de $G(\mu)$ y $\mu_m$

G = T (1 + x)^(1/(1 + lambda)) (1 - x)^(lambda/(1 + lambda)) - Sqrt[y^2 + z^2];
p = {x, y, z};
p0 = {1.2, 1, 1};
v = {-1, -1, -2};
L = p0 + mu v;
Gmu = G /. Thread[p -> L];
solmax = Chop[FindMaximum[Gmu, mu]]

y finalmente la determinación del punto de intersección cuando $G(\mu_m) \gt 0$.

dGmu = D[Gmu, mu];
deltamu = Gmu/dGmu;
mu0 = 0.5 mu /. solmax[[2]];

For[i = 1, i <= 10, i++,
   deltamu0 = deltamu /. {mu -> mu0};
   mu1 = mu0 - deltamu0;
   If[Abs[deltamu0] < 10^-6, Print[mu1]; Break[]];
   mu0 = mu1;
]

pint = L /. {mu -> mu1};
grL = ParametricPlot3D[L, {mu, -2, 2}];
grpti = Graphics3D[{Red, Sphere[pint, 0.02]}];
gr0 = ContourPlot3D[T (1 + x)^(1/(1 + lambda)) (1 - x)^(lambda/(1 + lambda)) == Sqrt[y^2 + z^2], {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, ContourStyle -> {Yellow, Opacity[0.6]}, Mesh -> None, BoundaryStyle -> None]
Show[gr0, grL, grpti]

Tenga en cuenta que para la determinación de $\mu_m$ también podemos utilizar un procedimiento iterativo.