7 votos

La mejor manera de hacer un falso hillslope?

Alguna vez alguien tiene que hacer un falso ladera de la montaña? o un falso modelo de elevación digital (DEM)? ¿Cuáles son los mejores métodos para hacerlo?

Para más detalles, supongamos que yo quería hacer un falso ladera de la montaña, que era de 200 metros de ancho por 300 m de largo. Si elijo una que indica la altura de 150 metros y una altura final de 100m. ¿Cómo debo ir sobre la generación de esta ladera de la montaña? ¿Qué herramientas (R, ArcMap, etc...) sería el mejor método para la generación de este tipo de una ladera de la montaña? Hacer cualquiera de los instrumentos que permiten la variación aleatoria de los valores de elevación a través de los DEM (altura y anchura), manteniendo el valor de la pendiente (o rango de pendientes) me tiro?

Preguntado de otra manera, ¿cómo puedo crear una superficie 3D que es una reminiscencia de un real ladera de la montaña?

WhiteBoxDev la respuesta de abajo está muy cerca de ser la respuesta me tiro de. Mi única preguntas adicionales se refieren al azar a la alteración de la elevación de la pendiente de la colina (tal vez con un mensaje de error aleatorio?) para hacer más realista - y no es perfectamente lisa.

11voto

Una buena aproximación a un 'libro de texto' hillslope con un convexo en la parte superior del talud, una escalera de mediados de la pendiente, y un cóncavo inferior de la pendiente sería una sigmoide. El más común de la función sigmoidal para este tipo de aplicación sería la función logística.

enter image description here

Una forma estándar de esta función sería:

z = 1 / (1 + e-x)

Y aquí es lo que se ve cuando el modelo de la función como un ráster DEM:

enter image description here

EDITAR

Se pidieron más detalles sobre cómo volver a crear mi imagen de arriba, así que aquí vamos:

  1. Ejecutar el Asignar número de fila o columna a las celdas de la cuadrícula de la herramienta, inputing una base de la imagen (con el deseado filas y columnas), y asignar a cada celda de la cuadrícula el número de columna. Llame a la salida de la cuadrícula 'Columnas'

  2. Averiguar el número de columnas de la imagen (NCOLS, digamos que es 1000 en este ejemplo), abra la trama de la calculadora, y el tipo en la expresión [xVal]=[Columnas]/1000*12-6 Prensa Evaluar. Cuando se completa, se debe mostrar automáticamente la recién creada raster "xVal'

  3. Ahora claro la Trama de la Calculadora de la expresión y el tipo de esta nueva expresión en: [z]=1/(1+Exp([xVal])).

La trama de 'z' debe parecerse a la imagen de arriba. Si usted quiere aumentar de izquierda a derecha, en lugar de la derecha a la izquierda se muestra arriba, simplemente multiplique xVal por -1 en la ecuación final.

Por cierto, usted puede usar un condicional de evaluación para agregar una ladera de cara a la pendiente del perfil si te gusta, que sería el equivalente a una función definida a tramos. Lo realmente divertido que sería si usted necesita para agregar convergentes y divergentes de las partes a la pendiente. Y, por supuesto, usted puede perder con cada uno de los parámetros en la ecuación de la posición de la pendiente y determinar su altura. Déjeme saber si usted tiene alguna pregunta.

4voto

traggatmot Puntos 600

He aquí un método para lograr esto en R:

    # Building a fake hillslope
    # This hillslope is 6 rows by 5 columns
    # alter bins / width to alter rows / columns



    x <- seq(-15, 15, by=0.01)


    z <- 1/(1+1.5^-x)            # equation used to generate the shape of the hillslope
    plot(z)

    z <- 150 - (1-z)*5
    plot(z)

    # doing it by loop
    bins <- 6      # could also be considered the length or the hillslope - AKa the number of columns
    elev1 <- numeric(bins)


    for(i in 0:(bins-1))
    {
      begin <- floor( (0 + (length(z)/bins)*i) )
      print(begin)
      end <- floor( ( (length(z)/bins) * (i+1) ) )
      print(end)
      print(mean(z[begin:end]))
      elev1[i+1] <- mean(z[begin:end])  

    }

    plot(elev1, type="l")


    # Making the hillslope wide - AKA creating identical cols
    width <- 5

    # creating empty matric
    hillslope <- matrix(0, nrow=bins, ncol=width)

    #overwriting the matrix with the elevation column
    system.time(
      { 
        for(i in 1:width) 
          hillslope[,i] <- elev1; 
        hillslope <- as.data.frame(hillslope) 
        }
      )



    # applying random error grid - Doesn't really do anything that's helpful
    error <- rnorm((width*bins), mean = 0, sd = 0.05)
    error.matrix <- as.matrix(error, nrow=bins )
    random.hillslope <- as.matrix(hillslope + error.matrix)

    # examining the images 
    image(random.hillslope)
    image(hillslope)

4voto

Dagwollf Puntos 46

Aquí es una forma muy sencilla y rápida solución para generar una colina cónica en R, el uso de la dnormfunción de:

library(raster)
a <- matrix(rep(dnorm(1:100, 50, sd = 25)),
            nrow = 100, ncol = 100, byrow = TRUE) 
hill <- raster(a * dnorm(1:100, 50, sd = 25))
plot(hill)

enter image description here

También puedes agregar algunas variaciones / heterogeneidad con:

hill2 <- hill + rnorm(10000)/100000
plot(hill2)

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X