Изобразить движущуюся прямую, которая в каждый момент касается окружности - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Друзья, помогите плиз! . Мне надо изобразить движущуюся прямую, которая в каждый момент касается окружности данного радиуса, центр которой совпадает с центром экрана. Точка касания перемещается по окружности с постоянной угловой скоростью. Сама окружность невидима.

Решение задачи: «Изобразить движущуюся прямую, которая в каждый момент касается окружности»

textual
Листинг программы
uses crt,graph;
{процедура вращения точки вокруг центра}
procedure Vrash(a:real;var x,y:integer;const centrx,centry:integer);
var px:integer;
begin
x:=x-centrx;
y:=y-centry;
a:=a*pi/180;
px:=x;
x:=round(x*cos(a)-y*sin(a))+centrx;
y:=round(y*cos(a)+px*sin(a))+centry;
end;
var gd,gm:integer;
    tx,ty,ax,ay,bx,by:integer;
    tax,tay,tbx,tby:integer;
    r,w:integer;
    a:real;
begin
gd:=0;
initgraph(gd,gm,'');
outtextXY(50,20,'Vyhod - Any key...');
r:=100; {радиус окружности}
w:=200; {длина отрезка прямой}
tx:=getmaxX div 2;ty:=getmaxY div 2; {центр экрана}
{координаты концов отрезка}
ax:=tx-r;ay:=ty-(w div 2);
bx:=ax; by:=ay+w;
{Setcolor(12);
Circle(tx,ty,r-1);{окружность}
a:=0;
repeat
{в цикле меняем координаты концов, соединяем их линиями}
tax:=ax;tay:=ay;Vrash(a,tax,tay,tx,ty);
tbx:=bx;tby:=by;Vrash(a,tbx,tby,tx,ty);
setcolor(11);
line(tax,tay,tbx,tby);
{делаем задержку и все стираем(рисуем цветом фона)}
delay(10);
setcolor(0);
line(tax,tay,tbx,tby);
a:=a+1;{увеличиваем угол поворота}
until keypressed;
end.

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

  1. В начале кода используются две библиотеки: crt (для работы с консолью) и graph (для работы с графикой).
  2. Функция Vrash принимает на вход параметры a (угол поворота в радианах), x и y (координаты точки, которую нужно вращать). Она выполняет следующие действия:
    • Вычисляет новую координату x и y, используя формулу для вращения точки вокруг центра.
    • Обновляет значения x и y, присваивая им вычисленные значения.
  3. Основная часть программы начинается с инициализации графического окна с помощью функции initgraph.
  4. Далее выводится текстовое сообщение в центре экрана.
  5. Радиус окружности и длина отрезка прямой задаются переменными r и w соответственно.
  6. Центр экрана задается переменными tx и ty, которые вычисляются как половина максимальных значений x и y, полученных с помощью функции getmaxX и getmaxY.
  7. Координаты концов отрезка задаются переменными ax и ay, которые вычисляются как разница между центром экрана и радиусом окружности.
  8. Координаты концов отрезка обновляются в каждой итерации цикла с помощью функций Vrash и getmaxX, getmaxY.
  9. В цикле между Vrash и getmaxX, getmaxY выполняется отрисовка окружности и линий, соединяющих концы отрезка.
  10. После каждой итерации цикла делается задержка в 10 миллисекунд с помощью функции delay.
  11. В конце программы выводится сообщение до тех пор, пока пользователь не нажмет любую клавишу, с помощью функции keypressed.

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


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

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

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