Нарисовать квадрат, который в каждый момент своего движения касается одной из сторон круга с центром в центре экрана - 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.

Объяснение кода листинга программы

  1. Объявлены переменные: Angle (угол), R (радиус окружности), A (сторона квадрата), pts (массив точек), cx (центр х), cy (центр y), Flag (флаг).
  2. Задаются константы R и A.
  3. В процедуре Repaint:
  4. Увеличивается значение переменной Angle.
  5. Создается массив pts длины 4.
  6. Вычисляются значения cx и cy (центр экрана).
  7. Вычисляются значения x и y (координаты квадрата).
  8. Для i от 0 до 3 (индексы элементов массива pts):
  9. Вычисляются значения x и y (координаты i-го угла квадрата).
  10. Очищается окно.
  11. Рисуется окружность с центром в (cx, cy) и радиусом R.
  12. Рисуется многоугольник из 4 вершин, заданных в массиве pts.
  13. Перерисовывается окно.
  14. В процедуре MyKeyDown при нажатии клавиши:
  15. Значение Flag становится true.
  16. В основном цикле программы:
  17. Повторяются действия, пока Flag не станет false.
  18. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы