Una onda armónica la magnitud física de la onda varía en el tiempo (Mandal 2023; Palagi et al. 2023), en cada punto del espacio, de forma senoidal. Y, tal como pasa con todas las ondas, la variación es en función de la variable x - vt, aunque aquí escribiremos la dependencia en el espacio y el tiempo de una forma ligeramente distinta. Así, pues, expresaremos la onda armónica como:

\[ \psi(x, t)=A \cos (k*x-w*t+ \phi) \]

Instalación de bibliotecas

En esta sección, se están instalando dos bibliotecas necesarias para crear y animar gráficos: ggplot2 (Wickham 2016) y gganimate (Pedersen and Robinson 2024).

# Instala las bibliotecas necesarias si aún no lo has hecho
install.packages("ggplot2")
install.packages("gganimate")

Cargamos capeta de trabajo

Copiamos la ruta donde queremos almacenar nuestros archivos

setwd("D:/DOCUMENTOS/google drive/libros/asignaturas/Fisica de ondas/funcion de onda")

Cargamos las librerías

Cargamos las librerías para poder generar los gráficos

library(ggplot2)
library(gganimate)

Función para calcular la onda senoidal

Se establecen los parámetros de la onda senoidal.

a <- 1  # Amplitud
k <- 1  # Número de onda
w <- 1  # Velocidad angular

Construimos la función de onda senoidal (Giorgi et al. 2019) para la dirección positiva de + x “k * x - w * t”, para dirección negativa de - x “k * x + w* t” .

funcion_onda <- function(x, t) {
  a * cos(k * x - w * t)
}

Crea un marco de datos a partir de todas las combinaciones x es la posición (m) y t es el tiempo (s).

df <- expand.grid(x = seq(-5 * pi, 5 * pi, length.out = 100),
                  t = seq(0, 5 * pi, length.out = 100))

Calcular los valores de la onda senoidal utilizando la función funcion_onda y se almacenan en la columna y del data frame df.

df$y <- funcion_onda(df$x, df$t)

Se utiliza ggplot2 y gganimate para crear la animación de la onda senoidal. Se establecen transiciones de estados, efectos de entrada y salida, y se personaliza el aspecto de la animación.

animacion <- ggplot(df, aes(x, y)) +# Inicia la creación de un gráfico. 
  geom_line(col = "red") +# Agrega una capa al gráfico que representa una línea.
  transition_states(t, transition_length = 2, state_length = 1) +
  # Define la transición de estados para crear la animación.
  enter_fade() +# Agrega un efecto de entrada (fade in) a los elementos en cada estado.
  exit_fade() +# Agrega un efecto de desvanecimiento a la salida de cada estado en la animación.
  labs(title = paste0("Onda Senoidal: y(x,t) =", a,"* cos(", k, "* x -", w, "* t)"),
       x = "Posición (x)",
       y = "Amplitud") + # Establece etiquetas para el título y los ejes.
  theme_minimal() # Aplica un tema minimalista al gráfico para mejorar su apariencia.
animacion

Guardamos la animación como un archivo GIF

anim_save("senoidal_animation.gif", animacion)

Referencias

Giorgi, Silvia María, Luis Alberto Marino, Ricardo Antonio Carreri, and Cristina Noemí Cámara. 2019. “Dificultades En Estudiantes Universitarios Acerca de Las Conceptualizaciones de Los Parámetros Básicos En La Ecuación de Ondas Mecánicas y Sus Tratamientos En Libros de Física.” Caderno Brasileiro de Ensino de Física 36 (3): 630–59. https://doi.org/10.5007/2175-7941.2019v36n3p630.
Mandal, Ipsita. 2023. “Andreev Bound States in Superconductor-Barrier-Superconductor Junctions of Rarita-Schwinger-Weyl Semimetals.” arXiv. https://doi.org/10.48550/ARXIV.2312.16164.
Palagi, Marcello, Gianluca Rinaldi, Giancarlo Santamato, Massimiliano Solazzi, Antonio Frisoli, and Domenico Chiaradia. 2023. “Compact Custom Spring Joint for Series Elastic Actuators in Physical Human-Robot Interaction,” October. https://doi.org/10.5281/ZENODO.10722487.
Pedersen, Thomas Lin, and David Robinson. 2024. “Gganimate: A Grammar of Animated Graphics.” https://CRAN.R-project.org/package=gganimate.
Wickham, Hadley. 2016. “Ggplot2: Elegant Graphics for Data Analysis.” https://ggplot2.tidyverse.org.