見出し画像

活動報告31(2024年1月)

プロジェクト薬箱「UIデザイン②」
 プログラムにより液晶画面で表示される「機械的動作」は、摩擦等の物理的制限を受けないのが利点だと思っている。だから、時計の秒針をミリ単位の針にして高速回転させる等、限界領域まで動作表現できる。そこに実用的な意味はなくCPUの無駄使いと言われるが、面白そうではある。
 バーサライタという装置がある。これは、一列に並べたLEDを高速で回転させることで目の残像効果により文字や画像が空中に浮かびあがるというもの。実際に製作するのは結構大変で、費用も相応にかかる。しかし、最近良いのが市販された。それは、「DXブレーザーブレス」。番組は見ていないがウルトラマンブレーザーの玩具である(タイトル画左)。もちろん購入した。それも種子島銃の故事にならい2台。
 
 さて、この製作が大変なバーサライタを、Pythonのtkinter上で表現してみる。バーサライタには、大体秒速10~30回転(600~1800rpm)が必要と言われている。モニター上では、円を1度ずつ360の座標に分割した場合、回転速度を1度/1ミリ秒とすると、1秒では2.78回転しかできない。これでは足りない。何とかこの10倍高速に回転できないか試行錯誤した。問題はafter()メソッドの最小単位が、1ミリ秒であること。そこで円を10個の扇に分割して扇内でループさせたり色々トライするも、想定された残像が生じない。というわけでQiitaにて賢人に質問。
 
 すぐに返事が来た、物理的に無理と。PCのモニター画面のリフレッシュレートが60 Hzであることは、すっかり失念していた。例えば1msで画面を表示するには1000Hzのリフレッシュレートが必要だが、そんなモニターは存在しない。という訳であきらめるしかないのだが、癪なのでフェイク的表現に切り替えた(タイトル画中央・右)。LED灯を表現すべく円の周囲に暈(ハロー)を描画したり、動画での見え方優先で複数の太い線を微妙に隣接させたり工夫した。さらに、偶然見つけた方法だが、1ms のafter()メソッドを、多重稼働させることで、みかけ上1ms以下で動作させることにも成功した。多重稼働をやりすぎると最終的には飛び飛びの画像となるが、適切な回数ならば、きれいなものではないが残像を形成できた。フレッシュレートの原則からは残像は生じないはずなのだが、人間の視覚とは実に不思議だ。

この記事が気に入ったらサポートをしてみませんか?