2012年05月28日

習作:複素数モジュール

習作です。無保証です。何があっても責任取れません。

使い方?

まずcomplex.luaを実行したいLuaスクリプトと同じディレクトリに置いて、複素数機能を使いたいスクリプトの頭に
require("complex")
と書きましょう。

コンストラクタみたいなもの

Luaはプロトタイプベースなので正確にはクラスじゃないんですが……
z = complex.new(3, 4)
というように書けば、z に 3+4i を代入できます。
極形式での初期化もできます。
z = complex.polar(2, math.pi/3)
というようにすれば、絶対値が 2、偏角が π/3 (度に直すと60度) の複素数が z に代入されます。偏角はラジアンで指定します。

実部と虚部に分解する

complex.re …… 実部が格納されています。
complex.im …… 虚部が格納されています。

プロパティのようにして使用できる関数

次のようなものがあります。
complex:conj() …… 共役複素数を返します。
complex:abs() …… 絶対値を返します。
complex:arg() …… 偏角(単位はラジアン)を返します。

定数

complex:i …… 虚数単位を表します。

演算子

メタテーブルを指定しているので、四則演算、べき乗、単項マイナスは普通に使えます。mod はエラーになります。「..」(文字列の連結)もエラーになります。
比較演算子は「==」と「~=」のみ使用できます。実部が等しく、かつ虚部が等しい場合に、等しいとみなされます。複素数には大小関係が定義されないため、ほかの比較演算子はエラーになります。
tostring()は「3+4i」などといった文字列を返します。
tonumber()は、虚部が0の場合は実部をそのまま返し、それ以外の場合はnilを返します。

複素関数用のオブジェクト

cmathテーブルに関数を格納しています(この辺がなんかPythonみたい……)。
cmath.log(x) cmath.log10(x) cmath.exp(x) cmath.pow(b, x) cmath.sqrt(x)
cmath.sin(x) cmath.cos(x) cmath.tan(x) cmath.asin(x) cmath.acos(x) cmath.atan(x)
cmath.sinh(x) cmath.cosh(x) cmath.tanh(x) cmath.asinh(x) cmath.acosh(x) cmath.atanh(x)
以下の3つは complex テーブルのそれらと同義です。
cmath.conj(x) cmath.abs(x) cmath.arg(x)

ダウンロード

これです。
Luaで複素数を扱うためのモジュール
ラベル:複素数
posted by MihailJP at 01:45| Comment(0) | Lua | このブログの読者になる | 更新情報をチェックする

2012年01月07日

HSPComplexのサンプルプログラムみたいなもの

HSPで複素数を扱うプラグインを作ったので、せっかくなのでサンプルプログラムみたいなものを書いてみました。実行すると、正弦関数の「グラフ」が現れます……とは言っても、誰もが知るサインカーブではなく、複素数が色で現れた虹色の画像になります。
引数が複素数平面上に、返り値が色で表されたグラフを描画します。引数は実軸・虚軸とも±5.00の範囲で0.01刻みで描画されます。
返り値は絶対値を明るさ、偏角を色相に当てています。絶対値は0が黒で、無限大に近づくに連れて白くなります。偏角は0(正の整数)が赤で、π(負の整数)が水色、π/2(虚部プラスの純虚数)が黄緑色、3π/2(虚部マイナスの純虚数)が紫色です。
100万回以上のループなので描画には多少時間がかかりますのでご注意ください。
あと、ソースを見ればわかりますがそれなりの解像度がないと表示できません。私の環境は1920×1080なので縦がギリギリです。

#include "hspcmplx.as"
#include "hspdef.as"
Gamma=0.6 ;ガンマ調整
screen 0,1001,1001 ;画面を初期化する
redraw 0 ;途中の描画は省略する
for Im,500,-500,-1 ;虚軸ループ
for Re,-500,500,1 ;実軸ループ
ans=sincx(complex(double(Re)/100.0, double(Im)/100.0)) ;関数(sincxを他の関数にかえてみてください)
H=int(argcx(ans)*96.0/M_PI) ;偏角を色相に直す
while H<0: H+=192: wend
while H>=192: H-=192: wend
T=atancx(powcx(complex(abscx(ans),0),complex(Gamma,0))) ;arctanで変換
S=int(abscx(sincx(T*complex(2.0,0)))*255.0) ;絶対値を彩度に変換
V=int(abscx(T)*1020.0/M_PI) ;絶対値を明度に変換
if V>255: V=255
hsvcolor H,S,V ;色を指定
pset Re+500,500-Im ;点を打つ
next
next
redraw 1
stop


実行結果
正弦のグラフ(複素数) on Twitpic

実は、これを作っている間にプラグイン本体にバグを発見してしまい、急遽アップデートする羽目になってしまったりしています。(Wikipediaを読みなおしたり、Pythonで検算したり……)
posted by MihailJP at 11:35| Comment(0) | Hot Soup Processor | このブログの読者になる | 更新情報をチェックする

2011年03月26日

EsteLime2 の拡張版

アリアンロッドRPGのオンラインセッションに使用するツールにEsteLime2というツールがあります。これはキャラクターのHPやMP、回数制限のあるスキルの使用回数の管理などに使う、LimeChat2用のスクリプトです。
しかし、スキルガイドに対応していなかったりといった様々な不便がありました。
そこで、いくつかのコマンドや機能を追加したのが「ミハイル版」です。

基本的な使い方はEsteLime2のオリジナルの配布ページを参照してください。

追加パラメータ

アコライト
fdフェイス:ダグデモア
メイジ
rmリゼントメント
サムライ
dfディフレクション
rfリフレクション
rgレイジ
サモナー
qrクウェリィ
ダンサー
dmダンスマカブル
ニンジャ
shs又はssシャドウスナップ
モンク
esエナジースクイーズ
trbトリプルブロウ
レンジャー
qaクイックアクション
drh又はdrダイレクトヒット
ウォーロード
gbグレートバースト
fusフルスイング
otオンスロート
ウィザード
mmマスターマジック
ソーサラー
afエイミングフォージ
faファインアート
stsストームソーサリィ
エクスプローラー
susサポートストライク
flkフリッカースラッシュ
スカウト
daデュアルアロー
flsフラッシュショット
hosホロウショット
llラストラック
テイマー
mtマスターテイマー
thトリプルヘッド
ドラグーン
dsドラゴンソウル
ハイランダー
his又はhsハイスピード
ukユニット:キーン
ufユニット:フォース
igインテリジェンス
メンター
baブレイクアトリビュート
シャーマン
fcファストチャネル
ヒーラー
money所持金
フォーキャスター
dcaディスカバードアタック
dcgディスカバードガード
dcmディスカバードマジック
pcパーペチュアルチェック
prプロフィラキシス
プリーチャー
fgフォーチュンガード
mbマジックブレス
カンナギ
cgaコールゴッド:アマテル
cgiコールゴッド:イザナミ
cgtコールゴッド:ツキヨミ
sdセイクリッドダンス
hbホーリーボディ
バートル
wsウィンドセンス
wuウェイクアップ
jaジャミングアロー
sskセイバースキル
trsトライショット
prpプレパレイション
一般
coキャッチアウト
skgスタイル:クウガ
shgスタイル:ホウゲン
smsスタイル:ムソウ
その他
com備考欄
備考欄は毎回上書きされます。

ダイスリピート機能

ダイスロールの直後に、:回数というように指定すると、同じダイスロールを指定回数だけ繰り返します。
また、bisなどのキーワードを使うこともできます。キーワードを使う場合は、: は不要です。
ラテン語数詞ギリシア語数詞英語数詞機能
bistwice2回
tertristhrice3回
quatertetrakis4回
quinquiespentakis5回
sexieshexakis6回
septiesheptakis7回
octiesoctakis又はoktakis8回
noviesenneakis又はnonakis9回
deciesdekakis10回


ダウンロード

第8版 estemiha.zip

ライセンス

GPL
posted by MihailJP at 23:17| Comment(0) | JavaScript | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。