That’s a pretty inventive solution for using GPlates
For pyGPlates users out there this could be done with something like…
Use pygplates.LocalCartesian to convert your direction into a pygplates.Vector3D - for example to convert an azimuth direction at a specific latitude/longitude location to its equivalent 3D vector (in global x/y/z space). Then rotate that 3D vector using the reconstruction rotation in the form of a pygplates.FiniteRotation (obtained from a pygplates.RotationModel). Then convert back again to a paleo-direction using pygplates.LocalCartesian to convert the rotated 3D vector and the rotated location back to a paleo-azimuth.
The following example shows how to do this:
import math
import pygplates
# Initial location.
lat, lon = 10, 20
# Initial direction - azimuth is angle clockwise (East-wise) from North
direction_azimuth = 90 # East
# Plate ID to reconstruct with (or assign plate ID using pygplates.PlatePartitioner).
plate_id = 701
# Time to reconstruct to.
time = 100
rotation_model = pygplates.RotationModel(...)
rotation = rotation_model.get_rotation(time, plate_id)
# Initial location and direction.
location = pygplates.PointOnSphere(lat, lon)
cartesian = pygplates.LocalCartesian(location)
direction_vector = cartesian.from_magnitude_azimuth_inclination_to_geocentric(
(1, math.radians(direction_azimuth), 0))
# Paleo location and direction.
paleo_location = rotation * location
paleo_direction_vector = rotation * direction_vector
# Extract paleo direction azimuth from paleo direction vector and location.
paleo_cartesian = pygplates.LocalCartesian(paleo_location)
_, paleo_direction_azimuth, _ = paleo_cartesian.from_geocentric_to_magnitude_azimuth_inclination(
paleo_direction_vector)
paleo_direction_azimuth = math.degrees(paleo_direction_azimuth)