I am writing a program to render an asteroid as seen from various parts of the solar system. My goal is to roughly reproduce the image of Cacus according to information on its DAMIT detail page.

Here is my approach:

  1. Create a solar system at JD0=2443568.0. The axes of the visualization are arranged according to the ecliptic with positive X axis in the direction of the vernal equinox and other axes according to the right-hand rule. Earth is positioned at t=JD0. (image)

  2. Place the asteroid at (0, 0, 0) and begin to rotate the object according to the matrix multiplication described by the Description page and Kaasalainen & Torppa 2001:

    • φ0=0 and t=JD0, so there is no initial Z axis rotation

    • Latitude β is -63, so rotate 90 - (-63) = 153 degrees on the Y axis (image)

    • Longitude λ is 251, so rotate the object 251 degrees anticlockwise around the Z axis of the ecliptic (image)

  3. Using ephemeris from the NASA/JPL Small Body Database, move Cacus to its position in orbit at JD0. (image)

  4. Move the camera to Earth's position at JD0 and point it at the asteroid. (image)

My final rendering does not match the projection from DAMIT. I understand that there are factors like light-time correction that I'm not including, but it looks completely different.

What is wrong with my approach to rotating the asteroid on its spin axis?

My rendering of Cacus

(The work-in-progress visualization is online here)

  • $\begingroup$ Obvious questions first: Did you convert the $\beta$ and $\lambda$ angles to radians before attempting to use them in a rotation matrix? $\endgroup$
    – cms
    Commented Feb 13, 2019 at 16:50
  • $\begingroup$ I am indeed converting the angles to radians $\endgroup$
    – ty.
    Commented Feb 13, 2019 at 20:13
  • $\begingroup$ How are you determining where the Earth is at jd0? $\endgroup$
    – cms
    Commented Feb 13, 2019 at 21:16
  • $\begingroup$ @cms If you are willing to read code, here is the function I wrote to compute heliocentric coords from ephemeris: gist.github.com/typpo/e20da5a9976edd28511240b9248f00fe I am using ephem for EM Barycenter from ssd.jpl.nasa.gov/?planet_pos $\endgroup$
    – ty.
    Commented Feb 15, 2019 at 1:00
  • $\begingroup$ @cms I've detailed my process for heliocentric position here: astronomy.stackexchange.com/questions/29575/… $\endgroup$
    – ty.
    Commented Feb 20, 2019 at 1:19

1 Answer 1


From the paper by M. Kaasalainen, J. Torppa, and K. Muinonen, equation (1) is:

$$ \vec r_{ast} = R_z(\omega(t-t_0)+\phi_0) R_y(\hat\beta) R_z(\lambda) \vec r_{ecl} $$

To reverse this equation you must reverse the order of the rotations and the rotation angles: $$ \vec r_{ecl} = R_z(-\lambda)R_y(-\hat\beta)R_z(-\omega(t-t_0)-\phi_0) \vec r_{ast} $$

From your description, you reversed the order of the rotations but not the rotation angles.

  • $\begingroup$ Looking at the paper and at the DAMIT description webpage, I can't reconcile the two transformations. They claim to use the same handedness for their rotations but the two equations are inverses of each other. $\endgroup$
    – cms
    Commented Feb 13, 2019 at 17:40
  • $\begingroup$ Thank you @cms. Given 𝛽̂ = 90 - 𝛽, t=t0, and phi0=0, my final transformation is 𝑟⃗_𝑒𝑐𝑙=𝑅𝑧(−𝜆)𝑅𝑦(−(90-𝛽) )𝑅𝑧(0)𝑟⃗_𝑎𝑠𝑡. I'm first rotating -(90-𝛽) =-153 around Y, then -𝜆=-251 around Z. It still doesn't look quite right, but a small manual rotation matches the DAMIT rendering. Maybe it's accounted for by minor differences in ephemeris or other factors. I'm a little skeptical but at this point it's hard to be sure. I've also updated the interactive rendering accordingly. $\endgroup$
    – ty.
    Commented Feb 13, 2019 at 20:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .