[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:01622] Re: 回転軸について
ますい@JRIです
At 7:19 AM +0000 00.11.21, 山下 隆義 wrote:
> 山下といいます。以前にも投稿させて頂き、お世話になっています。
> さて、現在,回転軸についてかなり悩んでいます。
> 任意の点、例えばA(0.3,0.3,0,3)、B(0.5,0.5,0.5)を結んだ線を回転軸にしたいと
> 考えているのですが、どのようにすれば回転軸を決めれるのかがわかりません。
> Transform3Dで物体を回転させる際,AxisAngle4fで回転軸ベクトルの各成分と
> 回転角を決めると思うのですが、この場合、回転軸は原点から指定した点が軸になっ
> て
> いると思います。原点を通らない軸はどのように決めればよいのでしょうか?
任意軸の回転のことでしょうか?
そうだとすれば
一度原点に移動してやってから回転すればどうですか
以下のTransform3Dを作成してt3*t2*t1を求める
t1:点p1を原点に平行移動。
t2:原点を通る軸で回転移動
t3:それから、原点を点p1に戻す平行移動
コード例)
//軸p1-p2で角度angだけ回転させるTransformを求める
void xxxxx(Point3f p1,Point3f p2, float ang, Transform3D tran) {
Transform3D t1 = new Transform3D();
Transform3D t2 = new Transform3D();
Vector3f vt = new Vector3f(p2.x-p1.x,p2.y-p1.y,p2.z-p1.z); //
sub??とかあったかも
t1.set(1.0f, new Vector3f(-p1.x,-p1.y,-p1.z));
t2.setRotation(new AxisAngle4f(vt.x,vt.y,vt.z, ang));
tran.set(1.0f, new Vector3f(p1.x,p1.y,p1.z));
t2.mul(t1);
tran.mul(t2);
}