プロが教えるわが家の防犯対策術!

3次元のベクトル(?)に関して質問させてください。

いまxyz座標の3次元空間の中に原点O(0,0,0), 点A(ax,ay,az), 点B(bx, by, bz)の3つの点があるとします。
3次元空間の中に3つの点があるので、これら3点を通る平面がひとつだけ決まります。

この平面がXY平面となるような、新しいXYZ空間を下記の条件で定義したいです。
原点O(0,0,0)に対応する点   → O'(0, 0, 0)
点A(ax,ay,az)に対応する点  → A'(αx, 0, 0) ただし αx = √(ax^2 + ay^2 + az^2)
点B(bx, by, bz)に対応する点 → B'(βx, βy, 0)

このときのβx, βyの決め方を教えていただけないでしょうか?
(おそらくβyの符号で2通りあると思います)

-----

具体的な目的は、以下のようなものです。

xyz座標の関数として値が決まるf(x, y, z)があります。
これを点O, A, Bを通る平面上でメッシュを切って計算しました。

この結果をgnuplotのpm3d mapでグラフ化したいのですが、gnuplotの入力は以下のようなフォーマットです。

X1 Y1 f(x1,y1,z1)
X2 Y2 f(x2,y2,z2)
X3 Y3 f(x3,y3,z3)
X4 Y4 f(x4,y4,z4)
...

そこでxyz空間の平面OAB上の点Pn(xn,yn,zn)を対応するXY平面上の点Pn'(Xn,Yn)に変換したいです。
よろしくお願いします。

A 回答 (2件)

回転ですね。



まず、Z軸を回して A の Y成分を 0 にする。
次に、Y軸を回して A の Z成分を 0 にする。
最後にX軸を回して Bの Z成分を 0 にする。

例えば、Z軸を回して A の Y成分を 0 にするには

(ax, ay, 0)のx軸との角度を求め、X軸との角度が0になるように
回転すればよい。

こんな感じです。各軸の回転行列を紹介しているサイトは
山ほどあるので、参照してみてください。
    • good
    • 0
この回答へのお礼

回転行列の解説サイトは、以下のようなものですね。
http://www.geisya.or.jp/~mwm48961/kou2/linear_im …

例えばz軸を中心に回転させてA(ax, ay, az)のy成分を0にする場合

A(ax, ay, az)からz=0の平面に落とした『影』は P(ax, ay, 0) である。
OPとx軸のなす角をθとおくと、y成分をゼロにするためにはPをz軸を中心に -θ だけ回転させればよい。
回転させた後の座標をP'(ax', ay', 0)と置くと

ax' = ax*cos(-θ) - ay*sin(-θ)
ay' = ax*sin(-θ) + ay*cos(-θ)

ここで sin(-θ) と cos(-θ) は

sin(-θ) = - sin(θ) = - ay / √(ax^2 + ay^2)
cos(-θ) = cos(θ) = ax / √(ax^2 + ay^2)

よって
ax' = (ax^2 + ay^2) / √(ax^2 + ay^2) = √(ax^2 + ay^2)

また
ay' = (-ax*ay + ay*ax) / √(ax^2 + ay^2) = 0
で確かにy座標がゼロになることが確認できる。

なるほど!いけそうです。
ありがとうございました!

お礼日時:2014/09/22 11:41

直交座標でなくてもよければ、3次元空間の原点Oと点A,Bの3点を通る平面は、



ベクトルOAの軸と、ベクトルOBの軸で記述できますよ。

α(ベクトルOA)+β(ベクトルOB)で、原点Oから冒頭の平面上の任意の点までのベクトルが記述できます。つまり、OAをx軸とみなしてαがx座標、OBをY軸とみなしてβがy座標、という表現ができます。

OBをOAに直交させたければ、内積が0になるようにOB’を求めてY軸としてもよいですし、

OAもOBも単位ベクトルにしたければ、比例計算でOA’やOB’という2軸の単位ベクトルにしてもよいですし。
    • good
    • 0
この回答へのお礼

すみません。
おそらく私の質問のタイトルが良くなかったせいだと思いますが、意図が伝わらなかったようです。

ベクトルOAとOBは、平面OAB上の任意の点を指定するために使っており、数学的にそのようなことが可能であることは存じております。
私が問題にしていたのは、ソフトウエアを使う上でのテクニカルな話で、グラフ描画ソフトの入力データとするためには、z成分を持たない二次元の直交座標系で位置を指定してやる必要があるが、どうすればいいのか分からないという事でした。

とはいえ、素早いレスをいただけたことはとても感謝しております。ありがとうございました。

お礼日時:2014/09/22 11:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!