def get_project_uv(A, R, X, Y, Z):
    (fx, fy, cx, cy) = (A[0][0], A[1][1], A[0][2], A[1][2])
    (r11, r12, r13, t1) = (R[0][0], R[0][1], R[0][2], R[0][3])
    (r21, r22, r23, t2) = (R[1][0], R[1][1], R[1][2], R[1][3])
    (r31, r32, r33, t3) = (R[2][0], R[2][1], R[2][2], R[2][3])
    s = ((((r31 * X) + (r32 * Y)) + (r33 * Z)) + t3)
    u = ((((((((fx * r11) + (cx * r31)) * X) + (((fx * r12) + (cx * r32)) * Y)) + (((fx * r13) + (cx * r33)) * Z)) + (fx * t1)) + (cx * t3)) / s)
    v = ((((((((fy * r21) + (cy * r31)) * X) + (((fy * r22) + (cy * r32)) * Y)) + (((fy * r23) + (cy * r33)) * Z)) + (fy * t2)) + (cy * t3)) / s)
    return (u, v)
def get_project_uv(A, R, X, Y, Z):
    (fx, fy, cx, cy) = (A[0][0], A[1][1], A[0][2], A[1][2])
    (r11, r12, r13, t1) = (R[0][0], R[0][1], R[0][2], R[0][3])
    (r21, r22, r23, t2) = (R[1][0], R[1][1], R[1][2], R[1][3])
    (r31, r32, r33, t3) = (R[2][0], R[2][1], R[2][2], R[2][3])
    s = ((((r31 * X) + (r32 * Y)) + (r33 * Z)) + t3)
    u = ((((((((fx * r11) + (cx * r31)) * X) + (((fx * r12) + (cx * r32)) * Y)) + (((fx * r13) + (cx * r33)) * Z)) + (fx * t1)) + (cx * t3)) / s)
    v = ((((((((fy * r21) + (cy * r31)) * X) + (((fy * r22) + (cy * r32)) * Y)) + (((fy * r23) + (cy * r33)) * Z)) + (fy * t2)) + (cy * t3)) / s)
    return (u, v)