CorelDraw插件开发教程(3):随机与循环

  • 0

CorelDraw插件开发教程(3):随机与循环

Category:COREL插件 Tags : 

 刘肖健创意之代码 9月23日

CorelDraw插件开发教程(3):随机与循环

刘肖健

浙江工业大学 工业设计研究院

 

4.   随机与循环

编程的最大优势就是高效完成一些有规律的重复性工作。这节用一个案例来展示这种效率。

我们马上要编写的案例的功能是:在当前页面随机画100个圆。“随机”的意思是:1)圆心位置随机;2)圆半径随机;3)圆的填充色随机。

4.1  随机函数

先来认识一个VBA自带的随机函数。这个函数非常简单:

 

Rnd

 

它可以不带参数运行,运行结果是得到一个0~1之间的随机数。Rnd函数更具体的用法可以查阅VBA帮助文档。

 

Sub GenerateRndNumber ()

Dim c As Double

c = Rnd

MsgBox c

End Sub

 

上面子程序定义了一个实数c,然后生成一个0~1之间的随机数为c赋值,最后再用对话框把c的值显示出来看一看。由于函数Rnd每次运行生成的随机数都是不一样的,对话框上显示出来数也是每次都不同的:

如果我们想生成的随机数不是0~1之间,而是0~5之间,则代码改为:

 

Sub GenerateRndNumber ()

Dim c As Double

c = 5 * Rnd  ‘ 生成0~5之间的随机数

MsgBox c

End Sub

 

如果想生成5~8之间的随机数,则代码改为:

 

Sub GenerateRndNumber ()

Dim c As Double

c = 5 + (8-5) * Rnd  ‘ 生成5~8之间的随机数

MsgBox c

End Sub

 

不失一般性,如果想生成x~y之间的随机数,则代码改为:

 

Sub GenerateRndNumber ()

Dim c As Double

Dim x as Double, y As Double

x=14

y=21

c = x + (y-x) * Rnd  ‘ 生成x~y之间的随机数

MsgBox c

End Sub

 

上述子程序会得到14~21之间的随机数。

4.2  循环

循环的作用是把一个动作重复做N次,但是有可能每次动作的内容都略有不同,就像我们要画N个圆,每个圆的位置、半径、色彩都不一样。

以下子程序会依次弹出对话框,显示1~10的平方根。

 

Sub SquareRoot()

Dim i As Integer

Dim c As Double

For i = 1 To 10   ‘循环开始

c = Sqr(i)

MsgBox i& “的平方根=” & c

Next    ‘循环结束

End Sub

 

程序执行过程中会显示10次对话框,下面这个是第5次的显示结果:

For循环语句的用法和求根函数Sqr()的用法细节,请自行查阅VBA帮助文档。

4.3  画100个随机圆

画100个随机圆的子程序如下:

 

Sub Draw100Circles()

Dim i As Integer

Dim s1 As Shape

Dim x As Double, y As Double, r As Double

For i = 1 To 100

x =ActivePage.LeftX + Rnd * ActivePage.SizeWidth ‘圆心x坐标

y =ActivePage.BottomY + Rnd * ActivePage.SizeHeight ‘圆心y坐标

r = 0.02 *ActivePage.SizeWidth + Rnd * (0.08 * ActivePage.SizeWidth)

Set s1 =ActiveLayer.CreateEllipse2(x, y, r, r, 90#, 90#, False)

s1.Fill.UniformColor.RGBAssign Rnd * 255, Rnd * 255, Rnd * 255  ‘填色

Next

End Sub

 

循环里首先算出圆心坐标位置,赋给变量x和y;然后算出半径,赋给变量r;然后用x、y、r画圆;最后为圆随机填充RGB色。

上述代码的运行结果如下图所示:

代码的几处简要解释:

1)ActivePage.LeftX和ActivePage.BottomY为当前页面左边界的x坐标值和下边界的y坐标值,ActivePage.SizeWidth和ActivePage.SizeHeight为当前页面的宽度和高度。x和y的计算方法可以确保圆心在页面内。

2)半径r的值由两项组成:第一项是最小值,为0.02倍页宽,因为半径不能为零,否则会出错;第二项是增量,在0.08倍页宽范围内随机变动。因此r在0.02~0.1页面宽度之间随机变化。

3)填充色为RGB色;RGB的三个色彩分量在0~255之间变化,用Rnd*255可确保RGB空间的每一种色彩都有可能出现。Rnd是个函数,每次运行结果都不同,因此循环中最后一句里的三个Rnd*255的值是不一样的。

4)x、y、r都是数值变量,可以直接用等号赋值;s1为对象(Shape类型的对象),不能直接用等号,必须前面加Set关键字进行赋值(其实没什么区别)。相关的VB语法细节可以查阅帮助文档。

上图有些圆超出了页面边界,但它们的圆心仍在页面内。

http://mip.i3geek.com

Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。