設計

楕円をメインテーマにしてデザインしているものの、円に比べて扱いににくい。
必要なのは

  1. 多角形近似
  2. 配線容易になるLED角度の決定

どちらも解析的に求められると思っていたらどうにもうまくいかず、結局両方ともヒューリスティック(?)な手法でやっている。

多角形近似

楕円の媒介方程式
x=a cos(t)
y=b sin(t)
でtを単純に分割してやれば良いだろうと考えていたら、LEDの配置が明らかに偏ってしまい没(考えてみれば当たり前)。
次に周の長さを等分割する手法をやろうとしたものの楕円の周からは定積分を除去することが出来ないと言うことを知り絶望。
なんとか数式的に定積分を解いたものの、結局これもLEDの配置が偏っているので没。
最終的に楕円の媒介方程式を拘束条件にして辺の長さが同じ多角形を作るプログラムで文句のない近似を作ることが出来た。

配線容易になるLED角度の決定

楕円の中心から周上の任意の点に対して伸びる直線とその点での接線は直交してない。
このためマトリクスを周上に作ろうと思うと

  • 中心から伸びる線(セレクト)→中心から伸びる線に平行が最良
  • 周に平行に走る線(コモン)→周の接線に平行が最良

の最適条件を同時に満たすLEDの角度を求めるのは難しい。
はじめは中心から伸びる線に平行にしてコモンの配線が行き詰まり、次に周に平行にしたらセレクトがいまいち綺麗に引けず、角度を足して2で割ったのはそれなりによかった。


どうにもうまくいかないので最適条件を求めるために配線をバネとしてLEDが自由に回転するモデルで定常状態で落ち着けば一番良いんじゃないか?と言う思い付きのもと、現在シミュレーション中。
金曜日ぐらいからコーディングしてたけど些細なミスで結構詰まった。
処理が重すぎるが、時間分解能を小さくすると発散に至ってしまったので時間をかけるしかない。
とりあえず明日の朝まで無限ループで回して、良さそうなら配線してみよう。


追記
とりあえずモーメントと角速度は順調に小さくなってきているのでこのまま落ちていけばうまく行く気がする。


追記2
GUI作るのとかループ回数決めるのが面倒なので偉大なるVS様のデバッグ機能を使って変数の値をウォッチ→良さそうならBreakを書き足すと言うやり方で誤魔化す。
一時停止のときにコード編集できるのがここまで便利とは。