@PavelG94

Как сгенерировать треугольник Серпинского с помощью IFS?

Здравствуйте. Здесь ссылка приведена система итерируемых функции. Попробовал реализовать этот метод в своей программе, вот её часть, которая отвечает за применение преобразований:
void MainWindow::CreateIFS()
{
    const int ifs_cnt = 3;
    _ifs.resize(ifs_cnt);
    _ifs[0] = QMatrix(0.5, 0, 0, 0.5, 0, 0.5);
    _ifs[1] = QMatrix(0.5, 0, 0, 0.5, -0.25, 0);
    _ifs[1] = QMatrix(0.5, 0, 0, 0.5, 0.25, 0);

}

void MainWindow::ApplyIFS()
{
    //Применить преобразование
    QImage img_copy = _img.copy();
    for (int y = 0; y < img_copy.height(); ++y) {
        for (int x = 0; x < img_copy.width(); ++x) {
            int pix_id = img_copy.pixelIndex(x,y);
            if (pix_id == _black_color_id) {
                _img.setPixel(x, y, _white_color_id);

                for (const QMatrix &mtr: _ifs) {
                    double new_x = -1, new_y = -1;
                    mtr.map(x, y, &new_x, &new_y);
                    new_x = qRound(new_x); new_y = qRound(new_y);
                    bool is_x_in_range = 0 <= new_x && new_x < _img.width();
                    bool is_y_in_range = 0 <= new_y && new_y < _img.height();
                    if (is_x_in_range && is_y_in_range) {
                        _img.setPixel(new_x, new_y, _black_color_id);
                    }
                }
            }
        }
    }
}

При запуске на чёрном треугольнике искомого результата я не получил, так как после сжатия исходного треугольника по этим формулам он почти не сдвигается (компоненты сдвига < 1). Вопрос такой: как же тогда предполагается применять эти формулы?
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы