Как реализовать функцию C ++, которая создает завихрение на изображении - PullRequest
1 голос
/ 23 января 2020

`imageData = new double * [imageHeight];

for(int i = 0; i < imageHeight; i++) {
    imageData[i] = new double[imageWidth];
    for(int j = 0; j < imageWidth; j++) {

        // compute the distance and angle from the swirl center:

        double pixelX = (double)i - swirlCenterX;
        double pixelY = (double)j - swirlCenterY;

        double pixelDistance = pow(pow(pixelX, 2) + pow(pixelY, 2), 0.5);

        double pixelAngle = atan2(pixelX, pixelY);


        // double  swirlAmount = 1.0 - (pixelDistance/swirlRadius);


        // if(swirlAmount > 0.0) {

            // double twistAngle = swirlTwists * swirlAmount * PI * 2.0;

            double twistAngle = swirlTwists * pixelDistance * PI * 2.0;


            // adjust the pixel angle and compute the adjusted pixel co-ordinates:

            pixelAngle += twistAngle;
            pixelX = cos(pixelAngle) * pixelDistance;
            pixelY = sin(pixelAngle) * pixelDistance;

       // }    


        (this)->setPixel(i, j, tempMatrix[(int)(swirlCenterX + pixelX)][(int)(swirlCenterY + pixelY)]);

    }
}`

Я пытаюсь реализовать функцию c ++ (код выше) на основе следующего псевдокода , который предполагается создать завихрение на изображении, но у меня есть некоторые проблемы с непрерывностью на границах.

Функция, которая у меня есть на данный момент, способна наложить завихрение на диск заданного размера и деформировать его почти так же, как Я желал, но его влияние не уменьшается, когда мы приближаемся к границам. Я пытался умножить угол поворота на коэффициент 1 - (r / R) (с r расстояние между текущим пикселем в функции и центром вихря, а R - радиус вихря), но это не дайте эффект, на который я рассчитывал.

Более того, я заметил, что на некоторых участках границы появляется тонкая белая линия (что означает, что значения пикселей там равны 1), и я могу ' Я не могу точно объяснить, почему.

Возможно, некоторые из моих проблем связаны со стандартной функцией atan2 C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...