Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: marcode en 18 de Agosto de 2006, 05:58:17 PM

Título: Interpolar alturas
Publicado por: marcode en 18 de Agosto de 2006, 05:58:17 PM
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.
Título: Interpolar alturas
Publicado por: Zaelsius en 18 de Agosto de 2006, 06:12:17 PM
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.
Título: Interpolar alturas
Publicado por: senior wapo en 18 de Agosto de 2006, 06:52:12 PM
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.
Título: Interpolar alturas
Publicado por: marcode en 18 de Agosto de 2006, 06:54:07 PM
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.
Título: Interpolar alturas
Publicado por: ethernet en 18 de Agosto de 2006, 09:32:16 PM
Buscas una interpolación de un orden mayor:

(http://pgrafica.webideas4all.com/textura_procedurales/interpolacion.jpg)

Aquí hay info:
http://pgrafica.webideas4all.com/perlin.html
Título: Interpolar alturas
Publicado por: marcode en 18 de Agosto de 2006, 11:15:26 PM
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.
Título: Interpolar alturas
Publicado por: marcode en 22 de Agosto de 2006, 01:24:06 AM
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.
Título: Interpolar alturas
Publicado por: JL10 en 22 de Agosto de 2006, 10:06:32 AM
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)?
Título: Interpolar alturas
Publicado por: marcode en 22 de Agosto de 2006, 09:41:36 PM
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.
Título: Interpolar alturas
Publicado por: JL10 en 23 de Agosto de 2006, 07:07:27 PM
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.
Título: Interpolar alturas
Publicado por: marcode en 23 de Agosto de 2006, 08:26:38 PM
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.