Rotating a Point in Space, Function of time

In summary, the conversation discusses the problem of rotating a grid of points around the x-axis using a subroutine and the slow performance of using trigonometric functions. The solution proposed is to use a rotation matrix to rotate the points, which can be done efficiently by combining all the points into a single matrix multiplication. The conversation also mentions using a change in time to calculate the rotational velocity. The help is appreciated and the conversation ends with thanks.
  • #1
minger
Science Advisor
1,496
2
Hi guys, I have a problem that's bugging me. I am writing a subroutine, which basically takes a grid (collection of points in space), and rotates it around the x-axis at some given rotational velocity. I was doing it a very easy way. Basically:

Code:
x0 = 0.0
y0 = 0.0
dx = x - x0
dy = y - y0
radius = sqrt(dx*dx + dy*dy)
theta = atan(dy/dx)
theta = theta + dtheta
x = radius*cos(theta)
y = radius*sin(theta)

This works great, however it's very slow. To compute square roots and inverse trig functions in a computer code is very tedious, and when you need to do it for thousands or millions of gridpoints, it can take forever.

My idea was to just write a function for the gridpoints as a function of time alone. I won't be able to store any additional information, such as original or previous position. I had an idea of some sort of phase angle, and I think that would require that.

Also, I cannot simply find the velocity, and then calculate the displacement, and therefore new position, because apparently there are numerical problems and the grid could start to "walk" away from each other.

Hopefully I've explained this well enough, I appreciate any help.
 
Mathematics news on Phys.org
  • #2
How much linear algebra do you know?
 
  • #3
A bit. I'm finishing up my master's of science in Mech. Engineering. I have math background all the way through non-linear, high-order, transient partial diff. eqs.
 
  • #4
Really, What school?
 
  • #5
Ok, well hopefully this will make some sense then. Consider a single point, [itex]x_0,y_0,z_0[/itex] that gets rotated to x,y,z. Writing these points in vector notation,
[tex]\vec{x}_0 = \left(x_0,y_0,z_0\right)[/tex]

[tex]\vec{x} = \left(x,y,z\right)[/tex]

[itex]\vec{x}[/itex] and [itex]\vec{x}_0[/itex] are related by a rotation, and rotations are just a matrix multiplication. In other words, for a rotation matrix R (scroll down on the link for 3d version),
[tex]\vec{x} = R \vec{x}_0[/tex]

The key point is that the same rotation matrix will rotate any points by the same angle, so you only need to calculate R once per timestep and just reuse it for all the points. This is nice because all the trig functions and expensive computations are in R.

----

Now if you want to go crazy efficient, you could even express the rotation of all the points in a single matrix multiplication. Call all the points you want to rotate [itex]\vec{x1},\vec{x2},...,\vec{x1000000}[/itex]. Then
[tex]\vec{x1} = R \vec{x1}_0[/tex]
[tex]\vec{x2} = R \vec{x2}_0[/tex]
...
[tex]\vec{x1000000} = R \vec{x1000000}_0[/tex]

These can be combined together into a single matrix multiplication:
[tex]\left[\vec{x1} | \vec{x2} | ... | \vec{x1000000} \right] = R \left[\vec{x1}_0 | \vec{x2}_0 | \vec{x1000000}_0\right][/tex]

Then you can use a matrix multiplication package to be super efficient (mathematicians have worked very hard to figure out really really efficient ways to multiply matricies).
 
Last edited:
  • #6
I think this is just what I'm looking for. It seems as though instead of using the 3D form of the equations, I will just ignore the x-component of the gridpoint location, and rotate it in R2 using the simple 2x2 rotation matrix (I assume this is fine, it doesn't make sense to me to use the 3D version if one is simply rotating around 1 axis).

I will have to change it up a little. Rather than rotation with a given speed, I'll just have to multiply the speed by the change in time and compute the d_theta.

Anyways though, I really appreciate the help maze. We have matrix operations classes in our program so I'm sure it won't be a problem to get it running fast.

Thanks again a bunch!
 

1. What does it mean to rotate a point in space?

Rotating a point in space means to change its position or orientation in relation to a fixed point or axis. This can be done in three dimensions (X, Y, Z axes) or in two dimensions (X, Y axes).

2. How is rotation in space represented mathematically?

Rotation in space can be represented using matrices, quaternions, or Euler angles. These mathematical representations allow for calculations and transformations of points and objects in space.

3. What is the function of time in rotating a point in space?

The function of time in rotating a point in space is to determine the angle of rotation at a given point in time. This allows for smooth and continuous rotation of the point as time progresses.

4. What factors can affect the rotation of a point in space?

The rotation of a point in space can be affected by factors such as the direction and speed of rotation, the point's distance from the axis of rotation, and any external forces acting on the point.

5. How is rotating a point in space useful in scientific research?

Rotating a point in space is useful in scientific research for visualizing and understanding complex systems and phenomena. It can also be used in simulations and experiments to study the effects of different rotational forces on objects in space.

Similar threads

Replies
1
Views
720
Replies
2
Views
1K
Replies
7
Views
1K
  • General Math
Replies
1
Views
902
Replies
33
Views
2K
Replies
4
Views
1K
Replies
1
Views
830
  • Introductory Physics Homework Help
Replies
1
Views
340
  • Differential Equations
Replies
6
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
992
Back
Top