ご訪問ありがとうございます。 昨日までの状況は右下の「アクセス状況」にあります。
ウィキペディア「結晶構造」には載っていないけど、
Wikipedia「Lattice constant」には載っている、
結晶格子のベクトル表示図がある。
結晶格子の単位格子(unit cell)は、
良く利用(?)している CIFファイルなどに記述されている。
3軸方向の長さ、a, b, c と、
各軸間のなす角度、alpha, beta, gamma で表されている。
そこで、結晶の各軸を表す単位ベクトルを、
3次元(xyz)空間のベクトルとして表したい!
条件として、
ベクトルc をz軸に重ね、
ベクトルb をyz平面(x座標の値がゼロ)とする。
これで、
ベクトル a, b, c は { x, y, z } で表されるはず。
で、どうすればいいの。
(1)ベクトルc
条件から、
x座標値はゼロ、y座標値はゼロで、z座標値はcですね。
従って、ベクトルc のxyz座標は、{ 0, 0, c } となりますネ。
(2)ベクトルb
条件から、
x標値はゼロですね。
次に、ベクトルb の先端からz軸に垂線(垂直な線)を引いて出来る
直角三角形を考えると、z軸からのなす角度が alpha だから、
z座標値は b*Cos[alpha]で、y座標値は b*Sin[alpha]となりますね。
従って、ベクトルb のxyz座標は、{ 0, b*Sin[alpha], b*Cos[alpha] } だナ。
(3)ベクトルa
ベクトルa の先端からz軸に垂線を引いて出来る
直角三角形を考えると、z軸からのなす角度が beta だから、
z座標値は a*Cos[beta]ですね。
問題は、x座標、y座標の値です。
なかなかの難問ですが、・・・
こういうときは、方程式を作って解いてみる?
2つのベクトルの内積は云々カンヌンで、・・・
ベクトルa のx座標、y座標、z座標を、それぞれ、ab、ay、az とすると、
ベクトルa とベクトルb のなす角度がgamma なので,
ベクトルa 即ち{ ax, ay, az }と、
ベクトルb 即ち{ 0, b*Sin[alpha], b*Cos[alpha] }の内積が、
a*b*Cos[gamma]となるわけだ。
そして、ベクトルa の長さがa だから、
ax^2 + ay^2 + az^2 = a^2 となるナ。
さらに、az=a*Cos[beta]だったから、
結局、ax、ay に関する2元の連立方程式が出来る!
でも、こんな、三角関数を含んだ方程式はどうして解けば良いの???
そんなの「Mathematica」を使えばアッと云う間だヨ???
そう?
じゃ解いてみるね。
(簡単化して、a, b を省略(1と)した)
つまり、
ay = a*( Cos[gamma] - Cos[alpha] * Cos[beta] ) / Sin[alpha]
ax^2 = a^2*Sin[beta]^2 - ay^2
ですか?
そのようですネ。
と云うことで、
3軸方向の長さ、a, b, c と、
各軸間のなす角度、alpha, beta, gamma を与えて、
ベクトルa、ベクトルb、ベクトルc のそれぞれのxyz座標を求める、
Perlプログラムを作りました。
(Active Basicで無いのは、UNIX でも使えるようにです。)
(なお、「^」はべき乗を表す。Perl では「**」ですね。)
と云うことで、今日の 部活動 は終了です。
今日は、「化学」じゃなくて「物理」か「数学」だったかナ?
見ていただきありがとうございました。
お帰りに投票して頂けると嬉しいです。 ⇒
人気BlogRanking ⇒
P-NETBANKING ⇒
ウィキペディア「結晶構造」には載っていないけど、
Wikipedia「Lattice constant」には載っている、
結晶格子のベクトル表示図がある。
結晶格子の単位格子(unit cell)は、
良く利用(?)している CIFファイルなどに記述されている。
3軸方向の長さ、a, b, c と、
各軸間のなす角度、alpha, beta, gamma で表されている。
そこで、結晶の各軸を表す単位ベクトルを、
3次元(xyz)空間のベクトルとして表したい!
条件として、
ベクトルc をz軸に重ね、
ベクトルb をyz平面(x座標の値がゼロ)とする。
これで、
ベクトル a, b, c は { x, y, z } で表されるはず。
で、どうすればいいの。
(1)ベクトルc
条件から、
x座標値はゼロ、y座標値はゼロで、z座標値はcですね。
従って、ベクトルc のxyz座標は、{ 0, 0, c } となりますネ。
(2)ベクトルb
条件から、
x標値はゼロですね。
次に、ベクトルb の先端からz軸に垂線(垂直な線)を引いて出来る
直角三角形を考えると、z軸からのなす角度が alpha だから、
z座標値は b*Cos[alpha]で、y座標値は b*Sin[alpha]となりますね。
従って、ベクトルb のxyz座標は、{ 0, b*Sin[alpha], b*Cos[alpha] } だナ。
(3)ベクトルa
ベクトルa の先端からz軸に垂線を引いて出来る
直角三角形を考えると、z軸からのなす角度が beta だから、
z座標値は a*Cos[beta]ですね。
問題は、x座標、y座標の値です。
なかなかの難問ですが、・・・
こういうときは、方程式を作って解いてみる?
2つのベクトルの内積は云々カンヌンで、・・・
ベクトルa のx座標、y座標、z座標を、それぞれ、ab、ay、az とすると、
ベクトルa とベクトルb のなす角度がgamma なので,
ベクトルa 即ち{ ax, ay, az }と、
ベクトルb 即ち{ 0, b*Sin[alpha], b*Cos[alpha] }の内積が、
a*b*Cos[gamma]となるわけだ。
そして、ベクトルa の長さがa だから、
ax^2 + ay^2 + az^2 = a^2 となるナ。
さらに、az=a*Cos[beta]だったから、
結局、ax、ay に関する2元の連立方程式が出来る!
でも、こんな、三角関数を含んだ方程式はどうして解けば良いの???
そんなの「Mathematica」を使えばアッと云う間だヨ???
そう?
じゃ解いてみるね。
(簡単化して、a, b を省略(1と)した)
つまり、
ay = a*( Cos[gamma] - Cos[alpha] * Cos[beta] ) / Sin[alpha]
ax^2 = a^2*Sin[beta]^2 - ay^2
ですか?
そのようですネ。
と云うことで、
3軸方向の長さ、a, b, c と、
各軸間のなす角度、alpha, beta, gamma を与えて、
ベクトルa、ベクトルb、ベクトルc のそれぞれのxyz座標を求める、
Perlプログラムを作りました。
(Active Basicで無いのは、UNIX でも使えるようにです。)
(なお、「^」はべき乗を表す。Perl では「**」ですね。)
と云うことで、今日の 部活動 は終了です。
今日は、「化学」じゃなくて「物理」か「数学」だったかナ?
見ていただきありがとうございました。
お帰りに投票して頂けると嬉しいです。 ⇒
人気BlogRanking ⇒
P-NETBANKING ⇒