Aller au contenu
🛠️ToolsShed

Lissajous Curve Generator

Animer et explorer les figures de Lissajous avec contrôles interactifs de fréquence et de phase.

3
2
45°
180px
500

Formule

x(t) = A · sin(3t + δ)
y(t) = B · sin(2t)
δ = 45° = 0.25π
Ratio: 3:2

À propos de cet outil

Une courbe de Lissajous est une figure mathématique produite en combinant deux oscillations perpendiculaires de fréquences différentes. Nommées en l'honneur du physicien français Jules Antoine Lissajous, ces élégantes courbes paramétriques fascinent les mathématiciens et les ingénieurs depuis plus de 160 ans. La beauté des figures de Lissajous réside dans leur simplicité—deux simples ondes sinusoïdales créent des motifs intriqués et symétriques allant des ellipses simples aux formes complexes semblables à des nœuds.

Avec ce générateur, vous pouvez expérimenter de manière interactive avec les rapports de fréquence et les différences de phase pour voir comment ils façonnent la courbe finale. Réglez les fréquences A et B indépendamment, contrôlez le décalage de phase δ avec précision, modifiez l'amplitude de la courbe et personnalisez la visualisation avec les couleurs et la longueur de la trajectoire. En jouant l'animation, vous observerez comment la phase évolue continuellement, transformant la figure à travers toutes ses formes possibles—une façon tangible de comprendre les relations harmoniques et les phénomènes de résonance.

Les courbes de Lissajous sont bien plus que décoratives : elles apparaissent sur les écrans des oscilloscopes dans les laboratoires d'ingénierie électrique, illustrent le mouvement des pendules couplés dans les salles de classe de physique, visualisent les relations de fréquence en ingénierie audio et informent la conception des antennes. Que vous soyez un étudiant explorant les courbes paramétriques, un ingénieur déboguant les relations entre signaux, ou simplement quelqu'un fasciné par la beauté mathématique, cet outil rend l'abstrait concret.

Questions Fréquentes

Implémentation du Code

import math

def lissajous_points(freq_a: float, freq_b: float, delta: float,
                     amplitude: float = 1.0, num_points: int = 1000) -> list[tuple[float, float]]:
    """Generate Lissajous curve points.
    x(t) = A * sin(a*t + delta)
    y(t) = A * sin(b*t)
    """
    points = []
    for i in range(num_points):
        t = 2 * math.pi * i / num_points
        x = amplitude * math.sin(freq_a * t + delta)
        y = amplitude * math.sin(freq_b * t)
        points.append((x, y))
    return points

# Common interesting ratios
ratios = [
    (1, 1, math.pi / 4, "Ellipse (a:b=1:1)"),
    (1, 2, math.pi / 4, "Figure-8 (a:b=1:2)"),
    (2, 3, math.pi / 4, "Bow-tie (a:b=2:3)"),
    (3, 4, math.pi / 4, "Complex knot (a:b=3:4)"),
    (5, 4, 0,           "Star pattern (a:b=5:4)"),
]

for a, b, delta, label in ratios:
    pts = lissajous_points(a, b, delta)
    x_vals = [p[0] for p in pts]
    y_vals = [p[1] for p in pts]
    print(f"{label}: x range [{min(x_vals):.3f}, {max(x_vals):.3f}]")

# Number of lobes = |a - b| or related to ratio
# Closed curve when a/b is rational
def is_closed(a: float, b: float) -> bool:
    from math import gcd
    if isinstance(a, int) and isinstance(b, int):
        g = gcd(a, b)
        return True  # rational ratio
    return False

print(f"\na=3, b=4 closed curve: {is_closed(3, 4)}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.