2015年6月11日木曜日

グラフ電卓の愉しみ #1 - Sierpinski gaskets

プログラムで描くグラフィクスという事で、今回は「Sierpinski gaskets」を御紹介。

TI-83+のマニュアルには、Sierpinski gaskets を「乱数を使う手法」で描くプログラムが掲載されています。
Sierpinski gasketsは「再帰図形」なので、再帰処理によって描く事が出来るのですが、TI-83+には再帰処理のメカがないため、乱数を使う手法を例示していたのでした。

HP50GでRPLを使うと、再帰処理のプログラムを作成できます。今回も懲りずにSysRPLで書いたプログラムを示します (もちろん、UserRPLでも書けます)。

ユーザーが使える「スタック」を用意する事で、BASICでも再帰処理のプログラムは書けると思います。Androidの「BASIC !」には、スタックのメカが用意されておりました。3DSのプチコンにもスタックのメカがあるそうです(藤堂様、多謝 !)から、再帰処理プログラムの作成は可能です、多分。
(こちゃこちゃしてしまい、当方、着手出来ず。申し訳ない。loadがガンガン上がって、頭から湯気が出ております ...)

!NO CODE
!RPL

::
  '
  ::
    {
      LAM ax LAM ay LAM bx LAM by LAM cx LAM cy LAM d
    } BIND

    LAM d #0= ITE
    :: 
      LAM ax 80 LAM ay #- LAM bx 80 LAM by #- DRAWLINE#3
      LAM ax 80 LAM ay #- LAM cx 80 LAM cy #- DRAWLINE#3
      LAM bx 80 LAM by #- LAM cx 80 LAM cy #- DRAWLINE#3
    ;

    ::  
      LAM ax LAM ay 
      LAM ax LAM bx #+ #2/ LAM ay LAM by #+ #2/ 
      LAM ax LAM cx #+ #2/ LAM ay LAM cy #+ #2/ 
      LAM d #1- LAM sier EVAL

      LAM ax LAM bx #+ #2/ LAM ay LAM by #+ #2/ 
      LAM bx LAM by 
      LAM bx LAM cx #+ #2/ LAM by LAM cy #+ #2/ 
      LAM d #1- LAM sier EVAL

      LAM ax LAM cx #+ #2/ LAM ay LAM cy #+ #2/ 
      LAM bx LAM cx #+ #2/ LAM by LAM cy #+ #2/ 
      LAM cx LAM cy 
      LAM d #1- LAM sier EVAL
    ;
    ABND
  ;

  { LAM sier } BIND

  CLEARLCD
  TURNMENUOFF

  80 131 MAKEGROB
  GROB>GDISP
  TOGDISP

  65 80 25 1 105 1 4
  LAM sier EVAL
  SetDAsTemp

  ABND
;
@



0 件のコメント: