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

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。
- z2 b5 I7 [4 {- m
4 q" i  {: I' b  ?这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。3 V  q' u( }8 A) p8 x2 K, N
! K% R1 I- |8 i3 a& N; u  E
先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。
$ [# _: h% C6 o! @- } 剪贴板01.jpg
- c, y% y9 e0 s+ x6 u# R
* G* D# W4 ~2 Q7 Z下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。
" I8 O# O) Z( e7 R7 F# S1 s8 B5 f7 Q: b% B* s, [
  1. #include "mbed.h"
    % k* T9 e. z4 I
  2. #include "LCD_DISCO_F746NG.h"
    1 k2 k) n) S/ U; m* {
  3. #include "TS_DISCO_F746NG.h"2 g9 _/ s1 n0 r0 H  S1 O1 j

  4. % D0 ^; M8 v" @. i$ v; l
  5. #define ITERATION  150
    , y$ ^  ~" R* A( ~1 _
  6. #define BAILOUT 4
    " U- o5 O! n& F; [2 x; n% m

  7. ( L( q) l2 }7 M; Z
  8. LCD_DISCO_F746NG lcd;
    4 j+ c, y2 {" L* [1 t
  9. TS_DISCO_F746NG ts;! V6 ~' s; w" T; L5 \1 z$ {
  10. * j- u: W' q; @" [9 ^8 I7 O

  11. 6 Z: O% z; E; m! m( d
  12. uint16_t screen_width, screen_height;
    ; y9 v5 {# G, u: l  v

  13. * @5 x( [3 T4 t9 q  m
  14. uint16_t calcMandelBrot(double x, double y)
      }$ u# W6 c' b' b7 w# G5 C
  15. {
    / l; a: n: B' D* r) e. w8 U. R, h
  16.     uint16_t i;  ?1 D% J  a: T5 y
  17.     double xx, yy, tx, ty;
    ' V: W" ]2 P9 d" {3 N) P3 a
  18.     & a2 q+ [* O/ M+ h
  19.     xx = yy = 0;9 H7 i8 N4 n, }5 M
  20.     i = 0;7 s+ Y9 _, L' B6 B
  21.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))  S( {0 e3 q9 M: G. E
  22.     {
    ! h- J+ E% |1 w0 X7 a) c" M+ o
  23.         tx = xx*xx - yy*yy + x;. a- X) M" P9 i
  24.         ty = 2*xx*yy + y;
      V! u* ]0 D) Y
  25.         xx = tx;4 w' h2 t: g4 [, d- Z6 r
  26.         yy = ty;! |( x& j* w3 o) E) O7 w  l9 z
  27.         i++;
    0 L) n" y9 Y7 Y% i9 S0 T
  28.     }  i1 P$ C7 Q% J
  29.     return i;  n- V5 m9 R4 f/ A: F/ T/ g% |: ?' e
  30. }
    2 B- c( m$ _& O
  31. * b$ A, P) A8 H5 |# K
  32. void rectMandelBrot(double x1, double y1, double x2, double y2)
    7 w$ U: A: C7 g+ N: M7 h
  33. {7 [) ]3 f- q# B, E
  34.     double dx, dy;
    8 [* [* E3 E& o6 d( `8 d
  35.     uint16_t i, j;8 R9 x2 `. _) F6 P( R" j' Z
  36.     uint32_t color;3 Q/ I; j: x' I: ]
  37.    
    ( ^, N4 P8 |, h# a
  38.     dx = (x2 - x1)/screen_width;
    + r1 q8 N# Y% a' I
  39.     dy = (y2 - y1)/screen_height;
    . ~+ {1 j8 Y0 }: m8 M: P
  40.    
    & x* D" r. S5 T% L# ]
  41.     for(i = 0; i < screen_width; i++)
    " i  b8 h; U/ Y9 E, q
  42.     {! _" b6 ~9 t$ U3 [. u. ~4 w4 R' y4 R
  43.         for(j = 0; j < screen_height; j++)! T5 ]0 K3 x% @) J; o
  44.         {/ K' b0 h+ k$ d" c1 E) [9 L
  45.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);
    9 Z. i. j* A) i
  46.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));. s+ V  I8 M, ^; C9 I& @, {" _
  47.         }
    2 q- S' K! U" H. B5 J& i
  48.     }9 Y1 |: S: ]9 b3 G5 K: U
  49.    
    , o/ e2 A  C: V# Q# g0 N! s
  50. }; @4 Y/ O& Q! Q

  51. - X  `6 X0 r, p' O- \
  52. int main()
    : J/ U3 L. W9 p6 e
  53. {
    7 [/ J- V! N, E- V( d7 V) `, y1 o
  54.     lcd.Clear(LCD_COLOR_BLACK);
    0 G. r4 m* Q+ w7 H$ M7 T8 k# k- y) m' Y

  55. , _5 Q" m& ~4 ~/ T: z1 a  _) N
  56.     screen_width = lcd.GetXSize() - 100;
    $ P0 N" I" ~# h4 n+ j, {
  57.     screen_height = lcd.GetYSize();
    ' P% `- |8 [! x9 |

  58. 1 d- I3 F' Z9 |1 @
  59.     rectMandelBrot(-2.5, -2, 2.5, 2);6 s+ @4 H& x  g" ^- a" D- J% M9 C
  60.     " K. U$ R6 }7 f0 m
  61.     while(1)
    8 Y* Z3 J' h- @* o7 s& l( r
  62.     {( t, k4 f, t1 _) w% _' F( u4 x! ^
  63.     }
    6 f% R- _7 ^4 D! l8 _+ Z' S6 `
  64. }
复制代码
7 i0 b& i, n: X$ h* _2 I6 J
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
9 o) x5 y4 G4 ?: v) [: W666666大牛都用mbed建工程了,佩服
7 R4 U2 H$ E: \. ]
mbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!# B( {. x, Z5 c* s! |

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版