Drawing Arcs Connecting Two Points on a Sphere

I need to draw an arc between two points on a globe (missile command style) and I’ve been struggling trying to find a method that looks decent, and avoids clipping the sphere of the globe.

Currently, with the two points, I take the vectors they make from the center and average them. This should give me a vector between the two, and I use the resultant vector to find a point outside the globe (scaling by magnitude so it’s greater than the radius of the globe) and use this point as a control point for a bezier curve.

This works nicely if the points aren’t too far apart, but tends to clip through the sphere if they’re far apart. I also get inconsitent arc heights, even though every point is scaled by the same magnitude.

Does anyone have suggestions on how to improve this, or another way of going about drawing these arcs?


Assume that you have two radius vectors v and w. Take the cross product r = cross(v,w) and its absolute value lr = |r| and determine the angle between v and w as a = arcsin(lr/(|v|*|w|)).

The rotation of v with a given angle x about axis nr = r/lr is achieved by


All that remains is to draw an arc for the points obtained by letting x go from 0 to a.