数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 768|回复: 7

[STM] 数学之美:单片机绘制Julia集

[复制链接]
发表于 2024-9-4 19:39:05 | 显示全部楼层 |阅读模式
Julia集是一种美丽的数学图案,其绘制过程如下:
1、取复数c0,cs
2、变量c = c0
3、执行以下迭代N次:
          c = c * c + cs
4、若c的模小于1,则保存c0,反之舍弃
5、重复上述四步,找到所有满足条件的c0
可以看出,Julia集是由一些不定点构成的集合。当cs=0时,Julia集显然是圆形,因为模大于一的复数,在多次迭代后模越来越大,肯定不会小于一;反之模小于一的复数,多次平方后模越来越小,显然最后会小于一。当cs不为0,Julia集就很复杂,表现出极其特殊的数学特征,例如分形、对称性等。
Julia集的计算对于计算机来说是一个考验,如果我们要生成200*200大小的Julia集,那我们要对每个元素迭代至少10次,这样总共是20,0000次迭代,每次迭代都是复数(而且是小数)的加减乘除。楼主在STM32F4上实验,生成一张Julia集仍然十分费时。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +30 收起 理由
springvirus + 30

查看全部打赏

 楼主| 发表于 2024-9-4 19:40:22 | 显示全部楼层
以下内容放在主函数
for (float x = 0; x < 0.5; x += 0.17)
    {
        for (float y = -1; y < 1; y += 0.1)
        {
            Julia(x, y);
        }
    }
以下是子函数
void Julia(float real_c, float img_c)
{
    float comp_real, comp_img;
    float c_real, c_img;
    u8 flag;

    printf("cls BLACK\xff\xff\xff");

    for (u32 i = 0; i < 200*200; i++)
    {
        //初始数值生成
        flag = 1;
        float comp_real = (i % 200) / 100.0 - 1.0;
        float comp_img = (i / 200) / 100.0 - 1.0;

        //计算不动点
        float real = comp_real, img = comp_img;
        float img_, real_;

        for (u32 n = 0; n < 20; n++)
        {
            //Z = Z*Z + C
            //C = 0.4 + c * 1j

            real_ = 0;
            real_ += real * real;
            real_ -= img * img;
            real_ += real_c;

            img_ = 0;
            img_ += 2 * real * img;
            img_ += img_c;

            img = img_;
            real = real_;

            //|Z|>1 抛弃该点
            if(img_ * img_ + real_ * real_ > 1.0)
            {
                flag = 0;
                break;
            }
        }

        //Julia集绘制
        if (flag)
        {
            u32 x = comp_real * 100 + 120;
            u32 y = comp_img * 100 + 160;

            printf("line %d,%d,%d,%d,%d\xff\xff\xff", x, y, x, y, 255);
        }
    }
}
回复 支持 反对

使用道具 举报

发表于 2024-9-4 21:20:06 | 显示全部楼层
我X,看不懂啊看不懂...


二○二四年九月四日
回复 支持 反对

使用道具 举报

发表于 2024-9-5 15:49:46 | 显示全部楼层
之前用这个来测试过不同MCU的性能
回复 支持 反对

使用道具 举报

发表于 2024-9-5 20:26:05 | 显示全部楼层
明天拿H7试试看要多久。
回复 支持 反对

使用道具 举报

发表于 2024-9-7 20:55:52 | 显示全部楼层
有没有STM32计算圆周率的程序?看着屏幕上数字不停刷新应该也挺好玩的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-8 10:18:55 | 显示全部楼层
z2091981 发表于 2024-9-7 20:55
有没有STM32计算圆周率的程序?看着屏幕上数字不停刷新应该也挺好玩的。

弄个级数迭代就好了
回复 支持 反对

使用道具 举报

发表于 2024-9-12 16:54:49 | 显示全部楼层
效果不错,花纹漂亮!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-24 13:11 , Processed in 0.171600 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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