[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);
}