Obviously we all know the sun generally rises in the east and sets in the west. But due to axial tilt, it is only really due east and due west at the equinoxes. At other times of the year, the sunrise will be somewhat north of east or south of east (and likewise for the sunset, but let's focus on the sunrise). At each solstice, the sunrise reaches either the furthest north or furthest south and then starts heading back towards east. I initially thought it would be trivial to determine this behaviour for any latitude. For any point on the equator, it was indeed quite simple. However, for points off the equator, the problem became quite difficult. I couldn't see any intuitive answer so I began a rigorous calculation of the geometry involved. It's quite messy, but it is a straight forward solution of simultaneous equations, followed by some rotations of the coordinate system. A computer would be required to actually calculate some values. I don't think there is an easier way to do it, but I'd love to know what you all think. I believe the problem is that moving off the equator makes the problem one of 3-d geometry, whereas on the equator, it is just planar geometry. For anyone who is interested, here is my method: - Define a right-handed cartesian coordinate system centered on the center of the Earth, pointing to 0 lat 0 long, 0 lat 90E long, and the north pole. - Determine the north vector for a given latitude and longitude. If the point we are considering is P and the north pole is N, the north vector is the normalised projection of the vector PN onto the tangent plane at P. This part is the messy bit. There are 3 equations, two of which are linear, and one of which is quadratic. Afterwards there is a plus-or-minus involved which gives the north and south vectors, but it is trivial to differentiate between the two. - Next we use the standard matrices to tilt the Earth, and rotate it so that P lies on the terminator line. - Now we project the P-sun vector onto the tangent plane and take a dot product with the north and east vectors, and we have our answer (more or less). I haven't implemented the rotational part yet, but that's all pretty standard, the sort of stuff you do in 3-D graphics programming. I plan on attempting it soon, but I'm rusty on my 3-D rotations so it will probably be a pain in the ***.