|
我做的效果图如下:
代码很简单:
- Option Explicit
- Public Sub FXSJ_sjd()
- Dim abc, M, pc, ds&, arr%(), i&, j&, k&, SJD#(), r%
- Range("e2").Resize(1000000, 3).ClearContents
- abc = Range("b2:c4").Value
- M = Range("b8:c8").Value
- pc = Range("a14:b17").Value
- ds = Range("b20").Value
- ReDim arr%(1 To pc(4, 2))
- ReDim SJD#(1 To ds, 1 To 3)
- k = 0
- For i = 1 To 3
- For j = 1 To pc(i, 2)
- k = k + 1
- arr(k) = pc(i, 1)
- Next j
- Next i
- Randomize
- For i = 1 To ds
- r = LBound(arr) + Int(Rnd() * (UBound(arr) - LBound(arr) + 1))
- SJD(i, 1) = r
- SJD(i, 2) = (M(1, 1) + abc(arr(r), 1)) / 2 'x坐标
- SJD(i, 3) = (M(1, 2) + abc(arr(r), 2)) / 2 'y坐标
- M(1, 1) = SJD(i, 2)
- M(1, 2) = SJD(i, 3)
- Next i
- Range("e2").Resize(ds, 3).Value = SJD
- End Sub
复制代码
附件如下:
谢尔宾斯基三角形.zip
(685.76 KB, 下载次数: 21)
原理如下:
1.取三个固定点A、B、C,在平面内充当三角形的三个顶点,彼此不连线;
2.取一随机初始点M,由于我固定的平面直角区域为:x[-10,10]、y[-10,10],因此,该随机点初值不超过前面限定的20*20的平面范围;
3.按指定频次生成随机数1、2、3,生成总数为ds;
4.若生成1,则将M点向A点靠近距离的一半;若生成2,则将M点向B点靠近距离的一半;若生成3,则将M点向C点靠近距离的一半;
5.以当前点坐标更新M点坐标,不断迭代至ds次数。
|
|