code: def centroid(*args):
      """Find the centroid (center of mass) of the collection containing only Points,
      Segments or Polygons. The centroid is the weighted average of the individual centroid
      where the weights are the lengths (of segments) or areas (of polygons).
      Overlapping regions will add to the weight of that region.
  
      If there are no objects (or a mixture of objects) then None is returned.
  
      See Also
      ========
  
      sympy.geometry.point.Point, sympy.geometry.line.Segment,
      sympy.geometry.polygon.Polygon
  
      Examples
      ========
  
      >>> from sympy import Point, Segment, Polygon
      >>> from sympy.geometry.util import centroid
      >>> p = Polygon((0, 0), (10, 0), (10, 10))
      >>> q = p.translate(0, 20)
      >>> p.centroid, q.centroid
      (Point2D(20/3, 10/3), Point2D(20/3, 70/3))
      >>> centroid(p, q)
      Point2D(20/3, 40/3)
      >>> p, q = Segment((0, 0), (2, 0)), Segment((0, 0), (2, 2))
      >>> centroid(p, q)
      Point2D(1, 2 - sqrt(2))
      >>> centroid(Point(0, 0), Point(2, 0))
      Point2D(1, 0)
  
      Stacking 3 polygons on top of each other effectively triples the
      weight of that polygon:
  
      >>> p = Polygon((0, 0), (1, 0), (1, 1), (0, 1))
      >>> q = Polygon((1, 0), (3, 0), (3, 1), (1, 1))
      >>> centroid(p, q)
      Point2D(3/2, 1/2)
      >>> centroid(p, p, p, q) # centroid x-coord shifts left
      Point2D(11/10, 1/2)
  
      Stacking the squares vertically above and below p has the same
      effect:
  
      >>> centroid(p, p.translate(0, 1), p.translate(0, -1), q)
      Point2D(11/10, 1/2)
  
      """
      from .line import Segment
      from .polygon import Polygon
  
      if args:
          if all(isinstance(g, Point) for g in args):
              c = Point(0, 0)
              for g in args:
                  c += g
              den = len(args)
          elif all(isinstance(g, Segment) for g in args):
              c = Point(0, 0)
              L = 0
              for g in args:
                  l = g.length
                  c += g.midpoint * l
                  L += l
              den = L
          elif all(isinstance(g, Polygon) for g in args):
              c = Point(0, 0)
              A = 0
              for g in args:
                  a = g.area
                  c += g.centroid * a
                  A += a
              den = A
          c /= den
          return c.func(*[i.simplify() for i in c.args])
  
imports: from collections import deque
  from math import sqrt
  from sympy import nsimplify
  from .entity import GeometryEntity
  from .exceptions import GeometryError
  from .point import Point, Point2D, Point3D
  from sympy.core.containers import OrderedSet
  from sympy.core.exprtools import factor_terms
  from sympy.core.function import Function, expand_mul
  from sympy.core.numbers import Float
  from sympy.core.sorting import ordered
  from sympy.core.symbol import Symbol
  from sympy.core.singleton import S
  from sympy.polys.polytools import cancel
  from sympy.functions.elementary.miscellaneous import sqrt
  from sympy.utilities.iterables import is_sequence
  from mpmath.libmp.libmpf import prec_to_dps
label_desc: Use image node_id 5 for calling a global function with example usage: centroid() and returns: c