2017-10-09 7 views
2

J'essaie de comprendre comment calculer l'aire d'une section transversale d'une rivière.Calculer l'aire de la section transversale pour faire varier la hauteur

Pour la section transversale, j'ai la profondeur à tous les 25 cm sur la rivière de 5 m de large.

x_profile <- seq(0, 500, 25) 
y_profile = c(50, 73, 64, 59, 60, 64, 82, 78, 79, 76, 72, 68, 63, 65, 62, 61, 56, 50, 44, 39, 25) 

Si quelqu'un a des suggestions sur la façon dont cela pourrait être fait, il est très apprécié.

+0

Il ressemble à un problème d'intégration pour moi. Je voudrais l'approcher en utilisant l'interpolation linéaire et en appliquant la formule de quadrature (le choix le plus évident étant [règle trapézoïdale] (https://en.wikipedia.org/wiki/Trapezoidal_rule)). La formule simplifie essentiellement jusqu'à une somme sur «i» de «step * depth_i», où «step = 0.5m». – tonytonov

Répondre

5

Nous pouvons utiliser le package sf pour créer un polygone présentant la section, puis calculer la surface. Notez que pour créer un polygone, il est nécessaire de fournir trois autres points comme c(0, 0), c(500, 0) et c(0, 0) lors de la création de la matrice m.

x_profile <- seq(0, 500, 25) 
y_profile <- c(50, 73, 64, 59, 60, 64, 82, 78, 79, 76, 72, 
       68, 63, 65, 62, 61, 56, 50, 44, 39, 25) 

library(sf) 

# Create matrix with coordinates 
m <- matrix(c(0, x_profile, 500, 0, 0, -y_profile, 0, 0), 
      byrow = FALSE, ncol = 2) 

# Create a polygon 
poly <- st_polygon(list(m)) 

# View the polygon 
plot(poly) 

enter image description here

# Calcualte the area 
st_area(poly) 
31312.5 
+0

Merci beaucoup! Ça a l'air génial! Des idées sur la façon dont je pourrais calculer la surface en fonction du niveau de l'eau, lorsque l'eau commence à remplir la section transversale, en commençant par le point le plus profond? – Nicolle

+0

@Nicolle Je ne sais pas encore. Une idée consiste à utiliser une ligne indiquant la profondeur pour diviser le polygone et calculer la superficie. – www

+0

@Nicolle Par ailleurs, ce n'est pas une bonne idée de changer votre question après que quelqu'un a fourni une réponse à la question initiale. Je peux mettre à jour ma réponse si j'ai le temps, mais je ne peux pas le garantir. – www