Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Interpolación

Iniciado por Haddd, 02 de Abril de 2003, 09:18:38 AM

« anterior - próximo »

Mars Attacks

                                Que es lo que le he dicho yo al principio, ¿no? :) Que interpole de dos en dos. Eso sí, tú te has explicado mejor. También iba a decirle lo del 0.25, pero no sé cómo he multiplicado yo (para asegurarme de que lo que decía estaba bien) que no me daba  :loco: torpe soy...                                

Haddd

                                Bien, hallé la solución. Lo que me decís de interpolar primero en un lado y luego en otro, complica mucho el problema pq primero tienes que averiguar que dos vértices son los que tengo que coger, puesto que debo despreciar los otros dos. Además me parece muy duro no poder resolver este problema que parece tan sencillo.

Si cada punto recibe el impacto de cada vértice y el módulo del vector que forma el punto a estudiar con cada vértice me da el "peso" que afecta a cada vértice..¡debe funcionar! El problema era que yo no cumplía una última parte de la ecuación:

La suma de los pesos=1.

Y he aquí el código:

float Interpolar(float *yc,DWORD x,DWORD y,DWORD w,DWORD h)
{
   float vx,vy,d[4],Uno_Menos_vx,Uno_Menos_vy,vx2,vy2;

   vx=(float)x/(float)w;
   vy=(float)y/(float)h;
   
   vx2=vx*vx;
   vy2=vy*vy;

   Uno_Menos_vx=(1-vx)*(1-vx);
   Uno_Menos_vy=(1-vy)*(1-vy);

   // Calculamos la distancia del punto 0 al punto que nos dan
   // Si la influencia es <0 entonces que no influya
   
   d[0]=1-sqrtf(vx2+vy2);if(d[0]<=0) { d[0]=0;}
   d[1]=1-sqrtf(vx2+Uno_Menos_vy);if(d[1]<=0) { d[1]=0;}
   d[2]=1-sqrtf(Uno_Menos_vx+Uno_Menos_vy);if(d[2]<=0) { d[2]=0;}
   d[3]=1-sqrtf(Uno_Menos_vx+vy2);if(d[3]<=0) { d[3]=0;}

   float t=d[0]+d[1]+d[2]+d[3];

   d[0]/=t;d[1]/=t;d[2]/=t;d[3]/=t;

   return (yc[0]*d[0]+yc[1]*d[1]+yc[2]*d[2]+yc[3]*d[3]);
}

Dados 4 puntos y colocados según el índice

1   2

0   3

Y dada una posición x,y relativa a un w,h;la función nos calcula la y interpolada en ese punto.

Y lo utilizo en un generador de texturas de terreno pq necesito calcular la y de cada texel y no se corresponde en una relación 1 a 1 con el mapa del terreno.                                

Ithaqua

                                Ouch, me parecen demasiados cálculos.
Si es en 3D y se trata de un terreno del que en principio no sabes como estan orientados los vértices, oriéntalos con algún método y luego usa vectores para interpolar según las aristas.                                
thaqua^Stravaganza
http://ithaqua.stravaganza.org

mallrat

                                A  B
C  D

x: 0..1
y: 0..1

xi = 1.0 - x
yi = 1.0 - y

P = A*xi*yi + B*x*yi + C*y*xi + D*x*y                                

Haddd

                                ¡Estoy utilizando vectores! Si lees el código verás que se calcula el módulo del vector desde cada vértice al pto que quiero estudiar para hallar su peso. Y es en 2D                                






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.