Lissajous Curve Generator
Etkileşimli frekans ve faz kontrolleri ile Lissajous figürlerini animasyon yapın ve keşfedin.
Formül
Bu araç hakkında
Lissajous eğrisi, farklı frekanslar ile iki dik salınımın birleştirilmesiyle oluşturulan matematiksel bir şekildir. Fransız fizikçi Jules Antoine Lissajous'un adından türetilen bu zarif parametrik eğriler, 160 yıldan fazla süredir matematikçi ve mühendisleri büyülemektedir. Lissajous figürlerinin güzelliği basitliğinde yatmaktadır—sadece iki sinüs dalgası, basit elipslerden karmaşık düğüm benzeri şekillere kadar uzanan karmaşık ve simetrik örüntüler oluşturur.
Bu üreteç kullanılarak, frekans oranları ve faz farklarıyla etkileşimli olarak deney yapabilir, nihai eğrinin nasıl şekillendiğini görebilirsiniz. Frekans A ve B'yi bağımsız olarak ayarlayın, faz kayması δ'yı hassasiyetle kontrol edin, eğrinin genliğini değiştirin ve renkler ve iz uzunluğu ile görselleştirmeyi özelleştirin. Animasyonu oynatırken, fazın nasıl sürekli geliştiğini ve şeklin tüm olası formları üzerinde dönüştüğünü gözlemleyeceksiniz—harmonik ilişkiler ve rezonans fenomenini anlama konusunda somut bir yol.
Lissajous eğrileri dekoratiften çok daha fazla anlamdadır: elektrik mühendisliği laboratuvarlarında osiloskop ekranlarında görünür, fizik sınıflarında bağlı sarkaç hareketini gösterir, ses mühendisliğinde frekans ilişkilerini görselleştirir ve anten tasarımını bilgilendirir. Parametrik eğrileri araştıran bir öğrenci olun, sinyal ilişkilerinde hata ayıklayan bir mühendis olun ya da basitçe matematiksel güzellikten büyülenen biri olun, bu araç soyut olanı somut hale getirmiştir.
Sıkça Sorulan Sorular
Kod Uygulaması
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.