ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5722|回复: 7

[原创] 美丽的数学 之 彩色的灌木丛

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-14 13:02 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他结构和算法
本帖最后由 lee1892 于 2013-11-14 17:18 编辑

这是像花还是像灌木丛多些?

花还是灌木丛呢.gif
这样子是不是很有立体感呀

灌木丛.PNG

哈哈,这个实在是太有意思啦!看后面的,告诉你怎么变化~
彩云.PNG
彩云2.PNG
风车.PNG

追加一个带参数操作界面的附件:
界面.PNG

美丽的数学系列的前一个帖子:雪花




补充内容 (2013-12-14 14:36):
感兴趣的去看这个帖子:美丽的数学 之 奇妙的分形

花还是灌木丛呢 by Lee1892.rar

13.66 KB, 下载次数: 211

花还是灌木丛呢_阴影 by Lee1892.rar

14.26 KB, 下载次数: 175

花还是灌木丛呢_阴影_带参数操作 by Lee1892.rar

55.96 KB, 下载次数: 247

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-14 13:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
支持原创分享!图表制作的精美。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-14 14:11 | 显示全部楼层
在代码里有一个生成子节点的过程,稍改动会生成不同的图案,非常有趣:

1、像不像窗花:
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 4 '* nPlus <- 不改变方向
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 4 * nPlus
        .Next = nNext
    End With
End Sub[/code]
窗花.PNG

2、另一种灌木丛?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 4 * nPlus
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 4 '* nPlus <- 不改变方向
        .Next = nNext
    End With
End Sub[/code]
另一种灌木.PNG

3、钩子?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 4 '* nPlus <- 不改变方向
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 4 '* nPlus <- 不改变方向
        .Next = nNext
    End With
End Sub[/code]
钩子?.PNG

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-14 14:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
还可以在这个生成子节点的过程,更改不同的角度,得到不同的图案,有意思极了

先把 输出过程 改动一下:
[code=vb]Private Sub Output(ByVal iIndex%, Optional bWait As Boolean = False)
    Dim i&, n&
    i = 1
    Do
        With arrVertex(i)
            arrOutput(n, 0) = .X: arrOutput(n, 1) = .Y: i = .Next
        End With
        n = n + 1
    Loop Until i = 0 '<- 这里改为 0 ,去掉末尾的那个点
    Range("A2").Offset(0, 2 * (7 - iIndex)).Resize(UBound(arrOutput) + 1, 2) = arrOutput
    If bWait Then WaitMoment 0.2
End Sub[/code]
[code=vb]Private Sub cmdData_Click()[/code]
里有 8 段 With,可以只留第 1 个 和 第 5 个,只观察生成一个图案的情况。

纵横坐标调整的时候,保持比例一致。比如我就都调成 -2~2。

1、像不像云?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 3 '* nPlus <-不改变方向,转60度
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 9 '* nPlus <- 不改变方向,转20度
        .Next = nNext
    End With
End Sub[/code]
云.PNG

2、这个像蝎子?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 3 * nPlus ' 转 60度
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 9 * nPlus ' 转20度
        .Next = nNext
    End With
End Sub[/code]

蝎子?.PNG


3、海浪?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 4 '* nPlus
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 20 '* nPlus
        .Next = nNext
    End With
End Sub[/code]
海浪?.PNG

4、古怪的植物?
[code=vb]Private Sub GetChildren(ByVal nRoot&, ByVal iLayer%, ByVal nPlus%)
    Dim nChild&, nNext&, dAngle#, dLength#, dX#, dY#
    nChild = nRoot + 2 ^ (iLayer - 1)
    With arrVertex(nRoot)
        nNext = .Next: .Next = nChild
        .Length = .Length * Sqr(2) / 2: dLength = .Length
        dAngle = .Angle: .Angle = .Angle - Pi / 4 * nPlus
        dX = .X + .Length * Cos(.Angle)
        dY = .Y + .Length * Sin(.Angle)
    End With
    With arrVertex(nChild)
        .X = dX: .Y = dY: .Length = dLength: .Angle = dAngle + Pi / 20 '* nPlus
        .Next = nNext
    End With
End Sub[/code]
古怪的植物?.PNG

TA的精华主题

TA的得分主题

发表于 2013-11-16 22:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-19 09:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-13 13:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-14 10:33 | 显示全部楼层
支持原创分享!图表制作的精美。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 01:17 , Processed in 0.046383 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表