私は 3D ボックスを持っています: center point = (a,b,c)
, width = w
, height = h
, depth = d
.
中心点は原点ではありません。
私は箱の上にボールを持っています(お互いに触れます)、center
それとradius
.
私は箱を回転させることができます(X軸の周りですが、その中心は同じままです..)そして、ボールが箱にくっついたままになりたいです。そのため、ボールをボックスで回転させる必要があります。
回転角度は 45 度です。
私はこれをやろうとしました:
X 軸を中心に回転行列を定義しました。
mat[3][3]
1, 0 , 0
0, cos(45), -sin(45)
0, sin(45), cos(45)
ボールの中心ベクトルを掛けます。
(ball.Center().m_x , ball.Center().m_y, ball.Center().m_z) * mat
だから私は得た:
Point3D new_center(ball.Center().m_x,
ball.Center().m_y*cos(45) + ball.Center().m_z*sin(45),
-(ball.Center().m_y)*sin(45) + ball.Center().m_z*cos(45));
ball.Center() = new_center;
ボックスを回転させたときにボールが実際に回転しますが、遠すぎます。どうすれば修正できますか?