Valuta l'area del piccolo campo riproddotto in scala a lato. | ||
Ecco, sotto, l'illustrazione di alcune possibili strategie: |
Il contorno, rosso, con cui il campo è stato approssimato nella prima cartina ha vertici che stanno nei punti di incrocio della reticolatura. Possiamo poi suddividere il poligono ottenuto in rettangoli e triangoli con un lato orizzontale o verticale che sta sul reticolato e valutare facilmente l'area. Ecco il calcolo (qui svolto con R, ma poteva ovviamente essere fatto a mano, con altro software o con la CT):
((4*4+5*2+2*2+5+5+7*3+5*6+5*1)/2+5)/4
[1] 13.25
Parti racchiuse in più e parti in meno grosso modo
si compensano; possiamo valutare in un qudretto (ossia in 0.25 = 1/4 di metro quadrato)
la precisione della valutazione, e prendere 13 metri quadrati come valore dell'area.
Un'altra strategia consiste nel valutare l'area nel modo fatto nella
seconda figura: approssimarla per quanto possibile con una quadrettatura e poi
nei punti in cui è meno facile ricorrere a dei triangolini, sempre
sfruttando la reticolatura:
((5+3+2)/2+5+6*2+7*3+5+3+2)/4
[1] 13.25
Otteniamo lo stesso valore.
Un altro modo, più semplice, era quello di approssimare
il campo con un poligono, come nella prima figura, e poi
usare la formula che dalle coordinate dei vertici del poligono
ricava l'area di esso (vedi).
Ecco i calcoli fatti con R (metto in xP i valori delle ascisse dei
punti e in yP quelli delle ordinate; aggiungo in entrambi i casi il
primo valore, in modo da faciitare la scrittura della formula; i valori
in xP e in yP sono quindi nP+1; quindi effettuo il calcolo):
xp = c(0.5,1,4,4.5,3,4.5,2,0,0.5)
yp = c(0,0,1,2.5,3,3.5,4.5,2.5,0)
np = length(xp)-1
area =0; for(i in 1:np) {area = area + (yp[i]+yp[i+1])*(xp[i]-xp[i+1])}; area/2
[1] 13.25
Ovvero, usando una libreria: | |
source("http://macosa.dima.unige.it/r.R") xp = c(0.5,1,4,4.5,3,4.5,2,0,0.5) yp = c(0,0,1,2.5,3,3.5,4.5,2.5,0) PLANE(0,5, 0,5); spezzata(xp,yp,"blue") areaPol(xp,yp); centerPol(xp,yp) 13.25 2.135220 2.158805 |
In alternativa, da rete, posso usare semplicemente questo script: areaPol.
Ovvero potevo stimare le coordinate di un po' di punti e utilizzare le "spline" per
approssimare il contorno e, quindi, valutare l'area (vedi):
BF=3; HF=3; PLANE(0,4.5, 0,4.5); gridh((0:4)+1/2); gridv((0:4)+1/2) x=c(0.3, 0.7,2.5, 4,4.2, 4.3,3.25,4.25, 4,3.5,2.5,1.5,0.8, 0.5, 0.25,0.25,0.28) y=c(0.1,0.05,0.4,0.85,1.5, 2.3, 3, 3.5,3.9,4.2,4.3, 4,3.1, 2.75, 2.5, 2, 0.5) Point(x,y,"brown"); splinC(x,y,"red",NULL) areaPol(splineCx(x,y),splineCy(x,y)) # 13.33845 Assumo 13.3 centerPol(splineCx(x,y),splineCy(x,y)) # 2.214141 2.129059
Per altri commenti: approssimazioni, calcolo approssimato e area neGli Oggetti Matematici.