3

結晶学的ユニットセルを指定するために一般的に使用されるパラメータからいくつかの軸ベクトルを生成しようとしています。これらのパラメータは、a、b、cの3つの軸の長さと、それらの間の角度(alpha、beta、gamma)で構成されます。慣例により、アルファはb軸とc軸の間の角度、ベータはaとcの間、ガンマはaとbの間です。

これで、最初の2つのベクトル表現を簡単に取得できます。a軸をx軸に任意に設定できるので、a_axis =[a、0,0]。次に、角度gammaだけaからbを回転させる必要があります。これにより、xy平面にとどまることができ、b_axis = [b * cos(gamma)、b * sin(gamma)、0]になります。

問題は3番目のベクトルです。私はそれを決定するための良いきれいな方法を理解することはできません。私はいくつかの異なる解釈を理解しましたが、それらのどれもパンアウトしていません。1つは、軸axis_aとaxis_bの周りに2つの円錐があり、そのサイズが角度alphaとbetaで指定されていることを想像しています。これらの円錐の交点は2つの線を作成し、正のz方向の1つは、長さcのaxis_cの方向として使用できます。

誰かがaxis_cを決定する方法を知っていますか?

ありがとう。

4

3 に答える 3

2

既知の長さの2つのベクトルu、v間の角度アルファは、それらの内側(内積)<u、v>から見つけることができます。

cos(alpha)= <u、v> /(|| u || || v ||)

つまり、アルファの正弦は、2つのベクトルの内積をそれらの長さの積で割ったものです。

したがって、3番目のzコンポーネントはゼロ以外の値にすることができます。角度を正しく取得した後で軸ベクトルの一部またはすべてをスケーリングしても角度は変わらないので、(たとえば)Cz=1と仮定しましょう。

ここで、最初の2つのベクトルはA =(1,0,0)およびB =(cos(gamma)、sin(gamma)、0)になる可能性があります。これらは両方とも長さが1であるため、Cを選択する際に満たす2つの条件は次のとおりです。

cos(alpha)= <B、C> / || C ||

cos(beta)= <A、C> / || C ||

これで、解決する未知数はCxとCyの2つだけになります。簡単にするために、これらをxおよびyと呼びます。つまり、C =(x、y、1)です。したがって:

cos(alpha)= [cos(gamma)* x + sin(gamma)* y] / sqrt(x ^ 2 + y ^ 2 + 1)

cos(beta)= x /(sqrt(x ^ 2 + y ^ 2 + 1)

最初の方程式を2番目の方程式で割ると(ベータが直角ではないと仮定します!)、次のようになります。

cos(alpha)/ cos(beta)= cos(gamma)+ sin(gamma)*(y / x)

これは、比率r = y/xを解くための線形方程式です。それができたら、上記の2番目の方程式にy = rxを代入し、2乗すると、xの2次方程式が得られます。

cos ^ 2(beta)*((1 + r ^ 2)x ^ 2 + 1)= x ^ 2

cos ^ 2(beta)=(1-cos ^ 2(beta)*(1 + r ^ 2))x ^ 2

x ^ 2 = cos ^ 2(beta)/ [(1-cos ^ 2(beta)*(1 + r ^ 2))]

方程式を二乗することにより、xの符号の選択に対応するアーティファクトルートを導入しました。したがって、「元の」2番目の方程式でこれから得られるxの解をチェックして、cos(beta)の正しい符号が得られることを確認します。

追加した:

ベータが直角の場合、物事は上記よりも簡単です。x = 0が強制され、yの最初の方程式を解くだけで済みます。

cos(alpha)= sin(gamma)* y / sqrt(y ^ 2 + 1)

分母を2乗して乗算すると、前に行ったのと同様に、yの2次式が得られます。yの記号の選択を確認することを忘れないでください:

cos ^ 2(alpha)*(y ^ 2 + 1)= sin ^ 2(gamma)* y ^ 2

cos ^ 2(alpha)= [sin ^ 2(gamma)-cos ^ 2(alpha)] * y ^ 2

y ^ 2 = cos ^ 2(alpha)/ [sin ^ 2(gamma)-cos ^ 2(alpha)]

実際、角度alpha、beta、gammaのいずれかが直角である場合、計算を簡略化するために、その角度gamma(最初の2つのベクトルA、Bの間)にラベルを付けるのが最適な場合があります。

于 2011-07-07T15:32:36.070 に答える
1

これは、A =(Ax、0,0)、B =(Bx、By、0)であり、 | C | = 1

1)cos(beta)= AC /(| A || C |)= AxCx / | A | =>Cx = |A|cos(beta)/Ax = cos(beta)

2)cos(alpha)= BC /(| B || C |)=(BxCx + ByCy)/ | B | =>Cy = (|B|cos(alpha)-Bx cos(beta))/By

3)Czを見つけるには、Oを(0,0,0)の点、Tを(Cx、Cy、Cz)の点、PをOxy上のTの射影、QをOx上のTの射影とします。したがって、Pは(Cx、Cy、0)の点であり、Qは(Cx、0,0)の点です。したがって、直角三角形のOQTから次のようになります。

tan(beta)= | QT | / || OQ | = | QT | / Cx

直角三角形TPQから、| TP | ^ 2 + | PQ | ^ 2 = | QT |^2が得られます。それで

Cz = |TP| = sqrt(|QT|^2 - |PQ|^2) = sqrt( Cx^2 tan(beta)^2 - Cy^2 )
于 2011-07-07T05:41:07.813 に答える
0

これが正しいかどうかはわかりませんが、写真を撮ったほうがいいでしょう。うまくいけば、私は10億の反対票を獲得しないでしょう...

ベクトルを必要な量だけスケーリングするのが面倒なので、すべてが正規化されて長さが1になると仮定します。さまざまなサイズを考慮して、計算に簡単な変更を加えることができます。また、ドット積を表すために*を使用します。

A =(1、0、0)

B =(cos(g)、sin(g)、0)

C =(Cx、Cy、Cz)

A * C = cos(beta)//これは内積の定義にすぎません。マグニチュードは1だと思いますので、その部分は飛ばして、ベータはAとCの間の角度だとおっしゃっていました。

A * C = Cx //対応する各値を乗算することでこれを実行しましたが、CyとCzは0で乗算されていたため、無視されました。

cos(beta)=Cx//前の2つの方程式を組み合わせる

B * C = cos(alpha)

B * C = Cx * cos(g)+ Cy * sin(g)= cos(beta)* cos(g)+ Cy * sin(g)

(cos(alpha)-cos(beta)* cos(g))/(sin(g))= Cy

正直なところ、ベクトルCのz成分を取得する方法はわかりませんが、もう1つの比較的簡単な手順になると思います。理解できたら、投稿を編集します。

于 2011-07-07T03:00:45.647 に答える