Lissajous Curve Generator
Animiere und erkunde Lissajous-Figuren mit interaktiven Frequenz- und Phasen-Steuerungen.
Formel
Über dieses Tool
Eine Lissajous-Kurve ist eine mathematische Figur, die durch die Kombination zweier senkrechter Schwingungen mit unterschiedlichen Frequenzen entsteht. Benannt nach dem französischen Physiker Jules Antoine Lissajous, faszinieren diese eleganten Parameterkurven seit über 160 Jahren Mathematiker und Ingenieure. Die Schönheit der Lissajous-Figuren liegt in ihrer Einfachheit—nur zwei Sinuswellen erzeugen fein verflochtene, symmetrische Muster von einfachen Ellipsen bis zu komplexen knotenähnlichen Formen.
Mit diesem Generator können Sie interaktiv mit Frequenzverhältnissen und Phasendifferenzen experimentieren und sehen, wie sie die endgültige Kurve prägen. Stellen Sie die Frequenzen A und B unabhängig ein, kontrollieren Sie die Phasenverschiebung δ präzise, ändern Sie die Amplitude der Kurve und passen Sie die Visualisierung mit Farben und Spurlänge an. Durch Abspielen der Animation beobachten Sie, wie sich die Phase kontinuierlich entwickelt und die Figur durch alle möglichen Formen transformiert—eine greifbare Methode, um harmonische Beziehungen und Resonanzphänomene zu verstehen.
Lissajous-Kurven sind weit mehr als dekorativ: Sie erscheinen auf Oszilloskopanzeigen in Elektroingenieurlaboren, veranschaulichen die Bewegung gekoppelter Pendel im Physikunterricht, visualisieren Frequenzbeziehungen in der Audiotechnik und informieren die Antennenkonstruktion. Ob Sie ein Student sind, der Parameterkurven erforscht, ein Ingenieur, der Signalbeziehungen debuggt, oder einfach jemand, der von mathematischer Schönheit fasziniert ist, dieses Werkzeug macht das Abstrakte konkret.
Häufig gestellte Fragen
Code-Implementierung
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.