2007年8月19日日曜日

python講座(2)ベクトルの演算

pythonの講座を続きものにします。

前回はリストの成分にリストを指定できて、二次元配列様に使用できる事をやったので、そのつづきです。今回はclassをつかって、複数のベクトルを呼び出せるような配列を作り、それらの演算を行う方法を示します。簡単な内積と外積を行います。

pythonは最初に
# coding : shift-jis
というように先頭の行にどういうコードでファイルを作ったかをかく必要があります。

次にclassを定義して、その後メイン部分という流れです。


----------------------script02.py----------------------
# coding : shift-jis

#クラス定義部分:型宣言みたいなもん。

class hoge2:

"Class definitions for vecters"

def __init__(self,i):
# i個分のリストを予約しておく。
self.v=["各ベクトル"]
for i in range(i):
self.v.append(None)
return

def ins(self): #要素を増やす
self.v.append(None)
return

def vecins(self,i,b): #ベクトルの成分を代入
self.v[i]=b
return

def naiseki(self,a,b): #二つのベクトルの内積
return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]

def gaiseki(self,a,b): #二つのベクトルの外積
x=a[1]*(1.0*b[2])+a[2]*(-1.0*b[1])
y=a[0]*(-1*b[2])+a[2]*b[0]
z=a[0]*b[1]+a[1]*(-b[0])
return [x,y,z]



#メインプログラム部分



#hoge2型でxを宣言

x=hoge2(3) #三種類のベクトルを定義しますよという意味

#ベクトルのタイトルを0番目のリストにいれた。

print x.v[0]



#xの各要素にベクトルをリストとして代入
x.vecins(1,[1.0,0.0,0.0]) #x方向のベクトルと同じ
x.vecins(2,[0.0,1.0,0.0]) #y方向のベクトルと同じ
x.vecins(3,[0.0,0.0,1.0]) #z方向のベクトルと同じ

#各要素を表示すると、ちゃんとベクトルになっている。
print x.v[1],x.v[2],x.v[3]

#各要素のベクトル成分で演算が出来る。

#ベクトルの内積の定義
print x.v[1][0]*x.v[2][0]+x.v[1][1]*x.v[2][1]+x.v[1][2]*x.v[2][2]

#ベクトルの内積を関数で計算
print x.naiseki(x.v[1],x.v[2])

#ベクトルの外積を関数で計算
print x.gaiseki(x.v[1],x.v[2])

#あらたにベクトルを増やす
x.ins()
#増やしたベクトルの成分を代入
x.vecins(4,[1.0,2.0,3.0])

#あらたに定義した四番目のベクトルのy方向の要素を内積で計算
print x.naiseki(x.v[2],x.v[4])

x.ins()
x.vecins(5,[2.3,3.1,8.2])
#おなじように新たに定義したベクトルをつかって、外積を行う。
print x.gaiseki(x.v[4],x.v[5])
#順番をかえるとちゃんと反対向きのベクトルとなっているのが分かる。
print x.gaiseki(x.v[5],x.v[4])

----------------------script02.py----------------------


流れとしては、__init__をつかって最初にいくつかの分だけベクトルを定義します。その後insを使って、いくつでも増やすことが出きるようにしています。ベクトルの要素を代入する時はvecinsを使い、上の例ではx.v[i]というベクトルにしています。それらのベクトルを指定することで、内積や外積などをnaiseki,gaisekiで計算できる様にしています。

この様にclassを使ってやると、class内で定義されたself.のあらゆる変数や、関数を外部で呼び出して使うことが出来ます。class内で、self.v[0]としていたリストは外部ではx.v[0]となっています。さらにx.gaiseki()として、外部で関数を呼び出すことすら出来ます。


流体力学計算のパッケージソフトというのもあるようで、ほとんどが商用の物が多いようですね。映画などで実績のある流体力学ソフト(real flow)というものがあります。
http://www.nextlimit.com/realflow/jp_index.htm
これは流体力学計算パッケージというよりは、バーチャルな流体(液体や流動固形物)をリアルに見せるためのレンダリングソフトのようです。値段がめちゃくちゃ高いし、高級なマシンが必要で、パッケージの内容を使いこなすのにすごく時間がかかりそうです。pythonを使って独自スクリプトを実装させることも可能なようですね。windows,Mac,linuxで動作するようです。日本沈没(みてないな、この映画は)でも、使われたソフトのようですね。

real flameっていうのがあれば面白いんだけどね。(ミッションインポッシブルで火のダンサーがイントロで出てくる。マドンナが主題歌で、主役やるはずだったのに蹴った映画の方)

0 件のコメント: