• 締切済み

任意軸周りの回転について

任意軸周りの回転について 実はプログラムのバグがどうしてもわからず、相談させていただきます。 結果は期待とおりの結果になりません。 図々しいお願いですが、ぜひ間違いをご指摘願います。 3次元座標上に数個の点があり、それを線分で結びます。 ある点をPiとするとしたとき線分(Pi-1,Pi)と(Pi,Pi+1)のなす 角度を180度にしたいのです。そしてPiをデータの並びから 外します。つまりPiでの曲げをキャンセルというイメージです。 任意の軸に対する回転の座標を変換の公式を使用しています。 以下のurlにソースがあります。 http://1st.geocities.jp/kanna_sakura_hana/rotation/header.cpp http://1st.geocities.jp/kanna_sakura_hana/rotation/draw.cpp 実行したい変換のイメージは http://1st.geocities.jp/kanna_sakura_hana/rotation/sample.jpg に図示してあります。 FormCreateのイベント関数に座標変換部分のソースが書かれて います。 ぜひご教授願います。 なお、任意軸周りの回転行列は「ゲーム3D数学」を参考にしました。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「期待通りの結果にならない」とは具体的にどういうこと? あと, もっと簡単なプログラムにならないかねぇ. 数値があれば十分でしょ? 最後に, http://okwave.jp/qa/q6228500.html とはどのような関係?

hanahana_kanna
質問者

補足

誰かがいたずらで同じ質問を書き込んだようです。 この質問以外は無視してください。 ※forest_walkerという名前で書き込みをしています。

すると、全ての回答が全文表示されます。

関連するQ&A

  • 任意軸ベクトル周りの3次元座標回転

    任意軸ベクトル周りの3次元座標回転 任意軸周りの回転について 実はプログラムのバグがどうしてもわからず、相談させていただきます。 結果は期待とおりの結果になりません。 図々しいお願いですが、ぜひ間違いをご指摘願います。 3次元座標上に数個の点があり、それを線分で結びます。 ある点をPiとするとしたとき線分(Pi-1,Pi)と(Pi,Pi+1)のなす 角度を180度にしたいのです。そしてPiをデータの並びから 外します。つまりPiでの曲げをキャンセルというイメージです。 任意の軸に対する回転の座標を変換の公式を使用しています。 以下のurlにソースがあります。 http://1st.geocities.jp/kanna_sakura_hana/rotation/header.cpp http://1st.geocities.jp/kanna_sakura_hana/rotation/draw.cpp 実行したい変換のイメージは http://1st.geocities.jp/kanna_sakura_hana/rotation/sample.jpg に図示してあります。 FormCreateのイベント関数に座標変換部分のソースが書かれて います。 ぜひご教授願います。 なお、任意軸周りの回転行列は「ゲーム3D数学」を参考にしました。

  • 任意軸回転を、XYZ軸回転の組み合わせに分解する?

    こんにちは、私は今DirectXを使って物理シミュレーションを行おうとしております。 そこで物体を任意軸回転させて表示したいのですが、どういった方法を用いれば実現できますか? http://marupeke296.com/DXGSmp_No10_Quaternion.html このサイトで解説されているようにクォータニオンを使うのでしょうか? ただこのサイトで示されているサンプルでは、玉ひとつひとつが回転しているわけではなく、位置がある軸に関して回転させた位置へ「並進させる」ということを行っています。 私は物体を回転させるときに、任意軸回転を使いたいなと思っています。 -- D3DXMatrixRotationX(&Rot_X, angle); D3DXMatrixMultiply(&World, &World, &Rot_X); -- 以上はX軸回転を行う行列をワールド座標変換行列に掛けるコマンドですが、この勢いで任意軸回転行列を作成・掛けるといったことはできますか? 知識が足りなく稚拙な表現で申し訳ありませんが・・・ 任意軸回転をXYZ軸回転の組み合わせに分解できれば D3DXMatrixRotationX(YやZ)とD3DXMatrixMultiply関数のみを使って簡単にできちゃうのですがそのような数学的手法は存在しますか? それとも、任意軸回転関数を自前で既に作ってあるので D3DXMATRIX型の変数にその値を手動で注入(構造体の中身を知る必要あり)、D3DXMatrixMultiply関数で掛けるといった操作でいけちゃうでしょうか? あとでちょっとやってみます。すみません。しかしD3DX~系の用意された関数の域を出て気持ちよくはないですが。

  • 回転した座標軸と一致させるための回転軸と角度の算出

    こんにちは。お知恵をお借りしたく質問致します。 プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。 ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。) 図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。 また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。 x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX) 同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ といったように、それらの角度(コサイン値)は分かっています。 (=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。) z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…) そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。 一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。 なお、上記関数を用いない方法でも構いません。 「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。 その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。 どうかよろしくお願いいたします。

  • 直交変換と回転は同じものなの?

    座標の回転が直交変換なのは任意の回転がx軸の回転とy軸の回転とz軸の回転の組み合わせであることから理解できます しかしその逆が分からないのです つまり直交変換は座標の回転なのかどうかです 3次元直交座標Aと3次元直交座標Bがある 空間に点Pがある PのAによる座標を(x,y,z)=a^Tとし PのBによる座標を(X,Y,Z)=b^Tとする そこで質問します 「U^T・U=Eかつ|U|=1である3次正方実行列Uがあり任意のPについてa=U・bならばBはAを原点を中心に回転したものである」 は正しいのですか? 正しければどうしてなのですか? 正しくなければどうしてなのですか? よろしくお願いします

  • UCS座標の回転について

    AutoCAD LT2016を使用しています。 水平垂直でない図形(45度などに傾いた図形)に対して作図を行う場合よく、UCS座標を、ワールドでなくオブジェクトを選択して、作図したい傾いた線分などを選択して、座標を回転させるのですが。 下記のURLのようなイメージです。 http://www.g-hokuto.jp/autocad/auto007002.html 添付した画像のように一発で、思い描いた通りの座標になればいいのですが、たいがいはX軸とY軸が逆転していたり、軸の正負の向きが逆転していたり、4通り?の座標のいずれかがおみくじのようにランダムに表れてしまいます。 そういう時は添付した画像のように線分で四角形を仮に書いて、それぞれの線分を何度もクリックして望んだ座標の向きになるまで何度もコマンドを繰りかえしています。 確実にUCS座標を思った向きにする方法。またはX-Y軸だけ入れ替えるコマンドX軸(Y軸)の正負の向きだけ変えるコマンドなどありますでしょうか。

  • オブジェクトの回転について

    FlashCS5 ActionScript3.0を使っています。 Flash上で、MovieClipでオブジェクトを作り、それをStage上で回転させたいのですが、 rotationプロパティで何度回転させるかはわかるのですが、 どこを基準に(どこを回転軸に)の、基準点の設定方法を教えていただけないでしょうか。 3Dではなく、平面です。 (たとえばX座標=100, Y座標=250を起点に回転させる場合など) 以上、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ワールド座標系で回転

    こんにちは。3Dプログラムの仕事の指示を受けました。 3Dプログラムは無知でして見よう見まねで行っています。 現在回転行列について困っています。 正方形のモデルをY軸に45度、X軸に45度回転させようとしています。 現在はモデルのローカル座標系で回転するのでY軸の回転でローカル座標系が変わった後にX軸で回転します。これを相対変換と言えばよろしいのでしょうか。 WorldMatrix = RotationX(AngleX) ; WorldMatrix *= RotationY(AngleY) ; WorldMatrix *= RotationZ(AngleZ) ; 上記の回転ではなく、ワールド座標系で回転させたいのですが、このときの回転行列はどのようにして求めればよろしいのでしょうか? Y軸に45度回転させても座標系はそのまま。そしてX軸で45度させるためにはどのようにすればよろしいのでしょうか? わかりづらいですが添付した図のようになればと思っています。

  • 座標変換による回転角の求め方

    直交座標系で定義されている任意のベクトル(x1、y1、z1)に対し、そのベクトル方向に直交座標系のz軸が向くようにするための各軸回りの回転角(θx、θy、θz)の求め方(式)を教えてください。

  • 線形代数学 ベクトル(0,1,1)を軸とするθの回転を与える行列

    線形代数学を最近学び始めて、いきずまってしまいました。 任意のベクトル(でいいのかな)を軸とするθの回転を与える行列を求める問題です。 問題として 3次元ユークリッド空間に直交座標x,y,zを入れて考える。 (1)x軸の周りのπ/4だけの回転を表す行列Qを求めよ。 (2)ベクトル(0,1,1)を軸とするθの回転を与える行列Q(-1)Rz(θ)Qを計算せよ。  ※Q(-1)はQの逆行列です。Rz(θ)はz軸の周りのθ回転の行列です。 (2)がわからなくて困っています。 行列Q(-1)Rz(θ)Qという形は対角化の形に似ているのですが、 これは、対角化を考えた時に、ベクトルが(0,1,1)がx軸と直角に交わっているからQが直行行列になるのかな~とか、思うのですが、 θ回転するのに対角行列が出てくる意味が少しわからないので、 (2)でなぜ行列Q(-1)Rz(θ)Qになるのか、解説をお願いします。 ちょっとわかりにくい文章になってしまってるかもしれませんが、 申し訳ありません・・・。

  • 続、VB 座標軸の回転?

    昨日 http://okwave.jp/qa/q7871613.html で質問したものです。 プログラムを作っていて上手に動かないので再度質問です。 xx = x0 - cx yy = y0 - cy x= xx * cosA - yy * sinA + cx y= xx * sinA + yy * cosA + cy x0 = x y0 = y xx:Xの中心からの相対座標 yy:Yの中心からの相対座標 x0:Xの現在地 y0:Yの現在地 cx:三角形の中心X cy:三角形の中心Y x:座標変換後のX y:座標変換後のY A:角度 このようにプログラムしたのですが、回転をさせると渦巻き状に広がってしまいます。 以下のようにプログラミングしたつもりなのですが、うまくいきません。 悪そうな部分を教えてくれるとありがたいです。 >> リーダーの座標を実座標を差し引いて原点(0,0)とし、メンバーの座標をリーダーからの相対座標(x1,y1)(x2,y2)・・・・とします 例えばメンバー(x1,y1)をリーダー中心に半時計周りへ10度回転させた場合の、移動先の座標を(xx1,yy1)とすると・・・ θ=10度(VBではラジアン単位へ変換してください) xx1=x1 * cosθ - y1 * sinθ yy1=x1 * sinθ + y1 * cosθ これで回転して移動した先xx1、yy1が求まります。 最初に差し引いた実座標を足して戻して完成です。

ExcelでCTRL+SHIFT+Lが使えない
このQ&Aのポイント
  • Windows10 Lenovo ideapad 330でExcelのCTRL+SHIFT+Lが使えない問題について
  • AMD Softwareがキーの割り付けを変えているため、ExcelでCTRL+SHIFT+Lが使えない可能性があります
  • 解決策としては、AMD Softwareを削除することが考えられます
回答を見る

専門家に質問してみよう