[Dino爱编程]如何绘制Lissajous曲线的动画演示
小程序下载:击下载此文件: 绘图小程序Lissajous.exe
以上是 Lissajous 曲线的动画。大家看一看,像不像一个网壳结构。
一条数学公式生成一个斜交网格 Lissajous 曲线 ,数学的优雅。
介绍以下一个著名的斜交网格结构,也是出于WSP公司之手 HEARST TOWER
【Dino爱编程】系列有时候会分享一些美妙的数学曲线,有时侯一些数学曲线可以直接展示数学之美,以下的就是一个最好的例子,之前讲过乘法圆曲线(这里是链接:http://dinochen.com/article.asp?id=277)。以上编程的灵感来源于国内一个数学知名博主的博客 matrix67.com, 这里面有丰富的数学内容,大家有兴趣可以去逛逛。
Lissajous曲线,双叫做示波器曲线,可以通过示波器进行生成的。如下图所示。
曲线上点坐标 px py,它的参数方程 x = sin(m · t), y = sin(n · t) ,其中,m与n是定量参数。
通过随着 t 值 的增加,平面上将会画出一系列漂亮的曲线。法国物理学家 Jules Antoine Lissajous
曾在 1857 年研究过这类曲线,因此人们把它叫做 Lissajous 曲线。
matrix67.com在他的博客上绘制了曲线, http://www.matrix67.com/blog/archives/6947
那么参考matrix67的方法,我通过lazarus编程绘制现 m = 13, n = 18 时的 Lissajous 曲线
动画如下图所示。程序界面如下图所示。
以下是主要的源代码:由于曲线需要动画显示,所以采用了 timer功能。
procedure TForm1.tmr1Timer(Sender: TObject);
var di:double;
begin
di:=200;
px:=di*sin(m*tt);
py:=di*sin(n*tt);
form1.draw_image;
tt:=tt+dt;
end;
procedure tform1.draw_image;
begin
img1.Canvas.Pen.Color:=RGB(51,155,223);
img1.Canvas.Pen.Width:=2;
ax:=Round(img1.Width/2+px);
ay:=Round(img1.Height/2-py);
img1.Canvas.Pen.Mode:=pmNot;
img1.Canvas.Ellipse(oldx-5,oldy-5,oldx+5,oldy+5);
if (oldx<>0) and (oldy<>0) then
begin
img1.Canvas.Pen.Mode:=pmcopy;
img1.Canvas.MoveTo(oldx,oldy);
img1.Canvas.LineTo(ax,ay);
end;
img1.Canvas.Pen.Mode:=pmNot;
img1.Canvas.Ellipse(ax-5,ay-5,ax+5,ay+5);
oldx:=ax;
oldy:=ay;
end;
以上代码非常有用,有一张动态曲线的展示,如滞回曲线,振动曲线等一般都是这么编程显示出来的。
以上是【Dino爱编程】的纯技术分享。