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

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。
' i5 \6 D; t' w  e: z
0 p& H/ |% U$ r$ y2 x' ^这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。  b: l4 f  J* E5 T
& }, c: l) S" Q9 R
先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。7 e5 g! N  I) v! l+ o2 F! W
剪贴板01.jpg 9 _9 ^) P6 ~$ g, N

3 M, n& j2 X) E1 `* }下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。
5 n4 g# g" D9 X' X, q3 s) a. W1 J  y$ s2 E/ B, G
  1. #include "mbed.h", D9 b% m* ?5 S* a- {& U$ n4 P0 E
  2. #include "LCD_DISCO_F746NG.h"6 U# I1 G& i& H! Y% }
  3. #include "TS_DISCO_F746NG.h"4 h; j0 D, w: O; d, R9 q

  4. 1 _- \3 k4 F3 z$ [. _- f# J
  5. #define ITERATION  1509 q! t) Q3 |( M: V+ T4 q+ {" Q
  6. #define BAILOUT 45 F. B' D9 a7 ~  D5 h9 o- u! q

  7. & s, P, i7 s2 X2 t7 [4 G1 W" G
  8. LCD_DISCO_F746NG lcd;
    9 E& w6 p- Z; S( ~
  9. TS_DISCO_F746NG ts;' z8 W1 _9 ?0 k: g+ ~
  10. , m2 G; }( _' p' i
  11. : G+ \9 P) D* ?: T- f: |! ~
  12. uint16_t screen_width, screen_height;
    , c- k( @+ e9 C9 d) p

  13. 4 O" b' M7 A) T( Q
  14. uint16_t calcMandelBrot(double x, double y)
    6 T( h* \- l+ C: R1 w
  15. {& F3 ^7 x8 N% R; R5 f, q
  16.     uint16_t i;( v0 A% p4 D9 Q: O7 U
  17.     double xx, yy, tx, ty;4 U/ _5 I6 u; a. O5 `! M! W0 P  N
  18.     7 P! ]& z0 \; e; \
  19.     xx = yy = 0;/ b9 {+ K+ `  `- V, v! ~
  20.     i = 0;. R: t( F! V3 p
  21.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))
    % [+ e+ y0 f8 b# ^$ Z" r& A
  22.     {
      T: m* v) m; i' l3 Z5 w! \0 f8 P
  23.         tx = xx*xx - yy*yy + x;
    ! \) q% i3 r; T9 e; N* k) d
  24.         ty = 2*xx*yy + y;  ~; h  i: ?" j. x6 I' Y( |
  25.         xx = tx;4 J3 ]5 N- D% W7 Y7 @
  26.         yy = ty;
    " t' ], R7 w$ X1 _
  27.         i++;
    9 R) Q( K0 J9 u5 L
  28.     }
      O. c0 H5 K! q$ `' X( t
  29.     return i;
      ?" H; D8 z" W0 I) U$ V0 x, m
  30. }' Z# A0 U! o" }, A# p

  31. . F: U6 s9 b& k& W0 f7 \  u  w) ?
  32. void rectMandelBrot(double x1, double y1, double x2, double y2)
    / A) r& `. r2 K/ X& E; u+ q
  33. {
    , y) r: ~9 j* ?& \" K- O
  34.     double dx, dy;& u- c- ?% u: X
  35.     uint16_t i, j;
    * d( R( r; M3 O6 _& {8 x5 @7 ?6 o
  36.     uint32_t color;
    ; m; O. U! P/ S. ^! G. L8 X8 p9 Y
  37.     & w( N8 h+ n  v9 `/ c0 J
  38.     dx = (x2 - x1)/screen_width;/ Y3 C3 S, \3 ^0 T1 a* T! Y
  39.     dy = (y2 - y1)/screen_height;
    1 t$ U+ Q8 W9 \
  40.     ' ?/ d  T4 C2 I6 I8 j, @/ t
  41.     for(i = 0; i < screen_width; i++)8 q; H' I1 @3 g( S
  42.     {
    ' @% k0 P! t/ a/ R& }$ l0 ~
  43.         for(j = 0; j < screen_height; j++)+ s: j+ J) O( F7 h! t! k( x- |0 y3 W
  44.         {
    1 I+ T" ]5 @& h
  45.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);' @5 n; F6 L! @1 V+ e, X
  46.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));1 x' W1 ]$ l' ]" T
  47.         }
    4 s7 d9 _5 D" ^
  48.     }$ i( ?) i1 I& t' q* v/ v- C. v8 ~
  49.    
    9 k- i+ c6 k+ E5 t8 W( `4 S! L) d1 M
  50. }$ ~6 T+ }. _* {4 _% K) H1 m8 u" X

  51. - a% R  ?, Q, m5 z/ F, z$ Y- t
  52. int main()
    $ w8 l. ?9 f8 S9 W2 {: t
  53. {: |) ?: N+ s1 b! p  C
  54.     lcd.Clear(LCD_COLOR_BLACK);
    $ ^6 t+ z. _% A4 q
  55. ( r2 |: s; M' m8 G. D/ Q
  56.     screen_width = lcd.GetXSize() - 100;
    ' h2 W9 A- K8 I; ^: U/ i6 Z. j* c
  57.     screen_height = lcd.GetYSize();
    0 f  s- n+ r4 }5 o& y6 x7 `) p) |% i
  58. ! Q: ^) R2 F1 v$ l
  59.     rectMandelBrot(-2.5, -2, 2.5, 2);, |: O/ j' d, M! d9 Y. W
  60.    
    . v$ u+ F4 P% e: h: U$ O4 M. f; W
  61.     while(1)
    4 m$ p* {: G4 e- V$ s1 a* E
  62.     {
    & z: L0 T: J8 {( `
  63.     }7 d9 @' k% L4 w1 m$ l) W
  64. }
复制代码
% ^( z) z2 B: P8 S9 v% J7 M8 y2 l
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
6 K0 K. V. x0 E7 L666666大牛都用mbed建工程了,佩服

, U7 b+ i1 l  L7 Gmbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!& O! n" R; s3 M; m1 o. Q( F6 |1 a
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版