source("")    # If I have not already loaded the library
If I have a surface described by a parametric or a polar definition I can use
centreParam(X,Y, a,b) or  centrePolar(R, a,b)  to find the centroid (or barycenter).
In  centreParamx, centreParamy  and  centrePolarx, centrePolary  you can find the

# semiellipse
HF=3; BF=3
PLANE(-1,1.5, -1,1.5)
X=function(t) cos(t)+1/2; Y=function(t) sin(t)*2/3
param(X,Y,0,pi,"black"); segm(-0.5,0, 1.5,0, "black")
centreParam(X,Y, 0,pi)
# 0.5000000 0.2829421
POINT(centreParamx,centreParamy, "blue")
# If we take:
# 8/9
# we find that y = 8/9/pi
# It is possible to prove it is (if B is the semiaxis) 4B/(3*π)
# In this case B = 2/3


# cardioid
R = function(t) 1-sin(t); PLANE(-2,2, -3,1); polar(R,0,2*pi, "red")
centrePolar(R, 0,2*pi)
#  1.013796e-15 -8.333333e-01
POINT(0,centrePolary, "brown")
# -5/6
# The third figure is a more complex case. We use centrePol (see here)
PLANE(-1,1.5, -1,1.5)                  # above also in another scale
A=function(t) t;  polar(A,0,5*pi,"red")
B=function(t) 1;  polar(B,0,2*pi,"blue")
X=function(t) t; Y=function(t) t-t; param(X,Y,0,2, "black")
# circle and spiral intersect in the point rho=1, theta=1
POINT(cos(1),sin(1),"black"); text(0.3,0.75,"P")
POINT(0,0,"seagreen"); text(-0.2,-0.2,"O")
POINT(1,0,"red"); text(1.2,0.2,"Q")
# I describe the curve OQPO putting the coordinates in X and Y
# OQ:
X[1]=0; Y[1]=0; X[2]=1; Y[2]=0
# QP:
i=seq(0,1,5000); da=1/5000; for(i in 1:5000) {X[i+2]=cos(da*i); Y[i+2]=sin(da*i)}
# PO:
for(i in 1:5000) {d=1-da*i; X[i+5002]=d*cos(d); Y[i+5002]=d*sin(d)}
# I verify (I get the brown chart that overlaps the previous one):
POINT(cos(1),sin(1),"green"); POINT(0,0,"green"); POINT(1,0,"green")
# The centroid
#  0.6697328  0.2825991
POINT(centerPol(X,Y)[1], centerPol(X,Y)[2], "blue"
# It is non easy to find the exact form. It is:
3*(cos(1)+2*sin(1)-2); 1+3*sin(1)-6*cos(1)
#  0.6697328  0.2825991                    OK!

Other examples of use