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

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。
/ v' ]" {, f6 L1 x' c/ N# F7 H+ x) @0 B3 c) }. N
这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。+ Z# X7 l$ n0 D; q( w' ?3 ^) Y
# C9 f. W- n0 h/ |6 q
先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。
# n2 H: M  X5 W; J; D1 ? 剪贴板01.jpg ) Y0 v) t" z2 v
8 a8 h- M( q$ T, D0 [4 v0 n
下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。$ i+ U0 v, p& o1 V' {+ F" q

; s' c+ O4 q" ~8 s
  1. #include "mbed.h"- Q$ \7 X3 ~+ p2 m  p$ s
  2. #include "LCD_DISCO_F746NG.h"" |( T9 A9 N/ k9 F9 \
  3. #include "TS_DISCO_F746NG.h", b* l4 `2 V2 s& m' V1 d# Q4 Q
  4. . I( N, r  K. G
  5. #define ITERATION  150
    ; N$ m  S: p3 Q& Z7 `0 v& W- P
  6. #define BAILOUT 4
    9 b; B2 \) r& \, W/ }' f( t- @9 H

  7. + f% J, T# c5 X. q* A3 s: b$ m
  8. LCD_DISCO_F746NG lcd;0 d4 @& @3 p' d# _" S6 C
  9. TS_DISCO_F746NG ts;' G4 H$ |9 R/ M+ Y. Y0 x3 X

  10. ; O2 }/ @7 q; \8 F" K# t- ^

  11. - d3 t1 p( k* h9 v
  12. uint16_t screen_width, screen_height;
    ) F; y0 A( @  \% _" z! F
  13. 0 ^0 i" {7 T$ M& o0 Z. T1 @5 C; @
  14. uint16_t calcMandelBrot(double x, double y)' `' C2 F( \2 N" i1 l/ I% q
  15. {3 y: x4 P$ x* c7 a
  16.     uint16_t i;
    3 x3 o9 R/ J4 J' C, e$ J. L' r/ r, }
  17.     double xx, yy, tx, ty;
    # G3 l: u) m: a; {: q: W
  18.    
    $ p" e$ Y& v1 w. G" z* m1 G
  19.     xx = yy = 0;
    6 l7 V6 N  h4 ~; w* R
  20.     i = 0;+ f) k1 f: j- ~5 K
  21.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))% i. e! j: Z0 C. o  f7 _# t* p
  22.     {+ Y8 m4 h6 j- b3 z
  23.         tx = xx*xx - yy*yy + x;
    , G2 |9 |' W  X; ^2 r7 e
  24.         ty = 2*xx*yy + y;7 A) v: b" b* u( j- b4 x
  25.         xx = tx;+ F5 I( O  `$ M4 i# h8 e, D; k" G
  26.         yy = ty;
    . {8 o  s8 o! T2 u
  27.         i++;
    ' C, e- o# t& F, i. X  ?
  28.     }
    % ^2 `( ~. W9 d; R9 h2 R4 l. v  c
  29.     return i;
    / |5 A7 C3 _! r5 S; k  Q6 y
  30. }$ N! Z+ M2 R. y! G9 B1 i( y! A

  31. 9 C6 {( Q: ]5 |* d
  32. void rectMandelBrot(double x1, double y1, double x2, double y2)
    5 y: p+ c  O) K* m6 p
  33. {
    . o0 A! o2 v4 e: l9 j
  34.     double dx, dy;
    $ h1 B: }/ l6 V: i& A. U9 E/ J8 p
  35.     uint16_t i, j;' v; R+ H+ X4 _9 s
  36.     uint32_t color;* M/ R' ?, o+ _1 I0 ?. W1 x8 A' K$ m0 }
  37.    
    + @: d8 p; |7 }, g% m4 S
  38.     dx = (x2 - x1)/screen_width;
    ) g8 @' f: b1 t3 K" g! \
  39.     dy = (y2 - y1)/screen_height;
    5 A* g: s' v6 V9 L
  40.     ' s) y: t6 O) u8 o1 |( R
  41.     for(i = 0; i < screen_width; i++)
    + e: g5 J9 c4 \4 d
  42.     {/ Q+ X- X! B" A/ A
  43.         for(j = 0; j < screen_height; j++)) c3 i/ Y3 P3 I
  44.         {
    6 r  d% E, e( D- l6 T; v1 ^
  45.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);  ?5 [0 m# M- V) v) _( @' U  d
  46.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));+ p5 V# P3 K. M0 a/ L4 V- f
  47.         }1 Y! ?: n* r+ l# l3 t
  48.     }
    , O6 D7 M! [; r; d
  49.    
    / k# ~4 O1 ^4 C4 x
  50. }2 w& R( p1 ?6 o9 x

  51.   h9 T! S4 K+ J& n" M
  52. int main(); x# o0 t9 g  R+ X2 {' H' x
  53. {6 X9 Y& G5 I/ i, C+ p
  54.     lcd.Clear(LCD_COLOR_BLACK);
    0 I7 {( _9 o( g0 m

  55. " x; s+ }) d) u( O. V1 H
  56.     screen_width = lcd.GetXSize() - 100;1 Z5 k: i0 s+ W4 X3 j7 ?! g& y. }
  57.     screen_height = lcd.GetYSize();- W6 e- W2 G# j( T% P7 M/ d/ p$ V# j
  58.   w, \. s. [& b* ~% @* ?& ^
  59.     rectMandelBrot(-2.5, -2, 2.5, 2);8 F! v% \0 U+ P* t# U  J; S
  60.     " I, R% c" P9 i# H
  61.     while(1)
    7 _# P, E. x% {; v* l7 Z
  62.     {
    1 {3 `1 x2 \7 j$ B; H* M
  63.     }. A5 M. m2 n3 q% D, f' r" O" P
  64. }
复制代码

+ E6 P$ R- f0 N 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
3 _! m1 o* [% k' \9 D3 F4 X666666大牛都用mbed建工程了,佩服

% {8 {9 J; G" x4 i$ r  }mbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!9 [/ H/ ?0 j2 Y$ Q5 @

所属标签

相似技术帖

官网相关资源

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