|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Alex Astafiev 2:5000/228.16 04 Feb 2002 04:45:21 To : Alexander Brodnevsky Subject : "рыбий глаз" --------------------------------------------------------------------------------
AB> Поделитесь, плиз, формулами или идеями для реализации эффекта сабж
AB> для изображения.
AB> Буду оченб благодарен.
AB>
это так, как изображение преломляется в сфере.
есть src[][], нужно получить dst[][]
делай что-то типа этого -
int cx = width / 2;
int cy = height /2;
for ( int y = -cy; y < cy; y++ )
{
for ( int x = -cx; x < cx; x++ )
{
int r = sqrt ( y*y + x*x );
int z = r*koeff1 + koeff2; // avoid zero divide
int srcx = koeff3*x / z; // avoid srcx,srcy out of bound
int srcy = koeff3*y / z;
dest[y+cy][x+cx] = src[srcy+cy][srcx+cx];
}
}
могут быть синтакс. ошибки, я написал , есс. не проверяя.
о выборе коэффициентов.
по идее, они только для того, чтобы обеспечить int-вычисления (не float),
вычисление srcx, srcy это всего лишь x/z и y/z, но когда
z лежит в (float) 0.0 ... 1.0, то есть нормализовано.
(кстати, деление можно заменить умножением на 1/z).
* * * *
* *
* * <- точка которую нужно узнать на исходной картинке.
* / *
* / | *
* / | *
/ | *
/ |z *
/ | *
/ | *
____________0_______|________
center x,y
--- Alex Raider / Flash inc.
* Origin: Alex Raider/ Flash inc. 1992-2002 (2:5000/228.16)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/174643c5e0b22.html, оценка из 5, голосов 10
|