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

在STM32F746DISC上显示分形

[复制链接]
shaoziyang 发布时间:2016-5-5 11:30
STM32F746DISC开发板上有一个很大的液晶屏,可以显示各种图像。下面展示了用开发板显示奇妙的分形图形。# B3 d( }  C9 L+ U2 N& T/ ]
; e- O) I) }- K9 n4 M# |# r
这里不介绍分形的理论了,大家可以网上搜索看看,它的计算公式是 Z = Z*Z + C,反复迭代计算,根据发散速度标明各点的颜色。
# N" S3 B2 _2 q( u. _6 h% X7 U7 J& W2 g; O  s) ~
先看看实际效果,手机拍出来有些条纹,实际是没有的,液晶屏上显示的效果其实还不错。$ r) K' D- ^& ^6 E1 I
剪贴板01.jpg 8 B. w. s9 E, S3 y1 `- m# F
: T& p1 H9 @9 W) g* t
下面是的程序代码。目前只实现了基本的显示,下一步将增加放大、缩小、改变颜色等功能。* q0 W) R& K; z$ [9 Z

3 }# ~' T, |4 ^* o9 k# v9 [
  1. #include "mbed.h"% v1 _7 A; v5 a7 S: V+ N1 {; J+ p
  2. #include "LCD_DISCO_F746NG.h"+ \8 I' v+ B% p$ M" S& r9 z
  3. #include "TS_DISCO_F746NG.h"2 \& c* M( B; [
  4. * w8 @3 T3 v6 m8 Q; [) W* }4 o
  5. #define ITERATION  150- B$ p% x# D6 R, g0 i! ?! h/ X: }
  6. #define BAILOUT 4
    ' u- a/ N' H* y, }; L( D
  7. 2 Y: q+ [/ y5 t, `9 {+ E; n
  8. LCD_DISCO_F746NG lcd;  n& ^" k( i/ S6 K8 S3 C7 a
  9. TS_DISCO_F746NG ts;
    1 k& [3 e) `4 h  m2 I& d# S

  10. . m/ m2 w1 e# B9 j$ Q

  11. - p2 o+ `/ \( k" s
  12. uint16_t screen_width, screen_height;! v3 v2 b' O& G$ m8 n

  13. ) Q* W+ C7 _$ k, U9 @" [: |4 Q
  14. uint16_t calcMandelBrot(double x, double y)
    # t1 k( T' b& z* [2 r4 b9 w; w
  15. {
    . ~$ A% b: t, s3 d8 k. T- {
  16.     uint16_t i;
    + ~/ N' e! R$ S/ m. |+ K2 h
  17.     double xx, yy, tx, ty;2 R  N* V+ T% {$ Y9 o
  18.     $ V' j* L8 m* |& b
  19.     xx = yy = 0;0 \& H/ e5 C( `8 d9 ^
  20.     i = 0;
    ) E+ Z4 [. X( {; h
  21.     while((i < ITERATION) && ((xx*xx + yy*yy) < BAILOUT))& Z7 C2 P) p& N9 s9 @4 ?
  22.     {% u% c; o1 M# J: B* D! J
  23.         tx = xx*xx - yy*yy + x;
    # Q7 N% x2 R8 v) J4 c9 c
  24.         ty = 2*xx*yy + y;( F4 s: J  C: f/ \3 Z3 ?" n# m4 k
  25.         xx = tx;: h" q2 l) F5 D; U. w, ^
  26.         yy = ty;* Y/ O9 X& @1 K: t/ H- X
  27.         i++;
    ( Z5 \& n0 C$ e& K. J  ^5 c9 b
  28.     }7 ^- Q, C* R! u
  29.     return i;& V/ B2 p7 u% V' A3 _
  30. }* L% r# `. D9 L1 `, G
  31. 7 f* c0 N$ j6 Q# G
  32. void rectMandelBrot(double x1, double y1, double x2, double y2)
    * J7 h3 A, k! g
  33. {
      A: U3 f8 _: \$ f
  34.     double dx, dy;
    ( r! P& @7 f5 I. K7 C) c
  35.     uint16_t i, j;1 `. {  `' s9 _8 P1 r! s+ _
  36.     uint32_t color;
    ' E8 k  S: X- M: e
  37.     - n6 V3 w* b; t
  38.     dx = (x2 - x1)/screen_width;0 l. D2 U2 z; R  o
  39.     dy = (y2 - y1)/screen_height;1 Q2 k% _6 V1 A5 T
  40.    
    # J- u6 F$ ~: x' ^. ?( @- C. |, R: w
  41.     for(i = 0; i < screen_width; i++)% p  p3 J8 Y1 r# e; I2 a
  42.     {7 W5 i3 M: Y. \
  43.         for(j = 0; j < screen_height; j++)
    % Q. D5 |- R* C
  44.         {- K* i" d/ t9 v3 n" l+ z
  45.             color = calcMandelBrot(x1 + dx*i, y1 + dy*j);
    ; |4 q, ?' g1 U2 ~/ u( }, G
  46.             lcd.DrawPixel(i, j, 0xFF000000 | (color<<2) | (color <<4));
    : V5 F1 z+ q- a9 |7 d. }
  47.         }
    0 F) P0 @# A! P
  48.     }2 w7 k  O6 B6 R0 B6 h" ]
  49.    
    / i8 V$ ~! }5 P
  50. }
    8 ^& i* T9 `- l4 [' S. `3 v& o

  51. # @. e% U4 v$ z  a
  52. int main()* H. ^4 j# z7 F2 A7 s+ y
  53. {
    7 O$ t& }" D) o0 n
  54.     lcd.Clear(LCD_COLOR_BLACK);
    ) h) R* Q% e* D: H  W* W2 \4 D
  55. % ]* J8 ^7 `7 P' l0 I( x# q
  56.     screen_width = lcd.GetXSize() - 100;( @1 T8 W3 J% V9 a* q8 ^) ^" k
  57.     screen_height = lcd.GetYSize();# y5 `8 Z/ b: b, w$ v2 x5 Y  a
  58. ( O. ]9 i' _8 Z3 v6 Y
  59.     rectMandelBrot(-2.5, -2, 2.5, 2);4 G* [$ P0 b! L
  60.     * ~5 K% T" v1 f
  61.     while(1)8 }" a; A$ H+ i2 Q% l) H4 s' ~) M( h
  62.     {
    1 H) V2 j* ]' C4 V! @
  63.     }% k  g3 W( z, L8 r+ W
  64. }
复制代码

2 `- z) d7 I" N- \4 ~0 A1 v 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/ u8 U% m+ B! y
666666大牛都用mbed建工程了,佩服
; `; N* E9 l5 }  h
mbed好处是简单,缺点是占用空间较大。
zbber 回答时间:2016-11-18 10:11:53
不错,真是太棒了!1 ~# @9 r& F3 a+ u& ]
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版