2025年10月30日木曜日

生産終了の fx-CG50 に アプデが登場しました

 既に fx-CG100 が発売、fx-CG50 は生産終了となっておりますが、珍しい事に、fx-CG50 のアプデが登場しておりました。

ref. fx-CG50 アプデ
https://support.casio.jp/download.php?cid=004&pid=2126

- バージョン履歴
(2025年10月29日)  fx-CG50 OSアップデーター(⇒Version 3.81)及び関連アプリソフトの公開 (Windows/Mac OS)

- バージョンアップ内容
  (Ver3.80.XX1X → Ver3.81)
    軽微な修正

との事で、内部的な不具合の修正、という具合のようです。

これで casioplot.getkey() とかが追加になれば興味深いのですが、マニュアルの更新はなさそうですから、機能面は変更なし、として差し支えなさそう。
他方で、OS に lock を掛ける、というイヤな更新もあるかも知れません。

確か、XCAS は、OS 3.7 では問題なしだったものの、3.8 になって、導入が困難になったそうで、3.7 へ roll back する必要があると記されておりました。
今般の 3.81 は、OS の downgrade を阻止する、そんなイヤなメカが入っていたりしないか、などと思う所。
(当方、未だに 3.40 だったりします)
 
で、XCAS, PythonExtra を使っていない皆さん、おそらく最後のアプデが提供されましたので、是非ともご利用戴きたく ... !

突然のアプデ襲来に驚いてしまい、出だしはこんな事で始めましたが、先日から、チョット手遊びで、こんなコードを作っておりました。

四角形の中に少し傾けた線を引き、それを繰り返していくと、規則性のある図柄が現れる、というものです。

# recsq.py 2025-10-27
from math import *
#from casioplot import *
from u import *

a=(86,191)
b=(86,0)
c=(277,0)
d=(277,191)

def sqlin(a,b,c,d):  
  line(int(a[0]),int(a[1]),int(b[0]),int(b[1]))
  line(int(b[0]),int(b[1]),int(c[0]),int(c[1]))
  line(int(c[0]),int(c[1]),int(d[0]),int(d[1]))
  line(int(d[0]),int(d[1]),int(a[0]),int(a[1]))

def tr(r,p,q):
  return (p[0]*(1-r)+q[0]*r,p[1]*(1-r)+q[1]*r)

def recsq(n,r,a,b,c,d):
  for i in range(n):
    sqlin(a,b,c,d)
    b=tr(r,b,c)
    c=tr(r,c,d)
    d=tr(r,d,a)
    a=tr(r,a,b)

recsq(60,0.05,a,b,c,d)
但し、やす親分作成の線引き module 「u.py」を使用しております。折角作っていただいたので、有り難く使わせて戴いております。
親分、多謝であります ! 

ref. Casio Python - グラフィックス出力関数の追加 - e-Gadget - プログラム関数電卓
https://egadget.blog.fc2.com/blog-entry-739.html

このコード、元々は再起処理っぽい感じで書いておりました。
def recsq(n,r,a,b,c,d):
  if n<=0:
    return
  sqlin(a,b,c,d)
  b=tr(r,b,c)
  c=tr(r,c,d)
  d=tr(r,d,a)
  a=tr(r,a,b)
  recsq(n-1,r,a,b,c,d)
しかし、繰り返しの回数が 50 になると stack overflow になってしまいました。なんだよ、オイ !
upython では、バルクデータを扱う必要もあって、heap oriented らしく、Stack は少し控えめに配分するのだと思う所です。
で、作業中のコード、入力している最中、「無理に recursive にする必要はなさそうだナ」と、単純な繰り返しにした所、stack 消費がないため 50 を越えて 100 でも問題なく動くと判明しました。

先日来、ダイソーで買ってきた NiMH 電池を使っていたのですが、今日になって、Low Batt replace が出る様になったものの、一度電源をサスペンドすると、一時的に復帰する事をいい事に、使い続けておりました。
流石にこのままではキツそうと、電池交換のため、編集中のコードを保存しておこうとすると、Low Batt 警告が出るのであります。Flash memory は書き込みに電力が要るのです。そこで、一旦サスペンドで電圧回復を図り、保存しなおすという際どい操作で、切り抜けたという具合。(良い子はマネしちゃダメよ)

昔のポケコンでは、RAM に BASIC プログラムを置いておりました。電池が切れると、内容をすっかり忘れてしまうのですが、それを思うと、隔世の感、ではあります。

2 件のコメント:

  1. やす (Krtyski)2025年11月1日 21:59

    akatuki様

    再起処理を諦めた recsq.py ですが、再起処理に繋がるコードは面白いです。

    せっかく line() 関数を使って頂いたので、ついでに線分に色を指定する grp_color() 関数もお味見頂くために、チョコッと触ってみました。

    https://egadget2.web.fc2.com/python/akatuki/recsq.html

    line() 関数の第5引数は色を指定しますが、色の指定方法は3通り使えるようにしており、0~7の整数で指定する方法を使えば、比較的簡単に色指定できます。

    そこで、sqlin()関数に第5引数として col を追加して整数のカラーコードを渡せるようにして、中のline()関数の第5引数に grp_color(col) を追加します。
    最後の仕上げとして、recsq() 関数内の sqlin() は、sqlin(a, b, c, d, i%7) とすることで、同じ色変化の繰り返しパターンで正方形に異なった色を付けてみました。

    返信削除
  2. やす (Krtyski) 様、ご来訪戴き、多謝であります !

    > 再起処理を諦めた recsq.py ですが、再起処理に繋がるコードは面白いです。

    再帰処理(本文の方, 変換間違いでしたネ。スンマセン)っぽい絵を想定していたので、再帰処理で書き始めたのですが、スタックが思いの外、少なかった ...

    > せっかく line() 関数を使って頂いたので、ついでに線分に色を指定する grp_color() 関数もお味見頂くために、チョコッと触ってみました。
    > https://egadget2.web.fc2.com/python/akatuki/recsq.html
    > line() 関数の第5引数は色を指定しますが、色の指定方法は3通り使えるようにしており、0~7の整数で指定する方法を使えば、比較的簡単に色指定できます。

    grp_color() ですが、u.py module に収録されているのに、気付きませんで、申し訳ない !

    > そこで、sqlin()関数に第5引数として col を追加して整数のカラーコードを渡せるようにして、中のline()関数の第5引数に grp_color(col) を追加します。
    > 最後の仕上げとして、recsq() 関数内の sqlin() は、sqlin(a, b, c, d, i%7) とすることで、同じ色変化の繰り返しパターンで正方形に異なった色を付けてみました。

    早速、実行してみました。
    fx-CG50 は高精細度の画面なので、そこそこヨカッタかな、と思っておりましたが、色分けすると、より見栄えがしますネ。
    ありがとうございます !

    ついでに書いておきますと、a,b,c,d bind しているタプル、画面上の座標となっております。

    a=(0,191)
    b=(0,0)
    c=(383,0)
    d=(383,191)

    の様に変更すると画面を目一杯使う事になるはずなので、お試し下さい。

    返信削除