2017年10月18日水曜日

「シダの葉グラフィクス」

 2017-10-20 には、CASIO fx-CG50が国内発売される、との事で、カラーグラフィクスの表示できる高機能電卓向けに、「シダの葉グラフィクス」のプログラムを実行してみました。

シダの葉グラフィクスについては、つぎを御参照。

反復関数系 - wikipedia
https://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E9%96%A2%E6%95%B0%E7%B3%BB


当方、未だカラーグラフィクスの高機能電卓を持っていないので、HP Primeのシミュレータで動作するコードを作成してみました。
以下の版は、モノクログラフィクスでの表示ですが、RGB()のパラメタを少し変えるだけで、カラーになります。

プログラム「draw_shida.ppl」

//  title : draw_shida.ppl
//  begin : 2017-10-03 15:18:44 
//  

//  
width  := 320;
height := 240;

//  initial ooord
x := 0;
y := 0;
//  loop counte
cnt :=  30000;
//  working
tmp := 0;

xmin := -3;
xmax :=  5;
ymin :=  0;
ymax :=  8;

//  functions

//  f1()
f1()
BEGIN
  tmp := 0;
  y := 0.16*y;
  x := tmp;
END;

//  f1()
f2()
BEGIN
  tmp := 0.2*x  - 0.26*y;
  y := 0.23*x + 0.22*y + 1.6;
  x := tmp;
END;

//  f1()
f3()
BEGIN
  tmp := -0.15*x + 0.28*y;
  y :=  0.26*x + 0.24*y + 0.44;
  x := tmp;
END;

//  f1()
f4()
BEGIN
  tmp :=  0.85*x + 0.04*y;
  y :=  -0.04*x + 0.85*y + 1.6;
  x := tmp;
END;


//  MAIN 
EXPORT DRAW_SHIDA()
BEGIN
// Clean the screen (G0):
RECT();

  LOCAL  i, r, col;
  LOCAL  xp, yp;

  FOR i FROM 1 TO cnt DO
    r := random();
    IF (r < 0.01)               THEN f1(); col := RGB(0, 0, 0); END;
    IF (r >= 0.01 AND r < 0.07) THEN f2(); col := RGB(0, 0, 0); END;
    IF (r >= 0.07 AND r < 0.15) THEN f3(); col := RGB(0, 0, 0); END;
    IF (r >= 0.15)              THEN f4(); col := RGB(0, 0, 0); END;
    xp := (x-xmin)/(xmax-xmin)*width;
    yp := (y-ymin)/(ymax-ymin)*height;
    PIXON_P(yp, xp, col);
  END;


//  key wait loop
REPEAT UNTIL GETKEY() == -1;
FREEZE;

END; 
 
小汚いコードですが、 移植は簡単だと思います。

8 件のコメント:

Sentaro さんのコメント...

akatuki様、こんにちは!

毎度思いっきり出遅れております。(^^;

「シダの葉グラフィクス」をCASIO CGシリーズのアドインとして移植してみました。
HP-PPLとCの親和性の高さで移植はほぼそっくりそのままです。
計算式でグラフィックスは描けるのは毎度ながら興味深いですね。
面白ネタをいつもありがとうございます。(^^)

HP Prime実機での実行時間は26秒ほどですが、CG版はアドインで作成しているのでCG50では6秒ほどで描画終了です。
CG20では16秒とCG50よりも2倍以上遅いですが、オーバークロックすればCG50と同等速度になります。

http://pm.matrix.jp/CG_SHIDA.zip

akatuki さんのコメント...

Sentaro 様、今晩はです !

> 毎度思いっきり出遅れております。(^^;

いえいえ、当方こそ遅れており、毎度申し訳ない。

> 計算式でグラフィックスは描けるのは毎度ながら興味深いですね。

もっと面白いネタがあると良いのですが、なかなか ... 。

> HP Prime実機での実行時間は26秒ほどですが、CG版はアドインで作成しているのでCG50では6秒ほどで描画終了です。

お試し戴き、有難う御座居ます ! 実機が無いので、助かります。
Add-In,なかなかパワーが引き出せます。色指定部分を取り除けば (HP Primeのコードでも使っておりません)、C.BASICでもイケそうだと思います。その実行速度も気になりますネ。

> CG20では16秒とCG50よりも2倍以上遅いですが、オーバークロックすればCG50と同等速度になります。

ウーム、この速度差。やはりCG50ですね、現在は ... 。
オーバークロックAddin, 結構貢献しておりますネ。CG50に使えば「V-Max」(かなり古いネタ ...)です !

お試し戴き、有難う御座居ます !

Sentaro さんのコメント...

akatuki様、こんにちは!

>お試し戴き、有難う御座居ます ! 実機が無いので、助かります。
>Add-In,なかなかパワーが引き出せます。色指定部分を取り除けば (HP Primeのコードでも使っておりません)、C.BASICでもイケそうだと思います。その実行速度も気になりますネ。

HP Primeはエミュレータが速度互換ではないので、実機ではどれくらい?っていうのがよくわからないのが難点ですが、コネクトキットと本体以上の爆速エミュレータがよく出来ているので、実機が無くても同じことが出来るのがよいですね。(^^)

C.BasicのCGバージョンは開発途上なのでまだ動かせるレベルには無いのですが(汗)
モノクロfx-9860GIIのC.Basicで動作させるとCG50と同クロック(118MHz)で18秒ほどでした。
CG50の純正CasioBasicで動作させると一時間くらいかかりそうなので、早くC.Basicを動くようにせねばなりませんね。

akatuki さんのコメント...

Sentaro 様、早速のコメント、有難う御座居ます !

> C.BasicのCGバージョンは開発途上なのでまだ動かせるレベルには無いのですが(汗)

ウーム。やす親分からもお話がありました。
やはりカラー部分がメンドウな事になっているのでしょうか ?

> モノクロfx-9860GIIのC.Basicで動作させるとCG50と同クロック(118MHz)で18秒ほどでした。

おおっ、やはりパワーがありますネ ! 流石はC.Basicです !!

> CG50の純正CasioBasicで動作させると一時間くらいかかりそうなので、早くC.Basicを動くようにせねばなりませんね。

fx-CG50も登場して間もなく、恐らくは息の長い製品となりましょう。
C.Basicの対応も、焦る事はないのだと思います。少し時間を掛けて、しっかりしたものを作って戴きたく思います。
それだけに、期待しております !

やす (Krtyski) さんのコメント...

akatuki様

sentaro様が作成されたアドインや、それからCasio Basicに移植したプログラムで、実際にfx-CG50 で描画した画像を e-Gadgetにアップしました。こんな感じになるというサンプルです。

http://egadget.blog.fc2.com/blog-entry-621.html

ご興味があるかと思い、ご案内まで...

akatuki さんのコメント...

やす (Krtyski) 様、コメント多謝です !

> sentaro様が作成されたアドインや、それからCasio Basicに移植したプログラムで、実際にfx-CG50 で描画した画像を e-Gadgetにアップしました。こんな感じになるというサンプルです。
> http://egadget.blog.fc2.com/blog-entry-621.html

有難う御座居ます !
早速見に行きました。当方のコードでは、カラー部分は後で出来る様に、と。色指定は行なっておりませんでしたが、これは色指定も盛り込んでおりますネ。

いや、乾電池でカラーグラフィクス。しかも、結構高解像で、イイです !

やす (Krtyski) さんのコメント...

akatuki様

e-Gadgetで、HP Prime と fx-CG20 をお持ちの方 (iron2様) がシダの葉グラフィックスのカラー表示の比較をなさっています。

http://egadget.bbs.fc2.com/


そもそも、純正Casio Basicだと fx-CG20はあまりにも遅すぎてグラフィックスプログラミングをする気になれなかったのです。

ところが、今月に入ってから、C.Basic for CG (カラー精細液晶搭載の fx-CG50、fx-CG10/CG20) 用のアドイン版 Casio Basic を sentaro様がリリースされました。これを使えば、fx-CG50 だけでなく、お蔵入りになっていた fx-CG20 でも超高速グラフィックス表示が可能になります。

http://egadget.blog.fc2.com/blog-entry-630.html


この流れの中で、上記エントリーのコメント欄に iron2様お投稿があり、fx-CG20 でシダの葉グラフィックスが超高速で、HP Prime のPCエミュの1/10以内の速度が出たとのコメントがありました。

http://egadget.bbs.fc2.com/ (再掲)


akatuki様のソースをカラー化なさっておられます。


一応お知らせまで...

なお、C.Basic for CG の上梓により、いよいよ akatuki様が fx-CG50 を入手なさる好機が到来したように思われます(^^;


akatuki さんのコメント...

やす (Krtyski) 様、コメント、多謝です !

> ところが、今月に入ってから、C.Basic for CG (カラー精細液晶搭載の fx-CG50、fx-CG10/CG20) 用のアドイン版 Casio Basic を sentaro様がリリースされました。これを使えば、fx-CG50 だけでなく、お蔵入りになっていた fx-CG20 でも超高速グラフィックス表示が可能になります。
> http://egadget.blog.fc2.com/blog-entry-630.html

もうカラー版がリリースされたのですネ ! 遅ればせながら、お慶びを申し上げます !!

> この流れの中で、上記エントリーのコメント欄に iron2様お投稿があり、fx-CG20 でシダの葉グラフィックスが超高速で、HP Prime のPCエミュの1/10以内の速度が出たとのコメントがありました。

ゲーッ、そこまで早いのですか !
CG20でそこまで早いという事は、CG50ならば、より早いという具合ですネ !

> なお、C.Basic for CG の上梓により、いよいよ akatuki様が fx-CG50 を入手なさる好機が到来したように思われます(^^;

ウーム、そう言われるとツラい ... 。
いや、ホントに使ってみたいのです、fx-CG50。ただ、最近はプログラミングに対する意欲がなく、手持ちの高機能電卓では簡単な数表計算をする程度で、「高機能電卓の情報」というタイトルにふさわしい記事も書けず、申し訳ない次第。