«…Труд избавляет человека от трех великих зол: скуки, порока, нужды…»

CUDA (Проект)/Описание алгоритма работы программы — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
Строка 7: Строка 7:
 
|}
 
|}
  
Координаты для Tex1 при заданном смещении x и y:
+
==== Горизонтальное сравнение ====
 +
* Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
 +
** Tex1PixelX = width - xmargin + x
 +
** Tex1PixelY = (y<yoffset) ? 0 : y ;
 +
* Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
 +
** Tex2PixelX = 0
 +
** Tex2PixelY = (y<yoffset) ? yoffset - y : 0 ;
 +
* Ширина и высота поля перекрытия:
 +
** xwidth = xmargin - x;
 +
** yheight = (y<yoffset) ? height - yoffset + y : height - (y - yoffset) ;
 +
 
 +
<source lang="cpp">
 +
pixel = xwidth * yheight ;
 +
 
 +
for (div = 0; div < xwidth ; div++)
 +
{
 +
  Tex1CoorXf = (Tex1PixelX + divx) / (float) width;
 +
  Tex2CoorXf = (Tex2PixelX + divx) / (float) width;
 +
  for (divy = 0; divy < yheight ; divy++)
 +
    {
 +
      Tex1CoorYf = (Tex1PixelY + divy) / (float) width;
 +
      Tex2CoorYf = (Tex2PixelY + divy) / (float) width;
 +
      Tex1Pixel = tex2D(tex1, Tex1CoorXf, Tex1CoorYf);
 +
      Tex2Pixel = tex2D(tex2, Tex2CoorXf, Tex2CoorYf);
 +
      ErrorSum += PixelSub(Tex1Pixel, Tex1Pixel);
 +
    }
 +
}
 +
ErrorSum = ErrorSum/pixel;
 +
dM[x,y] = ErrorSum;
 +
</source>
 +
 
 +
 
 +
==== Вертикальное сравнение ====
 +
* Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
 +
** Tex1PixelX = (x<xoffset) ? 0 : x ;
 +
** Tex1PixelY = height - ymargin + y
 +
* Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
 +
** Tex2PixelX = (x<xoffset) ? xoffset - x : 0 ;
 +
** Tex2PixelY = 0
 +
* Ширина и высота поля перекрытия:
 +
** xwidth = (x<xoffset) ? width - xoffset + x : width - (x - xoffset) ;
 +
** yheight = ymargin - y;

Версия 16:37, 15 августа 2013

Проект CUDA

Литература

Рисунок 1 (Edit)

Горизонтальное сравнение

  • Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
    • Tex1PixelX = width - xmargin + x
    • Tex1PixelY = (y<yoffset) ? 0 : y ;
  • Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
    • Tex2PixelX = 0
    • Tex2PixelY = (y<yoffset) ? yoffset - y : 0 ;
  • Ширина и высота поля перекрытия:
    • xwidth = xmargin - x;
    • yheight = (y<yoffset) ? height - yoffset + y : height - (y - yoffset) ;
pixel = xwidth * yheight ;
 
for (div = 0; div < xwidth ; div++)
{
  Tex1CoorXf = (Tex1PixelX + divx) / (float) width;
  Tex2CoorXf = (Tex2PixelX + divx) / (float) width;
  for (divy = 0; divy < yheight ; divy++)
    {
      Tex1CoorYf = (Tex1PixelY + divy) / (float) width;
      Tex2CoorYf = (Tex2PixelY + divy) / (float) width;
      Tex1Pixel = tex2D(tex1, Tex1CoorXf, Tex1CoorYf);
      Tex2Pixel = tex2D(tex2, Tex2CoorXf, Tex2CoorYf);
      ErrorSum += PixelSub(Tex1Pixel, Tex1Pixel);
    }
}
ErrorSum = ErrorSum/pixel;
dM[x,y] = ErrorSum;


Вертикальное сравнение

  • Координаты левого верхнего угла для Tex1 при заданном смещении x и y:
    • Tex1PixelX = (x<xoffset) ? 0 : x ;
    • Tex1PixelY = height - ymargin + y
  • Координаты левого верхнего угла для Tex2 при заданном смещении x и y:
    • Tex2PixelX = (x<xoffset) ? xoffset - x : 0 ;
    • Tex2PixelY = 0
  • Ширина и высота поля перекрытия:
    • xwidth = (x<xoffset) ? width - xoffset + x : width - (x - xoffset) ;
    • yheight = ymargin - y;