来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247485945&idx=1&sn=454faa13529261ef26d63d99031e4942&chksm=f95c927ece2b1b68925b203a7d731584a131dbe20999f987021bc30067256c7ac96f6aef14cb#rd
傅里叶变换可视化工具
一个 macOS 应用程序,通过交互式绘图和旋转圆圈动画(本轮)来可视化傅里叶级数分解。
功能特点
交互式绘图画布
:在左侧面板使用鼠标绘制任意路径
实时傅里叶分析
:自动将您的绘图分解为频率分量
本轮动画
:观看旋转的圆圈组合重现您的绘图(右侧面板)
可调参数
:
圆圈数量(1-50):控制显示多少个频率分量
动画速度(0.1x-5.0x):调整播放速度
持久轨迹
:轨迹可保留多达 1000 个点,便于更好地可视化
使用方法
启动应用程序
:打开应用后看到分屏界面
绘制路径
:
在左侧白色画布上点击并拖动鼠标绘制任意形状
完成后释放鼠标
开始动画
:
点击”Start”按钮开始傅里叶级数动画
观看右侧面板中圆圈旋转并描绘您的图形
调整参数
:
使用”Circles”滑块增加/减少本轮数量
使用”Speed”滑块控制动画速度
清除并重绘
:
点击”Clear”按钮清除所有内容并重新开始
数学原理
本应用演示了傅里叶级数分解,该理论指出任何周期函数都可以表示为旋转圆圈(复指数)的和。
离散傅里叶变换(DFT)
对于具有 N 个采样点的路径,每个傅里叶系数计算如下:
c_n = (1/N) * Σ f(t) * e^(-int)
其中:
c_n
是频率 n 的复系数
f(t)
将路径表示为复函数(x + iy)
每个系数具有:
频率
:圆圈旋转的速度
振幅
:圆圈的半径
相位
:旋转的起始角度
工作原理
路径采样
:您的绘图被采样为均匀间隔的点(最多 150 个样本)
居中
:点围绕其平均值居中,以正确定位动画
DFT 计算
:对于 -30 到 30 的频率,应用计算振幅和相位
排序
:圆圈按振幅排序(最大的在前),以便更好地可视化
动画
:每一帧,所有圆圈以各自的频率旋转并组合以描绘路径
代码结构
主要组件
FourierTransformApp
:应用程序主入口点
ContentView
:分屏布局,包含绘图画布和动画视图
DrawingCanvas
:处理鼠标输入用于绘图的 NSView
FourierCircleCanvas
:渲染旋转圆圈和轨迹的 NSView
FourierViewModel
:DFT 计算和动画管理的业务逻辑
FourierCoefficient
:存储频率、振幅和相位的数据模型
关键文件
Fourier-Transform/Fourier-Transform/FourierTransformApp.swift
:完整应用代码(405 行)
算法流程
用户绘制路径
↓
捕获点(鼠标事件)
↓
均匀采样(最多 150 个点)
↓
居中点(去除偏移)
↓
计算 DFT(-30 到 +30 频率)
↓
存储系数(频率、振幅、相位)
↓
动画循环(60 fps):
-
旋转每个圆圈
-
求和所有圆圈位置
-
绘制当前点
-
描绘路径
技术栈
语言
:Swift 5.9+
框架
:
SwiftUI:现代声明式 UI
AppKit:原生 macOS 视图组件
Combine:响应式状态管理
Core Graphics:2D 渲染
Accelerate:已导入以备将来优化
平台
:macOS 13.0+
架构
:MVVM(模型-视图-视图模型)
系统要求
macOS 13.0(Ventura)或更高版本
Xcode 15.0 或更高版本(从源代码构建)
从源代码构建
克隆仓库
在 Xcode 中打开 Fourier-Transform.xcodeproj
选择目标设备(My Mac)
按 Cmd+R 构建并运行
实现细节
性能优化
DFT 计算最多 150 个采样点
频率范围限制为 -30 到 +30(最多 61 个系数)
圆圈数量可调(默认 10,最大 50)
路径轨迹限制为 1000 个点以防止内存问题
使用 Timer 的 60 fps 动画
动画循环
动画以 60 fps 运行,具有平滑循环:
时间增量:每帧 0.02 * animationSpeed
当时间超过 2π 时,它会环绕:time -= 2π
这创建了无缝的连续动画
坐标系统
绘图画布:标准 NSView 坐标(左下角原点)
动画画布:居中坐标系统,用于正确的圆圈渲染
路径描绘:从中心偏移以与圆圈端点对齐
致谢
本项目展示了几何与频率分析之间的美丽联系,展示了复杂形状如何从简单的旋转圆圈中浮现。
许可证
MIT 许可证 - 详见 LICENSE 文件