Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

добрый день! при попытке компиляции выдает Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPointSize" 1>Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPopMatrix" 1>Source.obj : error LNK2001: неразрешенный...
Можно точно вот эту программу просто наоборот типа:4,3,2,1,4 вот так надо двигаться
Здравствуйте. Спасибо за полезную инфу про уравнения а не матрицы. Во всём интернете только матрицы. У Вас опечатка в уравнении вращения по Z в координате Y= надо минус добавить И ещё. Все предыдущие уравнения можно подставить в последнее уравнение...
WebGL API Tutorial WebGL wiki Adding 2D content to a WebGL context

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
PascalABC.NET

В этом уроке будет показано, как можно создать анимированное изображение с помощью модуля GraphABC.

В качестве примера создадим движение нескольких (примитивных) фигур по заданной траектории.

Без чего мы обойтись не сможем, не сможем мы обойтись без нескольких инструментов:

Процедура LockDrawing;

Рисование средствами PascalABC происходит очень медленно. Пока оно идет, картинка на экране успевает много раз обновиться. Отсюда мерцание. То есть, мы видим не окончательную картинку, а процесс ее рисования. Окончательную картинку в общем-то не видим — как только она построилась, мы ее тут же стираем и начинаем новый цикл рисования. Для борьбы с этим эффектом придумали двойную буферизацию. Идея в том, чтобы сначала построить картинку в памяти (не выводя на экран), а затем отобразить новый кадр на экране целиком, без промежуточных вариантов, где не хватает половины лучиков. Для этого в начале программы вызываем процедуру LockDrawing.

Процедура ClearWindow (color);

После каждой прохода по циклу очищает графическое окно указанным цветом, который передается в качестве параметра.

После этого все команды рисования будут создавать картинку в памяти (в так называемом вторичном буфере). Непосредственно на экране ничего рисоваться не будет. После того, как очередной кадр анимации полностью отрисован (то есть перед ClearWindow), нужно вызвать процедуру

Redraw;

Эта процедура вызовет перерисовку всей картины.

Нарисуем сначала четыре окружности.

program animation;
uses GraphABC;
begin
    SetWindowSize(400, 400); //Размер окна
    //Отрисовка четырех окружностей.
    Circle (100, 100, 20);
    Circle (300, 100, 20);
    Circle (100, 300, 20);
    Circle (300, 300, 20);            
end.

Получим результат:

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

program animation;
uses GraphABC;
var i : integer;
begin
    SetWindowSize(400,400);
    LockDrawing;
    //Движение от первой точки до второй
    for i:=100 to 300 do
    begin
        SetBrushColor(clWhite);
        Circle (100, 100, 20);
        Circle (300, 100, 20);
        Circle (100, 300, 20);
        Circle (300, 300, 20);
        SetBrushColor(clBlack);
        Circle (i, 100, 20);
        RedRaw;
        ClearWindow(clWhite);
    end;
    //Движение от второй точки до третьей
    for i:=100 to 300 do
    begin
        SetBrushColor(clWhite);
        Circle (100, 100, 20);
        Circle (300, 100, 20);
        Circle (100, 300, 20);
        Circle (300, 300, 20);
        SetBrushColor(clBlue);
        Circle (300, i, 20);
        RedRaw;
        ClearWindow(clWhite);
    end;
    //Движение от третьей точки до четвертой
    for i:=300 downto 100 do
    begin
        SetBrushColor(clWhite);
        Circle (100, 100, 20);
        Circle (300, 100, 20);
        Circle (100, 300, 20);
        Circle (300, 300, 20);
        SetBrushColor(clRed);
        Circle (i, 300, 20);
        RedRaw;
        ClearWindow(clWhite);
    end;
    //Движение от четвертой точки до первой
    for i:=300 downto 100 do
    begin
        SetBrushColor(clWhite);
        Circle (100, 100, 20);
        Circle (300, 100, 20);
        Circle (100, 300, 20);
        Circle (300, 300, 20);
        SetBrushColor(clGreen);
        Circle (100, i, 20);
        RedRaw;
        ClearWindow(clWhite);   
    end;
end.

Результат:

Комментарии

sezim аватар
Опубликовано sezim в 13. Ноябрь 2018 - 5:40.

Можно точно вот эту программу просто наоборот типа:4,3,2,1,4 вот так надо двигаться