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

Вход на сайт

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

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

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

КРУГОВОЙ ФРАКТАЛ -ОШИБОЧНАЯ ПРОГРАММА! ПАПА ЗибЕрт
Можешь обяснить подробно что как работает, и почему массу не задаем
Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)

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

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

Построение повторяющихся элементов изображения имеет смысл включать в операторы цикла. Операторы цикла условно можно разделить на циклы по условию и циклы по количеству повторений (циклы-счетчики).

Когда точно известно количество повторяющихся элементов изображения удобно использовать цикл for.

for счетчик:=значение to конечное_значение do 
     тело_цикла;
 
for счетчик:=значение downto конечное_значение do 
     тело_цикла;

При переходе к обработке оператора цикла for управляющей переменной счетчик присваивается заданное начальное значение. Затем в цикле выполняется исполнительный оператор (или составной оператор begin..end). Каждый раз при выполнении исполнительного оператора управляющая переменная увеличивается на 1 (для for...to) или уменьшается на 1 (для for...downto). Цикл завершается при достижении управляющей переменной своего конечного значения.

Пример использования оператора цикла for при построении забора из 20 элементов.

procedure TForm1.Button1Click(Sender: TObject);
Var maxX, maxY : Integer;
    i : Integer;
begin
  maxX := PaintBox1.Width;
  maxY := PaintBox1.Height;
  // Количество повторений
  for i := 1 to 20 do  begin
    // Определение цвета досок забора
    PaintBox1.Canvas.Brush.Color := RGBToColor(200,160,0);
    // Отрисовка досок забора
    PaintBox1.Canvas.Rectangle(i*20, maxY, 19 + i*20, maxY-80);
    // Верхняя шапка забора
    PaintBox1.Canvas.Polygon([Point(i*20, maxY-80), 
                              Point(10 + i*20, maxY-95), Point(19 + i*20, maxY-80)]);
    // Круглые отверстия в шапке
    PaintBox1.Canvas.Brush.Color := clWhite;
    PaintBox1.Canvas.Ellipse(7 + i*20, maxY-82, 13 + i*20, maxY-88);
  end;
  // Поперечные перекладины
  PaintBox1.Canvas.Brush.Color := RGBToColor(200,200,0);
  PaintBox1.Canvas.Rectangle(0, maxY-20, 620, maxY-25);
  PaintBox1.Canvas.Rectangle(0, maxY-55, 620, maxY-60);
end;

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

while expression do statement;

При выполнении этого оператора вначале вычисляется значение логического выражения expression. Если это значение истинно, выполняется оператор statement, затем значение выражения проверяется вновь и т. д., до тех пор, пока выражение не примет значение «ложь». Если выражение принимает значение «ложь» при первой же проверке, то оператор statement не выполняется вообще.

Пример использования оператора цикла while при построении морских волн.

procedure TForm1.Button1Click(Sender: TObject);
Var maxX, maxY : Integer;
    x : Integer;
begin
  maxX := PaintBox1.Width;
  maxY := PaintBox1.Height;
  // Построение паруса
  PaintBox1.Canvas.Brush.Color := clYellow;
  PaintBox1.Canvas.Polygon([Point(250,maxY-35), Point(280, maxY-250), Point(150, maxY-65)]);
  // Построение корпуса лодки
  PaintBox1.Canvas.Brush.Color := RGBToColor(150, 150, 0);
  PaintBox1.Canvas.Polygon([Point(50,maxY-25), 
                            Point(300,maxY-25), Point(340,maxY-50)]);
  // Построение волн в виде полуокружностей.
  PaintBox1.Canvas.Brush.Color := clBlue;
  x:=0;
  while x < maxX do begin
    PaintBox1.Canvas.Pie(0 + x, maxY, 40 + x, maxY-30, 
                         40 + x, maxY-15, 0 + x, maxY-15 );
    x := x+30;
  end;
end;