Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Построение геометрического фрактала "Снежинка Коха"

5.8K
17 февраля 2004 года
vera
2 / / 27.12.2003
Необходимо построить геом. фрактал "Снежинка Коха". Вопрос: необходимо ли вычислять третью координату равностороннего треугольника(если да то как?) или выпоилнять другие преобразования. Я делала рекурсивно вычисляя координаты третей вершины, но таких треугольников ж два. Формулы нахождения координат вроде бы есть, но как отобрать правильное значение.
Извините за неточность изложения. Надеюсь кто-то понял.
6.4K
17 марта 2004 года
Walker
11 / / 16.03.2004
Если нет особых требований к скорости, попробуйте использовать
"черепашью графику" - тогда проблем с лишней точкой не будет.
(Т.е. рисовать, задавая угол поворота и длину отрезка, который надо вывести)

В этом случае, если Rotate(int ang) - функция поворота, а
Draw(int dist, int depth) - рисования, то код будет примерно такой:

Код:
int angle = 0;          //глобальная переменная
int const pi = 3.14159; //глобальная константа

void Paint(void)
{
    Rotate(60); //предполагается, что поворот
            // осуществляется против часовой стрелки, на ang градусов
                    //черепаха находится в левом нижнем углу экрана, смотрит вправо

    Draw(333, 6);//рисовать на 333 единицы, глубина итерации 6
    Rotate(-120);
    Draw(333, 6);//рисовать на 333 единицы, глубина итерации 6
    Rotate(-120);
    Draw(333, 6);//рисовать на 333 единицы, глубина итерации 6

}

void Rotate(int ang)
{
    angle += ang + 360;
    angle %= 360;
}

void Draw(int dist, int depth)
{
    if(depth > 0)
    {

    Draw(dist/3, depth-1)

    Rotate(60);

    Draw(dist/3, depth-1)

    Rotate(-120);

    Draw(dist/3, depth-1)

    Rotate(60);

    Draw(dist/3, depth-1)
    }
    else
    {      
    //Здесь функции рисования, зависят от того на чём и под что пишешь
    //декартовы координаты вычисляются как cos(angle*pi/180)*dist и sin(angle*pi/180)*dist;
    }
   
}


В результате должна получиться снежинка с глубиной итерации 6.

PS:код приведён для С++, но структура легко переносится практически на что угодно...
6.4K
17 марта 2004 года
Walker
11 / / 16.03.2004
Здесь исходник к тому что было сказано выше, исправлено пара ляпов.
Основной код реализован в классе CTort, рисование начинается с OnPaint.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог