source("http://macosa.dima.unige.it/r.R") # If I have not already loaded the library ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------S07Centroid (and Barycenter)# WithcenterPol(x,y) I have thecentroidof the polygon "x,y". See above on the left. BF <- 3; HF <- 3; x <- c(1,4,6,1); y <- c(0,1,6,4); PLANE(0,6,0,6) polyC(x,y,"green"); BOX(); Line(1,4, 4,1,"red"); LIne(1,0, 6,6,"blue"); centerPol(x,y) # 3.060606 2.939394 POINT(centerPol(x,y)[1],centerPol(x,y)[2],"brown") #LineandLIne(unlikeline, which tracks segments assegmbut thin) dot the # segments (with short/long dasches). # If the polygon were made of a sheet, the centroid would coincide with thebarycenter. # But centroid coordinates are not the average of the coordinates of the vertices. See # above in the center. BF <- 3; HF <- 3; x <- c(1,4,6,1); y <- c(0,1,6,4); PLANE(0,6,0,6) POINT(x,y,"seagreen"); u=mean(x); v=mean(y); POINT(u,v,"brown"); u;v # 3 2.75 # In the case ofisolated massesm1,m2, … located at the points x1,y1, x2,y2, …, if I # put m = c(m1,m2,…), x = c(x1,x2,…), y = c(y1,y2,…), the barycenter coordinates are: # sum(m*x)/sum(m); sum(m*y)/sum(m) But (equivalently) I can compute theweighted mean: #Wmean(x, m); Wmean(y, m) # See above on the right, where the blue objects have double mass: BF <- 3; HF <- 3; x <- c(1,4,6,1); y <- c(0,1,6,4); PLANE(0,6,0,6) POINT(x[1:2],y[1:2],"blue"); Point(x[3:4],y[3:4],"seagreen"); m=c(2,2,1,1); u=Wmean(x,m); v=Wmean(y,m) POINT(u,v,"brown"); u; v # 2.833333 2 # The centroid of Italy. # I can upload coordinates (separated by ",") from an external file. # For example, if I copy the coordinates that are in the penisola file and then paste # them, after I have typed: # I <- c( and finally ) in order to get: # I <- c( # 8,46, # 7.87,45.9, # ... # 8,46 # ) # Here's what I obtain with these other commands: X <-xTab(I); Y <-yTab(I) BF <- 4; HF <- 4; Plane(min(X),max(X), min(Y),max(Y)); polyline(X,Y, "blue") C <- centerPol(X,Y); C; POINT(C[1],C[2],"red")#12.18996 43.48932 Plane(min(X),max(X), min(Y),max(Y)); polyC(X,Y, "green"); polyl(X,Y, "red") POINT(C[1],C[2],"red") # It is "Cittą di Castello" (see) # See here for uploading data like those of "penisola" saved as atable(read.table), # also (usingdec=",") if they are written in Italian notation.# See here to determine theareaof thesurface of Italy, and to print it with a scale # showing (approximately) the kilometers:Other examples of use