3次元空間上の2つの座標、 座標A と 座標B から
A -> B の角度を求めるにはどうしたらよいでしょうか?
Pythonでプログラムを組んでいるのですが調べてもイマイチ3次元での方法がわからなかったため質問しました。
多分座標Aにオブジェクトがあると仮定した時、
そのオブジェクトを座標Bに向けるというのと同じようなことをすればいいのではと考えて
調べているのですがわかりません。
2次元ではatanを利用すれば出来るようなのですが
3次元の方法がわからなかったため質問しました。
座標A:(xA, yA, zA)
座標B:(xB, yB, zB)
求めたい結果:Rotation(xR,yR,zR)
空間的には
+X 左
+Y 上
+Z 正面
になっています。
Pythonの方法でなくても言語などは問わないので分かる人教えて下さい。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
あなたが期待しているのは、どんな結果なのですか?
「これで近い向きにはなっていますがやはりずれています」とは、どんな方法で確認したものなのでしょうか?
A(5,5,5) から B(10,10,10)への角度は
B-A=(10-5,10-5,10-5) = (5,5,5) のベクトルと並行な角度になります。
角度をこのままX,Y,Z座標で表す方法もあります。
大きさで割った 単位ベクトル を角度として使用することもあります。
平面なら角度は1つで済みますが、立体では2つ必要です。
X-Y平面上でどの向きかを示す「方位角」 と 上下にどのくらいかの「仰角」の組合せはよく使われます。
(5,5,5)ベクトルの方位角は45度、仰角は35.26...度 で、合ってます。
何に使ってるかわかりませんが、Vector3D[0]が方位角、Vector3D[2]に仰角、って使い方が間違っているということは無いですか?
ありがとうございます!
方位角と仰角を正しく理解していなかったみたいです。
方位角と仰角について調べたところ思った結果が得られるようになりました!
No.2
- 回答日時:
うーん、これは難しい。
> 3次元空間上の2つの座標、 座標A と 座標B から
> A -> B の角度を求めるにはどうしたらよいでしょうか?
文面通り受け取るのなら、つまりベクトルAとベクトルBが「成す角度」を求めたいのなら、単に二次元と同じになります。
高校数学で習ったと思いますが、こういう場合は単に「内積」を使えばオーケーです。
つまり、ベクトルaとベクトルbが成す角度θは
ベクトルa * ベクトルb = |ベクトルa||ベクトルb|*cosθ
の関係にあるんで、
cosθ = ベクトルa * ベクトルb/ |ベクトルa||ベクトルb|
だと高校数学では習います。
従って、
θ = arccos(ベクトルa * ベクトルb/ |ベクトルa||ベクトルb|)
で「ベクトルaとベクトルbが成す"平面上"での角度」は自然に求めるわけですが、これが質問者さんが求めてるモノなのかどうか、ってのが分からないんですよねぇ。
ここではPython2.7.6を使いますが、取り敢えず、vectorってオブジェクトはPythonビルトインではなかった筈なんで、ベクトルの代わりにリストを用いますが、「上の論法で良いのなら」大体次のように計算します。
>>> import math # 数学ライブラリをインポート
>>> a = [5, 5, 5] # ベクトルaの定義
>>> b = [10, 10, 10] # ベクトルbの定義
>>> dot_product = sum([i[0] * i[1] for i in zip(a, b)]) # ベクトルaとベクトルbの内積を求める
>>> dot_product
150 # ベクトルaとベクトルbの内積。5×10+5×10+5×10になるからこれは正しい。
>>> abs_a = math.sqrt(sum(i**2 for i in a)) # ベクトルaの長さを求める
>>> abs_a
8.660254037844387 # √(5^2+5^2+5^2) の答えと一致する
>>> abs_b = math.sqrt(sum(i**2 for i in b)) #ベクトルbの長さを求める
>>> abs_b
17.320508075688775 # √(10^2+10^2+10^2) の答えと一致する
>>> angle = math.acos(dot_product/(abs_a * abs_b)) # θ = arccos(ベクトルa * ベクトルb/ |ベクトルa||ベクトルb|)を計算
>>> angle
2.1073424255447017e-08 # ベクトルaとベクトルbが成す角度
No.1
- 回答日時:
vec1 = Vector3d(5, 5, 5)
vec2 = Vector3d(10, 10, 10)
rot = Vector3d(0, 0, 0)
rot[0] = atan2( vec2[0] - vec1[0], vec2[2] - vec1[2] )
rot[2] = -atan2(vec2[1]-vec1[1], sqrt(pow(vec2[2]-vec1[2], 2)+pow(vec2[0]-vec1[0], 2)))
print rot
print (degrees(rot[0]), degrees(rot[1]), degrees(rot[2]))
結果:
FBVector3d(0.785398, 0, -0.61548)
(45.0, 0.0, -35.264389682754654)
記述してみました。
実行はできました。
これで近い向きにはなっていますがやはりずれています。
ちなみにこの結果は正しいんでしょうか?
何かミスがあれば指摘お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
- 数学 2次関数y=ax^2のグラフは点A(4,2)を通っている。y軸上に点BをAB=OB(Oは原点)となる 1 2022/04/08 00:05
- 数学 線形代数の2次元直交座標系、極座標系についての問題がわからないです。 2 2022/07/16 20:42
- 数学 この問題が分かりません! 右図の直線①②の式は、y=-x+4①、 y=3/4x+1② である。2つの 3 2022/05/04 22:29
- 物理学 量子力学 生成消滅演算子 2 2022/08/04 23:17
- 数学 ベクトル方程式(ヘッセの標準形)についての質問 2 2022/04/23 18:00
- 宇宙科学・天文学・天気 自分達が生きてる世界は4次元座標なのですか? 3次元空間に時間軸を足したものが4次元だと習ったのです 5 2022/07/26 14:03
- 数学 極座標A(2,π/6)となる点を通り、OAに垂直な直線lの曲方程式を求めよ という問題を直交座標を利 1 2022/08/04 17:31
- 数学 焦点のx座標が3、準線が直線x=5で、点(3.1)を通る放物線の方程式を求めよという問題について質問 4 2023/07/14 00:13
- 数学 ベクトルの単元で、 平行四辺形の頂点A、B、Cの座標が与えられて、Dの座標を聞かれる問題がありますが 1 2022/07/04 04:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
三次元の座標の回転をExcelで計算したい。回転行列?
Excel(エクセル)
-
二点の座標から角度を求めるには?
数学
-
三次元空間の3点のなす角度
数学
-
-
4
空間座標の角度の求め方
数学
-
5
3次元座標2点からの直線式の求め方
数学
-
6
3次元空間での傾き、切片の求め方
数学
-
7
X軸方向の角度とY軸方向の角度の合成
数学
-
8
エクセルでθを求めたい。
Excel(エクセル)
-
9
ベクトルをロールピッチヨーに変換する方法
数学
-
10
3次元空間上の2点を結ぶ線分の中点を知りたい
数学
-
11
一本のベクトルに直交するベクトルについて
数学
-
12
距離、方位角から座標を求める方法
数学
-
13
3次元座標を原点中心に回転したい
数学
-
14
角度からベクトルに変換するにはどうしたら良いでしょうか。例えばX方向にx°、Y方向にy°、Z方向にz
計算機科学
-
15
3次元図の角度と辺の長さを求める仕方を教えてください。
数学
-
16
3次元空間内での線分の交差判定について
数学
-
17
ある点からある直線へ降ろした垂線の交点
数学
-
18
3次元の座標変換と角度について。
数学
-
19
3次元ベクトルをある軸ベクトルで回転させたい
数学
-
20
3次元の回転角度の求め方について教えてください。
数学
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マインクラフト(pc版)で座標...
-
グラフの交点の求め方(Excel)
-
求積表の計算方法
-
始点、終点の二つの座標と半径...
-
ExcelやAccessで社内の端末の配...
-
VBで、開いているExcelシートの...
-
【C#】アクションゲームの地...
-
平面の方程式
-
UWSCでの変数の設定の仕方
-
エクセルシート上のマウスポイ...
-
弧の長さから角度を取得するには。
-
空間上の二点を結ぶ直線上に任...
-
6点からの楕円の近似計算(最...
-
ピッキングのお仕事ってきつい...
-
3次元空間上の2つの座標から...
-
VBで行列を使って3Dを描画する...
-
DirectXを使ってテクスチャ(画...
-
コントロールのドラック&ドロップ
-
指定した範囲の反転について
-
C++のプログラミングで座標平面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
3次元空間上の2つの座標から...
-
マインクラフト(pc版)で座標...
-
エクセルである点からの距離で...
-
求積表の計算方法
-
閉図形の座標の配列が右回りか...
-
エクセルで回転する座標の出し方
-
ワード上Shapeの位置情報を統一...
-
始点、終点の二つの座標と半径...
-
以下のプログラムは重心を求め...
-
シーケンサー(PLC?)で制...
-
ダイアログ内コントロールの位...
-
VBで、開いているExcelシートの...
-
Excel VBA で自在に図形を変化...
-
ピクチャボックスの座標取得
-
エクセルシート上のマウスポイ...
-
多角形の内部かどうか判定する方法
-
選択範囲の座標値の抽出
-
直線上にある点の座標の求め方
-
3D→2Dの座標変換で、スクリーン...
おすすめ情報