A lato è tracciato un poligono e ne è determinata l'area mediante l'applicazione Cinderella. Prova a ottenere il medesimo esito mediante la stessa applicazione. Trova quindi come, senza ricorrere ad essa, ottenere il valore dell'area. | ![]() |
![]() |
Con Cinderella (vedi) traccio i punti (dopo aver selezionato la calamita ![]() ![]() |
Per trovare l'area "a mano" posso procedere come spiegato e indicato
qui:
Area = ((yA+yB)(xA-xB) + (yB+yC)(xB-xC) + (yC+yD)(xC-xD) + (yD+yA)(xD-xA)) / 2 =
((0+2)*(1-12)+(2+10)*(12-8)+(10+4)*(8-2)+(0+4)*(2-1))/2 = 57
Ecco come calcolare tutto ricorrere direttamente da rete allo script areaPol:
Si può fare tutto (calcoli e rappresentazione grafica) con WoframAlpha (vedi) introducendo:
centroid of polygon (1,0),(12,2),(8,10),(2,4)
Ecco come farne facilmente il calcolo con R usando gli algoritmi presenti nel file richiamato nella prima riga:
source("http://macosa.dima.unige.it/r.R") x <- c(1,12,8,2) y <- c(0,2,10,4) areaPol(x,y) # 57 centroPol(x,y) # 6.473684 4.105263
Ecco come farne il calcolo senza caricare "macosa.dima.unige.it/r.R" (introducendo le coordinate in verso antitorario):
x <- c(1,12,8,2) y <- c(0,2,10,4) n <- length(x); area <- (y[n]+y[1])*(x[n]-x[1]) for (i in 1:(n-1)) area <- area + (y[i]+y[i+1])*(x[i]-x[i+1]); area <- area/2 area # 57
Ecco come determinare le coordinate del centroide, a partire dalle istruzioni precedenti (rinviamo a questo documento per una spiegazione):
cx <- (x[n]+x[1])*(x[n]*y[1]-x[1]*y[n]); cy <- (y[n]+y[1])*(x[n]*y[1]-x[1]*y[n]) for (i in 1:(n-1)) { cx <- cx + (x[i]+x[i+1])*(x[i]*y[i+1]-x[i+1]*y[i]); cy <- cy + (y[i]+y[i+1])*(x[i]*y[i+1]-x[i+1]*y[i]) } cx <- cx/(area*6); cy <- cy/(area*6) cx; cy # 6.473684 ascissa e ordinata del centroide # 4.105263
Come si vede, sono diverse da quelle determinate da Cinderella.