Find a position of a point in 3d space moving around a vector with uniform circular motion
Let's say I have a point A in a 3d space, and I want to move it with a uniform circular motion around the unit vector n.
So I know the position vector of A, O and the unit vector 开发者_运维百科n (normal to the plane where O, A and B resides), and I know the angle AOB.
What is the quickest way to find the position of B ?
How about just applying the rotation matrix about an axis and angle?
In mathspeak, that would be OB = OA * cos(theta) + (OAxn) * sin(theta)
You will probably want to use Rodrigues' rotation formula. It is well suited for your very constrained problem (rigid body motion?). You probably won't need any more general, but also more complicated methods.
To answer the slightly more general question that your comment to Nemo poses, I'll assume that you have global points A and O and that you have a unit vector N and angle Φ and you want B. Here's how I'd do it. First find the projection of OA onto N (anchored on O). Then find O', which is the point you'll be rotating around. Then use the equations given by Jack V:
O' = O + dotP((A-O),N)N
B = O' + cos(Φ)(A-O') + sin(Φ)crossP(N,A-O')
Where dotP and crossP are dot and cross products.
精彩评论