articles:geo_manual

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
articles:geo_manual [2021/11/26 14:51] – [例題3] Takashi Suehiroarticles:geo_manual [2021/11/26 22:14] (現在) – [例題1の解答] Takashi Suehiro
行 57: 行 57:
 一致させるための、x軸以外の回転軸を1つとその 一致させるための、x軸以外の回転軸を1つとその
 まわりの回転角度をもとめよ。 まわりの回転角度をもとめよ。
 +
 ヒント: ヒント:
-  * 記号なしリストまずは回転軸を求める.どこにあるか.直観でも良い.+  * まずは回転軸を求める.どこにあるか.直観でも良い.
   * 回転軸周りの回転角度は,例題2を参考にする.   * 回転軸周りの回転角度は,例題2を参考にする.
  
 [[articles:geo_manual#例題4の解答|例題4の解答]] [[articles:geo_manual#例題4の解答|例題4の解答]]
 +
 +==== 例題5 ====
 +例題4で求めた回転軸、回転角度で
 +a=VECTOR(1,1,0)を回転させ、 b=VECTOR(1,0,1)に
 +一致することを確認せよ。
 +
 +[[articles:geo_manual#例題5の解答|例題5の解答]]
 +
 +===== 四元数 =====
 +
 +==== 例題6 ====
 +
 +a=VECTOR(1,1,0)をx軸まわりに90度回転させたベ
 +クトルを**四元数を用いて**求めよ。
 +
 +[[articles:geo_manual#例題6の解答|例題6の解答]]
 +
 +===== 座標系(FRAME) =====
 +
 +==== 例題7 ====
 +
 +座標系$\Sigma_0$を基準座標とする.
 +
 +  - $\Sigma_0$をz方向に1.0並進移動,z軸まわりにpi/2回転した座標系$\Sigma_1$の座標変換(FRAME.行列ではないがここでは$^0T_1$と表記)を生成せよ.
 +  - $\Sigma_1$からみてx方向に1.0並進移動,x軸まわりにpi/2回転した座標系$\Sigma_2$の$\Sigma_0$からの座標変換$^0T_2$を求めよ.
 +  - $\Sigma_2$で,p=VECTOIR(1,1,0)と表現される位置ベクトルの$\Sigma_1$,$\Sigma_0$からの表現を求めよ.
 +
 +[[articles:geo_manual#例題7の解答|例題7の解答]]
 +
 +===== 解答例 =====
 +
 +
 ==== 例題1の解答 ==== ==== 例題1の解答 ====
 [[articles:geo_manual#例題1|例題1]] a=VECTOR(0.87, 0.5, 0)とb=VECTOR(0.71, 0.71, 0)との間の角度を求める。 [[articles:geo_manual#例題1|例題1]] a=VECTOR(0.87, 0.5, 0)とb=VECTOR(0.71, 0.71, 0)との間の角度を求める。
行 78: 行 111:
  
 ==== 例題2の解答 ==== ==== 例題2の解答 ====
 +
 +[{{ articles:geo_ex02.png?200|例題2の補足}}]
 [[articles:geo_manual#例題2|例題2]] [[articles:geo_manual#例題2|例題2]]
 x=VECTOR(1,0,0)を基準に x=VECTOR(1,0,0)を基準に
行 97: 行 132:
  
 === 正解例 === === 正解例 ===
 +
 <code python> <code python>
 >>> a=VECTOR(-0.707,-0.707,0) >>> a=VECTOR(-0.707,-0.707,0)
行 106: 行 142:
 </code> </code>
  
-[{{articles:geo_ex02.png?200|例題2の補足}}]+
  
 ==== 例題3の解答 ==== ==== 例題3の解答 ====
行 121: 行 157:
 </code> </code>
  
 +==== 例題4の解答 ====
 +[[articles:geo_manual#例題4|例題4]]
 +a=VECTOR(1,1,0)を回転させ,b=VECTOR(1,0,1)に
 +一致させるための,x軸以外の回転軸を1つとその
 +回転角度をもとめよ.
  
 +=== 回転軸をa,bの外積とした場合 ===
 +
 +<code python>
 +>>> c=a*b
 +>>> c
 +v:[1.0, -1.0, -1.0]
 +>>> kco=a.dot(b)
 +>>> ksi=abs(c)
 +>>> th=atan2(ksi,kco)
 +>>> th
 +1.0471975511965976
 +>>> th*180/pi
 +59.999999999999993
 +</code>
 +
 +=== 回転軸をa,bの間にした場合 ===
 +
 +回転軸はa+b, 回転角度はpi,
 +
 +=== 汎用的な答え ===
 +回転軸はa+bとa*bが張る平面上のどこでも良い.
 +したがって,
 +それぞれの比率をx,yとして関数を書くと,
 +
 +<code python>
 +>>> def foo(a,b,x,y) :
 +...    r1=a+b
 +...    r2=a*b
 +...    r=(x*r1+y*r2).normalize()
 +...    da=(r*a).normalize()
 +...    db=(r*b).normalize8)
 +...    dc=r*da
 +...    kco=da.dot(db)
 +...    ksi=dc.dot(db)
 +...    return(r,atan2(ksi,kco))
 +... 
 +>>> foo(a,b,1,0)
 +(v:[0.8164965809277261, 0.4082482904638631, 0.4082482904638631], 3.141592653589793)
 +>>> foo(a,b,0,1)
 +(v:[0.5773502691896258, -0.5773502691896258, -0.5773502691896258], 1.0471975511965979)
 +>>> foo(a,b,0,-1)
 +(v:[-0.5773502691896258, 0.5773502691896258, 0.5773502691896258], -1.0471975511965979)
 +>>> foo(a,b,1,1)
 +(v:[1.0, 0.0, 0.0], 1.5707963267948966)
 +>>> 
 +
 +</code>
 +
 +==== 例題5の解答 ====
 +[[articles:geo_manual#例題5|例題5]]
 +例題4で求めた回転軸、回転角度で
 +a=VECTOR(1,1,0)を回転させ、 b=VECTOR(1,0,1)に
 +一致することを確認せよ。
 +
 +<code python>
 +>>> tmp=foo(a,b,0,1)
 +>>> R=MATRIX(axis=tmp[0],angle=tmp[1])
 +>>> R*a
 +v:[1.0, -2.220446049250313e-16, 1.0000000000000002]
 +>>> 
 +</code>
 +
 +==== 例題6の解答 ====
 +[[articles:geo_manual#例題6|例題6]]
 +a=VECTOR(1,1,0)をx軸まわりに90度回転させたベ
 +クトルを**四元数を用いて**求めよ。
 +
 +<code python>
 +>>> a=VECTOR(1,1,0)
 +>>> qa=QUATERNION(w_v=[0,a])
 +>>> qr=(QUATERNION(a=pi/2))
 +>>> qb=qr*qa*qr.conjugate()
 +>>> qb
 +q:(0.0, v:[1.0, 2.220446049250313e-16, 1.0])
 +>>> b=qb.v
 +>>> b
 +v:[1.0, 2.220446049250313e-16, 1.0]
 +>>> 
 +</code>
 +
 +==== 例題7の解答 ====
 +[[articles:geo_manual#例題7|例題7]]
 +座標系$\Sigma_0$を基準座標とする.[{{ articles:geo_ex07.png?300|例題7のイメージ図}}]
 +
 +  - $\Sigma_0$をz方向に1.0並進移動,z軸まわりにpi/2回転した座標系$\Sigma_1$の座標変換(FRAME.行列ではないがここでは$^0T_1$と表記)を生成せよ.
 +  - $\Sigma_1$からみてx方向に1.0並進移動,x軸まわりにpi/2回転した座標系$\Sigma_2$の$\Sigma_0$からの座標変換$^0T_2$を求めよ.
 +  - $\Sigma_2$で,p=VECTOIR(1,1,0)と表現される位置ベクトルの$\Sigma_1$,$\Sigma_0$からの表現を求めよ.
 +
 +<code python>
 +>>> t1=FRAME(xyzabc=[0,0,1,0,0,pi/2])
 +>>> t2_1=FRAME(xyzabc=[1,0,0,pi/2,0,0])
 +>>> t2=t1*t2_1
 +>>> t2
 +f:[m:[[6.123233995736766e-17, -6.123233995736766e-17,1.0], [1.0, 3.749399456654644e-33, -6.123233995736766e-17], [0.0, 1.0, 6.123233995736766e-17]],v:[6.123233995736766e-17, 1.0, 1.0])
 +>>> p=VECTOR(1,1,0)
 +>>> t2_1*p
 +v:[2.0, 6.123233995736766e-17, 1.0]
 +>>> t1*_
 +v:[6.123233995736766e-17, 2.0, 2.0]
 +>>> t2*p
 +v:[6.123233995736766e-17, 2.0, 2.0]
 +</code>
  • articles/geo_manual.1637905869.txt.gz
  • 最終更新: 2021/11/26 14:51
  • by Takashi Suehiro