2011-07-07 63 views
3

我試圖從通常用於指定晶體單元單元的參數生成一些軸向量。這些參數由三個軸的長度組成:a,b,c以及它們之間的角度:alpha,beta,gamma。按照慣例,α是b軸和c軸之間的角度,β在a和c之間,以及a和b之間的γ。由角度分隔的軸

現在獲得前兩個向量表示很容易。我可以任意設置a軸到x軸,所以a_axis = [a,0,0]。然後,我需要將角度γ從b旋轉一個角度,所以我可以停留在x-y平面上,並且b_axis = [b * cos(gamma),b * sin(gamma),0]。

問題是第三個向量。我找不出一個很好的乾淨方式來確定它。我已經想出了一些不同的解釋,但沒有一個解決了。人們想象在軸線axis_a和axis_b周圍有兩個錐體,其大小由角度α和β指定。這些圓錐的交點創建兩條線,正z方向的線可以用作長度爲c的axis_c的方向。

有人知道我該如何去確定axis_c嗎?

謝謝。

回答

2

兩個向量ü之間的α角,V已知長度的可從它們的內(點)的產物<發現U,V >:

COS(阿爾法)= < U, v > /(|| u || || v ||)

也就是說,alpha的餘弦是兩個向量的內積除以它們長度的乘積。

所以你的第三個z分量可以是任何非零值。縮放任何或所有軸矢量的你得到的角度之後不會改變角度,讓我們假設(假設)鋯石= 1

現在前兩個向量很可能會成爲A =(1,0 ,0)並且B =(cos(gamma),sin(gamma),0)。這些都具有長度l,所以這兩個條件,以滿足與選擇C是:

COS(阿爾法)= < B,C >/|| ||Ç

COS(測試版)= < A,C >/|| ||Ç

現在我們只有兩個未知數Cx和Cy來解決。爲了簡單起見,我將把它們稱爲x和y,即C =(x,y,1)。因此:

COS(阿爾法)= [cos(伽馬)* X + SIN(伽馬)* Y]/SQRT(X^2 + Y^2 + 1)

COS(測試版)= X/!(SQRT(X^2 + Y^2 + 1)

由第二(假設的β除以所述第一方程不是直角),我們得到:

COS(阿爾法)/ COS(測試版) = COS(伽瑪)+ SIN(伽馬)*(Y/X)

這是一個線性方程來求解比r = Y/X。一旦你有了,在上面的第二個方程中代入y = rx,並且平方給出了x的二次方程:其中x = 0,其中x = 0,其中x = 0,^2

COS^2(測試版)=(1 - COS^2(測試版)*(1 + R^2))的x^2

X^2 = COS^2(測試版)/ [ (1 -cos^2(beta)*(1 + r^2))]

通過對方程進行平方,我們引入了一個工件根,對應於選擇x的符號。因此,檢查在「原始」第二個方程中得到的x的解,以確保得到cos(beta)的正確符號。

補充:

如果測試是一個直角,情況比上述更簡單。 X = 0被強制,並且我們只有解決y的第一方程:

COS(阿爾法)= SIN(伽馬)* Y/SQRT(Y^2 + 1)

磨邊和乘法遠分母爲y提供了一個二次方,與我們之前所做的相似。記住要檢查你的標誌的選擇。Y:

COS^2(阿爾法)*(Y^2 + 1)=罪^ 2(伽馬)* Y^2

COS^2(阿爾法) = [sin^2(γ)-cos^2(α)] * y^2

y^2 = cos^2α/ [sin ^2γ-cos ^2α]實際上,如果其中一個角度α,β,γ是直角,爲了簡化計算,最好標記該角度γ(在前兩個向量A,B之間)。

+0

謝謝!我是*方式*過分複雜。我必須記住它可以分解方程!我認爲這就是我放棄這種方法的地方。再次感謝。 – Cyclone

+0

歡迎!我們可以通過對兩個方程進行平方和清除分母來避免劃分方程,然後求解兩個未知數x^2和y^2(C的分量)中的兩個線性方程。然而,看起來有點尷尬,因爲x和y的符號都必須在那個時候檢查。如果它是編程而不是手動解決的話,這可能是值得考慮的。注意分母(x^2 + y^2 + 1)非零,因此不是編碼的特殊情況的來源。 – hardmath

0

我不確定這是否正確,但我不妨試一試。希望我不會得到數十億的票...

我懶得按照必要的數量縮放矢量,所以我會假設它們都被標準化爲長度爲1。對計算進行一些簡單的修改以說明不同的尺寸。另外,我將使用*來表示點積。

A =(1,0,0)

B =(COS(克),SIN(克),0)

C =(CX,CY,CZ)

甲* C = cos(beta)//這只是點積的定義。我假設幅度是1,所以我可以跳過那部分,並且你說β是A和C之間的角度。

A * C = Cx //我通過將每個相應的值,和賽揚和鋯石被忽略,因爲他們被乘以0

COS(測試版)= CX //合併前兩個方程

B * C = COS(阿爾法)

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

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

說實話,我不知道如何獲得向量C的z分量,我希望它是一個更簡單的步驟。如果我能弄明白,我會編輯我的帖子。

+0

是的,z是殺手...我已經能夠找出將被投影到xy平面上的c_axis的「陰影」擊中的x/y座標,但沒有取得任何進展那裏。 – Cyclone

1

這裏是要找到所有CX,CY,鋯石(前兩個是一樣的,在其他的答案)的方式,因爲A =(AX,0,0),B =(BX,BY,0) ,並假設| C | = 1

1)COS(測試版)= 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爲T對Oxy的投影,Q爲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)