Vector Math to Determine Gravity Path
Project plane normal in z direction onto plane.

Here is a test script. Adds a randomly (random 0 to 1 radian rotation on x, y, z) rotated unit circle ngon at cursor, and places an empty on global edge low point.


The normal of the plane is its local z axis.
Global -z axis is considered down.
Find The vector intersection of the line from tip of normal in -z
direction to the plane. Used mathutils.geometry.intersect_line_plane(...)
Result is the "downhill" vector.


lowest point on circle edge will be
centre plus the normalized (unit length) downhill vector.



Test script: 

import bpy
from random import random
from mathutils import Vector
from mathutils.geometry import intersect_line_plane as ipp

bpy.ops.mesh.primitive_circle_add(fill_type='NGON')
ob = bpy.context.object
ob.rotation_euler = Vector(random() for axis in 'xyz')
z = Vector((0, 0, 1))
bpy.context.scene.update()
mw = ob.matrix_world

n = (mw.to_3x3() @ z).normalized()
p = mw.translation
v = ipp(p + n, p + n - z, p, n)
bpy.ops.object.empty_add(location=p + (v - p).normalized())