Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Interpolar alturas

Iniciado por marcode, 18 de Agosto de 2006, 05:58:17 PM

« anterior - próximo »

marcode

Aprovechando que me he vuelto a meter en la dinámica de los terrenos necesitaría ya solventar un problema que tengo.

Necesito conseguir alguna fórmula o código, o que alguien me explique como puedo interpolar alturas con el método más óptimo (no necesito que sea rápido porque es para una conversión off-time) porque la forma en que lo hago yo no me queda bien del todo y lo que he encontrado por internet no me entero mucho con los símbolos matemáticos y las charlas técnicas, me interesaría a ser posible las fórmulas o funciones en lenguaje de programación o en pseudo código.

O si en alguna de las páginas sobre terrenos digitales que conocéis hay algo sobre ello, también me vendrá bien.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Zaelsius

Así de memoria, me sale esta explicación chapucera:

1------2
|
|
3------4

Suponiendo que quieres interpolar entre cuatro alturas/vértices, con factores x,y estando ambos entre 0 y 1. Suponemos que 1,2,3,4 forman un cuadrado con todos los lados iguales.

Haces interpolación lineal entre la altura de 1 y la altura de 2 con el factor x.
Haces interpolación lineal entre la altura de 3 y la altura de 4 con el factor x.

Haces interpolación lineal entre los dos resultados anteriores con el factor y.

Casi seguro que hay algun tuto o "snippet" por ahi más correcto y mejor explicado.

senior wapo

pesoX = x - floor(x);
pesoY = y - floor(y);
altura12 = altura[floor(y)][floor(x)] * (1- factorX)  + altura[floor(y)][ceil(x)] * factorX;
altura34 = altura[ceil(y)][floor(x)] * (1-factorX)  + altura[ceil(y)][ceil(x)] * factorX;
alturaFinal = altura12 * (1-factorY) + altura34 * factorY;



Asi de cabeza. Es lo que ha puesto Zaelsius.

marcode

Creo que di por sentado como debían ser las interpolaciones, lo siento.

Tengo las alturas del terreno a una distancia de 90 m. y quiero que estén a 30, creando alturas intermedias. pero si hago una interpolación normal aparecen como piramides o como planos rectos, y de lo que se trata es de que tenga aspecto curvado dependiendo de la orografía, creo que hay que tener en cuenta a un número determinado de las alturas más cercanas.

Editado: Acabo de ver lo de senior y creo que es eso lo que busco, lo miraré más detenidamente.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

ethernet

Buscas una interpolación de un orden mayor:



Aquí hay info:
http://pgrafica.webideas4all.com/perlin.html

marcode

Ok, miraré lo que me habeis comentado y la pagina del perlin noise, aunque explicaré mejor el problema concreto que tengo por si alguien puede aportar más sugerencias.

Lo único que necesito es añadir 2 puntos intermedios en cada dirección

las x son las nuevas alturas
Citar
  O x x O x x O
   .x  x  x x x x x
   .x  x  x x x x x
  O x x O x x O
   .x  x x  x x x x
   .x  x x  x x x x
  O x x O x x O

Suponiendo que el punto central es la cima y las otras estan más abajo a la misma altura, la altura de las desconocidas pueden formarse básicamente de 3 maneras, que son recta, con forma redondeada, y con punta ascendente.

En la naturaleza lo normal es que sean más redondeadas o convexas para las colinas, y más puntiagudas o concavas las zonas de picos de alta montaña, pero averiguar de que tipo son debe depender de la curva que forma el terreno por lo tanto dependerá de bastantes alturas próximas, no solo las que están justo a cada lado.

Mirando la página que puso Ethernet creo que es la interpolación cúbica la que necesito.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

marcode

Encontré una página donde se ven imágenes con el resultado de los diferentes tipos de interpolación en terrenos.

http://koti.mbnet.fi/pkl/tg/tut3/ter_resize2.htm

La que más me gusta es la de Mitchell, aunque la de lanczos parece que se aproxima más.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

JL10

marcode. ¿El propósito de usar estos algoritmos que indicas, son para un pre-procesado del terreno con objeto de recuperar la merma que ocasiona la discretización de un terreno en un modelo regular (matriz regular)?
Gracias

marcode

Lo uso principalmente para tener un poco más de detalle. Pero también para que al convertir las alturas de grados (datos originales) a metros (los que uso), aquellos puntos no coincidentes tengan un valor más apropiado (la interpolación más cercana) que por ejemplo la altura más cercana, que puede diferir mucho si esta un poco lejos o está en medio de dos.

GIIIIIIIIGIIIIIIIIGIIIIIIIIGIIIIIIIIGIIIIIIIIG
M___M___M___M___M___M___M___M

si al hacer la conversión de medidas (o de distancias) a cada distancia en metros M, le corresponde una distancia en grados G, siempre será más real un valor interpolado I, que no el G más cercano.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

JL10

Cita de: "marcode"... las alturas de grados (datos originales) a metros (los que uso)....
Por lo que nos indicas, entonces tienes datos originales en coordenadas geográficas y las quieres pasar posiblemente a UTM. (¿Puede que originalmente sean datos en formato DTED?). Si es así hay conversores de DTED a UTM que ya te hacen la conversión a  una malla regular UTM corrigiendo este efecto. (pero no recuerdo donde lo ví. hace ya tiempo, ... pero mirando en web-sites del tema los encontrarás.)

Cuando hayas experimentado con tus interpolaciones, muéstranos resultados para que podamos apreciar sus efectos.
Gracias

marcode

No, si las conversiones con interpolaciones ya las hice, de alturas a una distancia de 3 arcosegundos (unos 90 metros), lo pasé a alturas con distancias de 31,25 m. en coordenadas UTM (que tuve que interpolar claro), de forma que con 32+1 alturas de largo tengo 1 Km exacto y puedo hacer las divisiones más lógicas.

Los resultados ya los viste en la captura. Lo que quiero es que el resultado final sea más fiel al original y no tenga algunos fallos que aprecio a veces.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.