Popou
@Popou
Программист энтузиаст , обожаю саморефлексию

Что не так с синусом?

Я хотел сделать подобный эффект волны
60f923262805e176312543.jpeg


Для этого я использовал
следующий алгоритм:
for (int y = 0; y < img.Height; ++y)
{
    Span<Rgba32> pixelRowSpan = img.GetPixelRowSpan(y);
    for (int x = 0; x < img.Width; ++x)
    {

        int y1 = Convert.ToInt32(y + 20.0 * Math.Sin(x / 32.0));

        if (y1 >= img.Height)
            y1 = img.Height - 1;
        if (y1 < 0)
            y1 = 0;

        var sourcePixel = img.GetPixelRowSpan(y1)[x];

        pixelRowSpan[x] = sourcePixel;
    }
}


Но вместо желаемого результата, у меня выходит
это
irctn-afdpmwoufhtzaj0qufxme.jpeg


Исходное изображение
67427.jpg


Спасибо Wataru!
Исходное изображение
s-9wp4wxny83thhluknnmirhcxe.jpeg


Результат
5tqvub57okwctvybjbf3ode3zq4.jpeg
  • Вопрос задан
  • 434 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Вы меняете изображение на месте, проходя по нему сверху вниз. Когда ваш синус сдвигает пиксели вниз - вы перетираете все пиксели в столбце самым верхним.

Надо или копировать с изменениями в новое изображение, или менять направление прохода в зависимости от знака синуса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы