你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。

这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。

先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。
剪贴板01.jpg

下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。

  1. #include "mbed.h"
  2. #include "LCD_DISCO_F746NG.h"
  3. #include "TS_DISCO_F746NG.h"

  4. #define ITERATION  150
  5. #define BAILOUT 4

  6. LCD_DISCO_F746NG lcd;
  7. TS_DISCO_F746NG ts;


  8. uint16_t screen_width, screen_height;

  9. uint16_t calcMandelBrot(double x, double y)
  10. {
  11.     uint16_t i;
  12.     double xx, yy, tx, ty;
  13.    
  14.     xx = yy = 0;
  15.     i = 0;
  16.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))
  17.     {
  18.         tx = xx*xx - yy*yy + x;
  19.         ty = 2*xx*yy + y;
  20.         xx = tx;
  21.         yy = ty;
  22.         i++;
  23.     }
  24.     return i;
  25. }

  26. void rectMandelBrot(double x1, double y1, double x2, double y2)
  27. {
  28.     double dx, dy;
  29.     uint16_t i, j;
  30.     uint32_t color;
  31.    
  32.     dx = (x2 - x1)/screen_width;
  33.     dy = (y2 - y1)/screen_height;
  34.    
  35.     for(i = 0; i < screen_width; i++)
  36.     {
  37.         for(j = 0; j < screen_height; j++)
  38.         {
  39.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);
  40.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));
  41.         }
  42.     }
  43.    
  44. }

  45. int main()
  46. {
  47.     lcd.Clear(LCD_COLOR_BLACK);

  48.     screen_width = lcd.GetXSize() - 100;
  49.     screen_height = lcd.GetYSize();

  50.     rectMandelBrot(-2.5, -2, 2.5, 2);
  51.    
  52.     while(1)
  53.     {
  54.     }
  55. }
复制代码

fract.zip (1.33 MB, 下载次数: 42)
收藏 3 评论13 发布时间:2016-5-5 11:30

举报

13个回答
沐紫 回答时间:2016-5-5 13:40:52
谢谢楼主分享
jinglixixi 回答时间:2016-5-5 16:17:19
有意思
watershade 回答时间:2016-5-5 22:04:01
有趣呀,我这就去搜索一下。
suoma 回答时间:2016-5-5 22:46:51
谢谢分享学习一下
ychlucky 回答时间:2016-5-5 23:14:27
bu 不错  好东西
assssdz 回答时间:2016-11-5 01:47:53
andypanfan 回答时间:2016-11-8 09:25:32
anobodykey 回答时间:2016-11-8 10:13:07
感谢楼主分享
zengyi703-16313 回答时间:2016-11-17 07:14:15
谢楼主分享
wdshuang09 回答时间:2016-11-17 13:23:55
不错               
DLGG-308046 回答时间:2016-11-17 13:26:56
666666大牛都用mbed建工程了,佩服
shaoziyang 回答时间:2016-11-18 09:42:59
DLGG-308046 发表于 2016-11-17 13:26
666666大牛都用mbed建工程了,佩服

mbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版