Running simulations and extracting data from Blender for analysis
This is a very interesting question, and I would love to see what you come up with. I just spent some time trying to figure out A). I've looked before without luck, but today I discovered the object matrix_local contains the current translation matrix of an object. That means you can do this to find out the location, rotation, and scale:
import bpy

C = bpy.context
D = bpy.data

loc, rot, sca =  D.objects['Sphere'].matrix_local.decompose()
print('Location:', loc, '\nRotation:', rot, '\nScale:', sca)

You can find distance from the origin with:
loc.magnitude

And finally:
 (Vector( (1,1,1) ) - loc).magnitude

gives the distance from the point (1,1,1).
See the docs on Blender Matrix and Vector types and this answer on accessing matrix elements