4 votos

Hace un láser que rebota dos espejos giratorios producir una Rosa curva o curva de Lissajous?

He construido un artilugio donde un láser rebota en dos espejos giratorios, cada uno de ellos fijo en una pequeña inclinación para un motor del eje. Variando la velocidad de los motores, puedo obtener diferentes patrones. Aunque estos tipos de proyectos en la web llamarlos de Lissajous patrones, estos parecen más cerca de Rose cifras cuando miro los enlaces a Wikipedia.

Así son estos Rose figuras o figuras de Lissajous? Yo también agradecería una pista sobre cómo puedo derivar la fórmula matemática para los patrones vistos. Puedo parametrizar esto en términos de velocidades de rotación de los dos motores? ¿Qué más necesito? Ángulo de inclinación de los espejos, de eje?

Aquí hay un video de lo que los patrones de aspecto:

http://youtu.be/0wPP_ArytUA

Aquí es el hardware (utiliza Python/Arduino para enviar analizar los datos de audio (FFT) y puerto serie para controlar la velocidad del motor y la dirección.)

laser-audio

2voto

Janis Veinbergs Puntos 210

Por fin he tenido tiempo para hacer algo de codificación y puedo generar sus imágenes en el ordenador. La matemática es bastante simple. La columna vertebral de la simulación de dos funciones

  1. Ray & plano de intersección: Vamos a tener ray $\mathbf r(t) = \mathbf v t + \mathbf p$ ( $\mathbf v$ la dirección de ray(no es necesario vector unitario), $\mathbf p$ punto de inicio de rayos), y el plano $ \mathbf n \cdot \mathbf x - \mathbf n \cdot \mathbf d = 0$ ($\mathbf n$ es la unidad de lo normal, y $\mathbf d$ es cualquier punto en el plano). Que el punto de Intersección de este rayo y el plano es el punto $$ \mathbf v \frac{ \mathbf n \cdot \mathbf d - \mathbf n \cdot \mathbf p}{\mathbf n \cdot \mathbf v} + \mathbf p $$
  2. Ray rebote del avión. Tenemos que calcular cómo es la dirección de ray cambios cuando se rebota de avión. Si la dirección de ray es $\mathbf v$ y el plano de la unidad normal es $\mathbf n$ que la nueva dirección de los rayos después de un golpe $$ \mathbf v - 2 \mathbf n ( \mathbf n \cdot \mathbf v)$$

He implementado estos dos función a Mathematica y los utilizó para generar imágenes similares como en tu video. Sigue aquí el código. Espero que sea bien comentada, así que es comprensible. (Para una mejor legibilidad de copiar y pegar el código de mathematica o incluso mejor que descargar el archivo de bloc de notas)

(* 
    starting direction of ray
*)
v0 = {0, 1, 0}; p0 = {0, -3, 0}; 
(* 
  parameters of first plane
w1 - rotation axis
n1 - starting normal of plane
d1 - this is fixed point of plane, it stays still when plane rotates
omega1 - angular velocity of plane
*)
w1 = {1, -1, 0}; n1 = {1.1, -1, 0}; d1 = {0, 0, 0}; omega1 = 2;
w1 = w1/Norm[w1]; n1 = n1/
 Norm[n1] ; (* here I just make sure that w1 and n1 are unit vectors *)
\
(* h
    parameters of second plane
*)
w2 = {-1, 1, 0}; n2 =  {-1.3, 1, 0}; d2 = {2, 0, 0}; omega2 = 1;
w2 = w2/Norm[w2]; n2 = n2/
 Norm[n2] ;  (* here I just make sure that w2 and n2 are unit vectors \
*)
(*
    parameters of plane on which I project final image
*)
n3 = {0, 1, 0}; d3 = {0, 5, 0};

(* 
   Auxiliary function which make rotation matrix from axis and angle
*)
RotationMatrixFromAxis[n_, angle_] := MatrixExp[angle ( {
      {0, -n[[3]], n[[2]]},
      {n[[3]], 0, -n[[1]]},
      {-n[[2]], n[[1]], 0}
     } )];
(* Calculates ray plane intersecion
v - direcation of ray
p - start point of ray
n - normal of plane, has to be unit vector
d - distance of plane from origin 
*)
RayPlaneHit[v_, p_ , n_, d_] := 
  v (Dot[n, d] - Dot[n, p])/Dot[n, v] + p;
(* Calculate direction of ray which bounces of the plane
v - direction of ray
n - normal of plane
*)
RayPlaneBounce[ v_, n_ ] := v - 2 n (Dot[n, v]);

(*
    Calculate normals of rotating planes at time `t`
*)
n1 = RotationMatrixFromAxis[w1, t omega1].n1;
n2 = RotationMatrixFromAxis[w2, t omega2].n2;

(*
    Calculate ray intersection and direction after it hit the first \
plane
*)
p1 = RayPlaneHit[v0, p0, n1, d1];
v1 = RayPlaneBounce[ v0, n1];

(*
    Calculate ray intersection and direction after it hit the secont \
plane
*)
p2 = RayPlaneHit[v1, p1, n2, d2];
v2 = RayPlaneBounce[ v1, n2 ];
(*
    Calculate ray intersection after it hit the third plane
*)
p3 = \!\(\*
TagBox[
RowBox[{"Simplify", "[", 
RowBox[{"RayPlaneHit", "[", 
RowBox[{"v2", ",", "p2", ",", "n3", ",", "d3"}], "]"}], "]"}],
CheckAbort[#, 
Defer[#]]& ]\);

(* 
    Since third plane is perpendicular to y-axis, plot only x,z \
components of final intersection
*)
ParametricPlot[ {p3[[1]], p3[[3]]}, {t, 0, 10}]

Aquí están algunas de las imágenes que genera.

enter image description hereenter image description hereenter image description here

Para responder a la pregunta original, que le preguntó: ¿es Rosa, la curva de Lissajous o hypotrochoid?, usted tendría que probablemente alinear correctamente el último plano en el que el proyecto, por lo que la expresión final no sería tan complicado. No he descubierto cómo hacerlo todavía.

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