Trying to recall from my physics education, the mass centre is at the
averages of the coordinates of the corners, isn't it?

Perhaps for simple polygons it is... One thing it certainly isnt is the average of all the coordinates (a mistake I have seen geographers make!).


Here's some code derived from the java source code here: http://astronomy.swin.edu.au/~pbourke/geometry/polyarea/

You also get a PolygonArea function for free. Feed it a two-column matrix of X and Y coords. Out comes a vector of (x,y) for the centroid.

 PolygonArea <- function(polygon)
{
  N <- dim(polygon)[1]
        area = 0;

        for (i in 1:N) {
                j = 1+(i %% N)
                area = area + polygon[i,1] * polygon[j,2]
                area = area - polygon[i,2] * polygon[j,1]
        }

        area =area/2.0;
        return(abs(area))
}


PolygonCenterOfMass <- function(polygon) { N <- dim(polygon)[1] cx=0 ; cy=0 A=PolygonArea(polygon);

  factor=0;
  for (i in 1:N) {
    j = (i  %% N)+1
    factor=(polygon[i,1]*polygon[j,2]-polygon[j,1]*polygon[i,2])
    cx=cx+(polygon[i,1]+polygon[j,1])*factor
    cy=cy+(polygon[i,2]+polygon[j,2])*factor
  }
  A=A*6.0
  factor=1/A
  cx=cx*factor
  cy=cy*factor
  return(c(cx,cy))
}

Something like this will end up in my Rmap library......

Baz

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to