Source: tools/centroid.js

const Vector = require("./vector");

/**
 * Namespace for functions that get the centroid (the center) of a {@link PhSimObject}.
 * @memberof PhSim
 * @namespace
 */

const Centroid = {}

/**
 * Get centroid of any shape.
 * If it is a circle or a regPolygon, then `o` is returned because the properties `x` and
 * `y` already define the centroid of the object.
 * 
 * @param {PhSimObject} o 
 * @returns {Vector}
 */

Centroid.shape = function(o) {
	
	if(o.shape === "rectangle") {
		return Centroid.rectangle(o);
	}

	if(o.shape === "polygon") {
		return Centroid.polygon(o)
	}

	if(o.shape === "circle" || o.shape === "regPolygon") {
		return o;
	}

}

/**
 * 
 * Get centroid of a rectangle
 * 
 * @function
 * @param {PhSim.Static.Rectangle} rectangle
 * @returns {Vector}
 *  
 */

Centroid.rectangle = function(rectangle) {
	return {
		"x": rectangle.x + 0.5 * rectangle.w,
		"y": rectangle.y + 0.5 * rectangle.h
	}
}


/** 
 * Find Centroid of a polygon
 * @function
 * @param {Polygon} a - Path
 * @returns {Vector}
 */

Centroid.polygon = function(a) {
		
	var v = new Vector(0,0);
	
	for(var j = 0; j < a.verts.length; j++) { 
		v.x += a.verts[j].x;
		v.y += a.verts[j].y;
	}
	
	v.x = (1/a.verts.length) * v.x;
	v.y = (1/a.verts.length) * v.y;
	
	return v;

}

module.exports = Centroid;