Нарисовать квадрат, который в каждый момент своего движения касается одной из сторон круга с центром в центре экрана - PascalABC.NET
Формулировка задачи:
Собственно сабж.
Помогите пожалуйста.
Заранее спасибо.
Решение задачи: «Нарисовать квадрат, который в каждый момент своего движения касается одной из сторон круга с центром в центре экрана»
textual
Листинг программы
uses GraphABC; var Angle : integer; procedure Repaint; const R = 75; // Радиус окружности A = 70; // Сторона квадрата var pts : array of Point; begin Inc(Angle); SetLength(pts, 4); var cx := Window.Width div 2; var cy := Window.Height div 2; var px := cx + Trunc((R + A div 2) * Cos(DegToRad(Angle))); var py := cy + Trunc((R + A div 2) * Sin(DegToRad(Angle))); for var i : integer := 0 to 3 do begin pts[i].X := px + Trunc((A / Sqrt(2)) * Cos(DegToRad(45 + (i * 90) - Angle))); pts[i].Y := py - Trunc((A / Sqrt(2)) * Sin(DegToRad(45 + (i * 90) - Angle))); end; Window.Clear; Circle(cx, cy, R); DrawPolygon(pts); Redraw; end; var Flag : Boolean; procedure MyKeyDown(key: integer); begin Flag := true; end; begin OnKeyDown := MyKeyDown; LockDrawing; Angle := 0; repeat Repaint; until Flag; end.
Объяснение кода листинга программы
- Объявлены переменные: Angle (угол), R (радиус окружности), A (сторона квадрата), pts (массив точек), cx (центр х), cy (центр y), Flag (флаг).
- Задаются константы R и A.
- В процедуре Repaint:
- Увеличивается значение переменной Angle.
- Создается массив pts длины 4.
- Вычисляются значения cx и cy (центр экрана).
- Вычисляются значения x и y (координаты квадрата).
- Для i от 0 до 3 (индексы элементов массива pts):
- Вычисляются значения x и y (координаты i-го угла квадрата).
- Очищается окно.
- Рисуется окружность с центром в (cx, cy) и радиусом R.
- Рисуется многоугольник из 4 вершин, заданных в массиве pts.
- Перерисовывается окно.
- В процедуре MyKeyDown при нажатии клавиши:
- Значение Flag становится true.
- В основном цикле программы:
- Повторяются действия, пока Flag не станет false.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д