李萨如图形

李萨如图形是一种复杂的周期性曲线,由两个简谐振动在垂直方向上的合成而成。这种图形以19世纪法国数学家朱尔·安托万·李萨如(Jules Antoine Lissajous)的名字命名,因为他首次系统地研究了这些图形。

以下是关于李萨如图形的一些关键点:

形成原理:

李萨如图形是由两个正交方向(通常是x轴和y轴)上的简谐运动合成而成。这两个运动可以用正弦或余弦函数表示。

数学表达式:

一般形式可以表示为:
x = A sin(at + δ)
y = B sin(bt)

其中,A和B是振幅,a和b是角频率,δ是相位差,t是时间变量。

影响图形的因素:

频率比(a:b):决定了图形的基本形状
相位差(δ):影响图形的具体形态
振幅比(A:B):决定图形的宽高比

常见图形:

当频率比为1:1时,可能形成圆形、椭圆形或直线(取决于相位差)
当频率比为1:2时,可能形成类似8字形的图案
更复杂的频率比会产生更复杂的图案

应用:

音乐和声学:分析声音波形
电子学:测量相位差和频率
物理学:研究振动和波动现象
艺术:创作视觉艺术作品
为了更好地理解李萨如图形,让我们创建一个简单的交互式示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>交互式李萨如图形</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
  <style>
    body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; }
    #controls { margin-left: 20px; }
  </style>
</head>
<body>
  <div id="sketch-holder"></div>
  <div id="controls">
    <label for="freqX">X频率: </label>
    <input type="range" id="freqX" min="1" max="10" value="1"><br>
    <label for="freqY">Y频率: </label>
    <input type="range" id="freqY" min="1" max="10" value="1"><br>
    <label for="phase">相位差: </label>
    <input type="range" id="phase" min="0" max="360" value="0">
  </div>
  <script>
    let t = 0;
    let freqX, freqY, phase;
    
    function setup() {
      let canvas = createCanvas(400, 400);
      canvas.parent('sketch-holder');
      freqX = select('#freqX');
      freqY = select('#freqY');
      phase = select('#phase');
    }
    
    function draw() {
      background(240);
      translate(width/2, height/2);
      
      let x = sin(t * freqX.value()) * 150;
      let y = sin(t * freqY.value() + radians(phase.value())) * 150;
      
      stroke(0);
      noFill();
      ellipse(x, y, 5, 5);
      
      t += 0.05;
      
      if (t > TWO_PI) {
        t = 0;
      }
    }
  </script>
</body>
</html>

将上述代码保存为html结尾的文件,打开后可以通过调整X轴频率、Y轴频率和相位差来探索不同的李萨如图形。

当X和Y频率相等时,会看到圆或椭圆形。
当频率比为简单的整数比(如1:2, 2:3等)时,会看到稳定的封闭图形。
改变相位差会使图形旋转或改变形状。

当然也可以使用python来绘制李萨如图形:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题

# 初始参数
a = 1  # x频率
b = 1  # y频率
delta = np.pi/2  # 相位差
t = np.linspace(0, 2*np.pi, 1000)

# 创建图形
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.3)
x = np.sin(a * t)
y = np.sin(b * t + delta)
line, = ax.plot(x, y)
ax.set_xlim(-1.1, 1.1)
ax.set_ylim(-1.1, 1.1)
ax.set_aspect('equal', adjustable='box')
ax.set_title('李萨如图形')

# 创建滑块
ax_freq_x = plt.axes([0.2, 0.15, 0.6, 0.03])
ax_freq_y = plt.axes([0.2, 0.1, 0.6, 0.03])
ax_phase = plt.axes([0.2, 0.05, 0.6, 0.03])

s_freq_x = Slider(ax_freq_x, 'X频率', 1, 10, valinit=a, valstep=1)
s_freq_y = Slider(ax_freq_y, 'Y频率', 1, 10, valinit=b, valstep=1)
s_phase = Slider(ax_phase, '相位差', 0, 2*np.pi, valinit=delta)

# 更新函数
def update(val):
    a = s_freq_x.val
    b = s_freq_y.val
    delta = s_phase.val
    x = np.sin(a * t)
    y = np.sin(b * t + delta)
    line.set_xdata(x)
    line.set_ydata(y)
    fig.canvas.draw_idle()

# 连接滑块到更新函数
s_freq_x.on_changed(update)
s_freq_y.on_changed(update)
s_phase.on_changed(update)

# 重置按钮
reset_ax = plt.axes([0.8, 0.025, 0.1, 0.04])
button = Button(reset_ax, '重置', hovercolor='0.975')

def reset(event):
    s_freq_x.reset()
    s_freq_y.reset()
    s_phase.reset()
button.on_clicked(reset)

plt.show()

在这里插入图片描述
在有相应的库的情况下可以运行代码得到上图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值