Изобразить движущуюся прямую, которая в каждый момент касается окружности - 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.
Объяснение кода листинга программы
- В начале кода используются две библиотеки: crt (для работы с консолью) и graph (для работы с графикой).
- Функция Vrash принимает на вход параметры a (угол поворота в радианах), x и y (координаты точки, которую нужно вращать). Она выполняет следующие действия:
- Вычисляет новую координату x и y, используя формулу для вращения точки вокруг центра.
- Обновляет значения x и y, присваивая им вычисленные значения.
- Основная часть программы начинается с инициализации графического окна с помощью функции initgraph.
- Далее выводится текстовое сообщение в центре экрана.
- Радиус окружности и длина отрезка прямой задаются переменными r и w соответственно.
- Центр экрана задается переменными tx и ty, которые вычисляются как половина максимальных значений x и y, полученных с помощью функции getmaxX и getmaxY.
- Координаты концов отрезка задаются переменными ax и ay, которые вычисляются как разница между центром экрана и радиусом окружности.
- Координаты концов отрезка обновляются в каждой итерации цикла с помощью функций Vrash и getmaxX, getmaxY.
- В цикле между Vrash и getmaxX, getmaxY выполняется отрисовка окружности и линий, соединяющих концы отрезка.
- После каждой итерации цикла делается задержка в 10 миллисекунд с помощью функции delay.
- В конце программы выводится сообщение до тех пор, пока пользователь не нажмет любую клавишу, с помощью функции keypressed.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д