勝手にマクロ | ウディタでゲーム開発日誌

ウディタでゲーム開発日誌

WOLF RPGエディターでフリゲ作ってます。
制作物はこちらのウェブサイトからどうぞ→シコウサクゴ(http://ytknkgymt.web.fc2.com/index.html)
  ツイッター→https://twitter.com/ytknkgymt

特に頼まれてもいなかったけれど、
所望の抵抗値を実現する抵抗の組み合わせと
つなぎ方(直列or並列)を提示してくれる
マクロを勝手に作っていた。

実際にある抵抗は
E-12系列だとかE-24系列に従った値のモノしか無い。
100オームや110オームはあるけど
105オームの抵抗は単体では無い。

そこで、抵抗を2個か3個使ってどのように
つないだときに、最も所望の抵抗値に近くなるかを
判明させるマクロを
Visual Basicで書いていた。

5時間くらいで書きあがり、うまく動作してくれた。



どんなアルゴリズムかざっくり書くと

E-24系列の場合

抵抗を3個使う場合の組み合わせ(=24C3 + 24 * 23 + 24 = )2600通りと
抵抗を2個使う場合の組み合わせ(= 24C2 =)364通りについて

全部直列につないだ場合
全部並列につないだ場合
2個の並列と1個を直列につないだ場合(抵抗3個の場合のみ)
の合成抵抗を繰り返し処理と条件分岐を使って
逐一計算し、目標値との差の絶対値が最も小さかった場合の
抵抗の組み合わせを最終的に出力する、というもの。




使う抵抗の値とつなぎ方を出力するために
フラグ立てたり
値の比較のための変数を定義したり
といろいろ入れたら
180行くらいだったかな?
それぐらいのプログラムになった。

ただ、抵抗の組み合わせについて
一切の過不足なく全組み合わせを計算し、
かつ効率良く(=重複無く)計算させようと思って
頭を一捻りした。それもうまいアイディアが出て実現できた。


プログラミングはやっぱり面白い。
ちょこちょこっとデバッグしながら
完成して思い通りの動作をしてくれたときは
「よし、きた!」とちょっと嬉しくなる。