程序绘制美丽的花

时间:2022-05-18 21:42:13 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
程序绘制美丽的花

马致明

新疆师范大学数理信息学院

花以其独具的自然美使人赏心悦目,因此也就成了真、善、美的化身,理想、希望、幸福的象征!生活中有了花就有了灵气,程序中若能“开”出花来,那就多了几份神奇!本文介绍的这段程序不仅能绘出形状各异的花朵,而且还可以用静态、动态和旋转三种不同的效果呈现。

一、基本思想

数学中有三叶玫瑰线(方程为ρ=Asin(3β)、四叶玫瑰线(方程为ρ=Asin(2β)等曲线,这些曲线的极坐标方程很简单,基本形式均为:ρ=Asin(nβ),即任意一点的极半径ρ是角度β的函数;其直角坐标方程为:x=Asin(nβ)cos(β)y =Asin(nβ)sin(β)

在程序中控制角度β使其从0变化到2π描出极半径ρ所对应的点,这样就可以绘出漂亮的玫瑰线;当然,n不同所描出的曲线的形状也就不同。

出于好奇,笔者又编写了一些方程,如:ρ=A[sin(nβ)3 sin(3nβ)]ρ=Asin(nβ)exp(-kβ)等等,结果发现每种方程都能绘出形状各异的漂亮曲线。今介绍其中的六种,暂命名为:玫瑰线、玫瑰环、万寿菊、大丽花、蓬蒿菊、令箭荷花。

二、程序实现

1.算法简介

如果在某事件中用循环控制角度β使其从0变化到2π则绘出的花是静态的。如果在计时器事件中每次让β增加一定的值,并画出对应的线段,则绘出的花是动态的。如果在计时器事件中加一个时间因子,即方程变为:x=Asin(nβ)cos(β+t)y =Asin(nβ)sin(β+t);不断改变t的值,并对每一个t绘出β02π所对应的图形,则绘出的花就会旋转起来。如果在端点之间画线段,则绘出的花是空心的;如果从中心画线段至端点,则绘出的花是实心的。 2.界面设计

启动VB6.0,添加如下控件:用于选择花型的组合框Combo1(将前面的六种花名作为列表项)用于选择效果的组合框Combo2(列表内容依次为:静态、动态和旋转)用于改变n的滚动条HScroll1用于显示n的标签Label1、用于绘制动态效果的计时器Timer1、用于绘制旋转效果的计时器Timer2 3.编写代码

Dim k%, n!, Xo!, Yo!, A!, B!, t!, m! Sub Draw(Optional t As Single = 0) If k = 3 Then '大丽花

r = A * Sin(n * B) * Exp(-B / 20)

ElseIf k Mod 3 = 2 Then '万寿菊和令箭荷花 r = A * (Sin(n * B) + 3 * Sin(3 * n * B)) Else '玫瑰线、玫瑰环、蓬蒿菊 r = A * Sin(n * B) End If

x = r * Cos(B + t) '极坐标的直角坐标 y = r * Sin(B + t)


If k <= 3 Then '从端点画线:空心 Me.Line -(Xo + x, Yo + y)

Else '从窗口中心画线:实心 Me.Line (Xo, Yo)-(Xo + x, Yo + y) End If End Sub

Private Sub Form_Load()

Me.Move 0, 0, Screen.Width, Screen.Height Combo2.ListIndex = 2 '默认效果为静态 Combo1.ListIndex = 0 '默认花型为玫瑰线 End Sub

Private Sub Combo1_Click() '变换花型

HScroll1.Min = IIf(Combo1.ListIndex = 1, 15, 1) HScroll1.Max = IIf(Combo1.ListIndex = 1, 49, 10) HScroll1.Value = IIf(Combo1.ListIndex = 1, 31, 10) HScroll1_Change End Sub

Private Sub Combo2_Click() '变换效果 HScroll1_Change End Sub

Private Sub HScroll1_Change()

Xo = Me.ScaleWidth / 2 '窗口中心位置 Yo = Me.ScaleHeight / 2 k = Combo1.ListIndex

n = HScroll1 / IIf(k = 1, 10, 1) Label1.Caption = "N=" & n

A = Yo * IIf(k Mod 3 = 2, 0.25, 0.75) '方程中的A m = IIf(k = 3, 6, IIf(k = 1, 10 / n, 1)) t = 0: B = 0 Me.Cls

Me.ForeColor = QBColor(Rnd * 6 + 9)

Me.PSet (Xo, Yo), vbBlack '将绘图点置于窗口中心 Timer1.Enabled = False Timer2.Enabled = False

Select Case Combo2.ListIndex Case 0 '静态

For B = 0 To 6.28 * m Step 0.01 Draw '每次画一部分

Next B '循环结束后画出完整花型 Case 1 '动态

Timer1.Enabled = True


Case 2 '旋转

Timer2.Enabled = True End Select End Sub

Private Sub Timer1_Timer() '动态 B = B + 0.01 '不断变换角度 Draw '每次画一部分 End Sub

Private Sub Timer2_Timer() '旋转 t = t + 0.02 '时间因子

Me.Cls '清除前一次绘出的花型

Me.PSet (Xo, Yo) '将绘图点先置于窗口中心 For B = 0 To 6.28 * m Step 0.01 Draw t '每次画一部分

Next B '循环结束后画出完整花型 End Sub

三.运行

程序运行时,组合框和滚动条的不同组合可产生出近百种不同形状的花型,细心的读者可以一一去试;感兴趣的话还可以自己编写一些类似的方程,加在本文的代码中,相信有更多奇异的花朵在向你召唤。




本文来源:https://www.wddqw.com/doc/d997e41e964bcf84b9d57be5.html