Студентам09ЗД к Упр 09 МГ3 ДВИЖЕНИЕ (956683)
Текст из файла
СЕМ2 УПР3 по МГ ДВИЖ+ВРАЩ папка labgr3 (Телега)
1. Подготовить макет формы вида (Таймер находится на вкладке System)
а также следующие именованные константи и поля класса формы, представляющие параметры рисунков «телега» и «окружность» и анимации:
* именованные константы
xn=10; yn=200;//левый нижний угол кузова
h=90; l=150; //высота и длина кузова телеги
t=25; //расстояние от края кузова до обода
s=20; //радиус обода
r=12; //радиус колеса
idx=2;idy=0;//приращения при движении
* поля класса TForm1
- массивы
x,y:m1;//массивы координат точек кузова
xk, yk:m1;//массивы коорд-т концов спиц
- переменные
dx,dy:integer;//приращения при движении
f:real;//угол поворота колеса, соотвующий dx
dd, //текущий диаметр окружности
ll //коэффициент уменьшения диаметра окружности
:integer;
2. Подготовить обработчик создания формы
procedure TForm1.FormCreate(Sender: TObject);
begin Timer1.Enabled:=False; end;
не резрешающую работу таймера при старте программы.
3. Подготовить процедуру (см. текст программы)
procedure TForm1.RisTelega;
вывода рисунков «окружность» и «телега» (см. второй рисунок) по данным из массивов x и y и значениям именованных констат.
4. Подготовить обработчик кнопки Нарисовать
procedure TForm1.Button1Click(Sender: TObject);
для подготовки в массивах x и y начаоьных данных для рисунков «окружность» и «телега» и вывода на канве формы следующего рисунка
5. Подготовить процедуру
procedure TForm1.Perenos(var xx,yy:integer);
преобразования координат
(xx,yy) типа «перенос» на приращения (dx,dy) .
6. Подготовить процедуру
procedure TForm1.Povorot(var xx,yy:integer;
xc,yc:integer);
преобразования координат (xx,yy) типа «поворот» относительно центра (xc,yc) на угол f.
7. Подготовить обработчик кнопки Поехали
procedure TForm1.Button2Click(Sender: TObject);
задающую интервал таймера в мс и запускающую таймер.
8. Подготовить процедуру
procedure TForm1.Dwish;
которая, используя процедуру RisTelega, стирает старый рисунок, преобразует координаты и вновь выводит рисунок. При достижении «телегой» правого края формы процедура выключает таймер.
6. Подготовить обработчик события таймера
procedure TForm1.Timer1Timer(Sender: TObject);
вызывающиц процедуру TForm1.Dwish.
unit koleso; //ВСЯ ПРОГРАММА
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
const
xn=10; yn=200;//левый нижний угол кузова телеги
h=90; l=150; //высота и длина кузова телеги
t=25; //расстояние от края кузова до обода
s=20; //радиус обода
r=12; //радиус колеса
idx=2;idy=0;//приращения координат при движении
dd0=1000;
type
m1=array[1..8] of integer;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure RisTelega;
procedure Perenos(var xx,yy:integer);
procedure Povorot(var xx,yy:integer;xc,yc:integer);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Dwish;
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
x:m1;y:m1;//массивы координат точек кузова телеги
xk:m1; yk:m1;//массивы координат концов спиц колес
dx:integer;dy:integer;//приращения координат при движении
f:real;//угол поворота колеса, соответствующий dx
dd,ll:integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Brush.Color:=clWhite;
Canvas.Brush.Style:=bsSolid;
Canvas.Rectangle(0,0,Clientwidth,Clientheight);
Canvas.Pen.Color:=clBlack;
dx:=idx{2}; dy:=idy{0}; f:=-dx/r{2/12};
x[1]:=xn{10}; y[1]:=yn{200};
x[2]:=x[1]; y[2]:=y[1]-h{90};
x[3]:=x[2]+l{150}; y[3]:=y[2];
x[4]:=x[3]; y[4]:=y[1];
x[5]:=x[4]-t{25}; y[5]:=y[1];
x[6]:=x[5]-2*s{20}; y[6]:=y[1];
x[7]:=x[1]+t+2*s; y[7]:=y[1];
x[8]:=x[7]-2*s; y[8]:=y[1];
//левое колесо
xk[1]:=x[8]+s{20}-r{12}; yk[1]:=y[1];
xk[2]:=xk[1]+2*r; yk[2]:=y[1];
xk[3]:=xk[1]+r; yk[3]:=y[1]-r;
xk[4]:=xk[3]; yk[4]:=yk[3]+2*r;
//правое колесо
xk[5]:=x[6]+s-r; yk[5]:=y[1];
xk[6]:=xk[5]+2*r; yk[6]:=y[1];
xk[7]:=xk[5]+r; yk[7]:=yk[1]-r;
xk[8]:=xk[7]; yk[8]:=yk[7]+2*r;
RisTelega;
ll:=11;
dd:=dd0 div ll;
Canvas.Pen.Color:=clBlack;
Canvas.Ellipse(50-dd div 2,50-dd div 2,50+dd div 2,50+dd div 2);
end;//procedure TForm1.Button1Click
procedure TForm1.RisTelega;
begin
//перерисовка окружности
Canvas.Ellipse(50-dd div 2,50-dd div 2,50+dd div 2,50+dd div 2);
//земля и шины
canvas.Pen.Width:=3;
Canvas.Moveto( 0,yn+r+2);
Canvas.Lineto(Clientwidth,yn+r+2);
Canvas.Ellipse(x[8]+s-r-2,y[1]-r-2,x[8]+s+r+2,y[1]+r+2);
Canvas.Ellipse(x[6]+s-r-2,y[1]-r-2,x[6]+s+r+2,y[1]+r+2);
canvas.Pen.Width:=1;
//телега
Canvas.Moveto( x[1],y[1]);
Canvas.Lineto( x[2],y[2]);
Canvas.Lineto( x[3],y[3]);
Canvas.Lineto( x[4],y[4]);
Canvas.Lineto( x[5],y[5]);
Canvas.Moveto( x[6],y[6]);
Canvas.Lineto( x[7],y[7]);
Canvas.Moveto( x[8],y[8]);
Canvas.Lineto( x[1],y[1]);
//обод
Canvas.Arc(x[8],y[6]-s,x[8]+2*s,y[1]+s,x[7],y[7],x[8],y[8]);
Canvas.Arc(x[6],y[1]-s,x[5],y[1]+s,x[5],y[5],x[6],y[6]);
//спицы
Canvas.Moveto( xk[1],yk[1]); Canvas.Lineto( xk[2],yk[2]);
Canvas.Moveto( xk[3],yk[3]); Canvas.Lineto( xk[4],yk[4]);
Canvas.Moveto( xk[5],yk[5]); Canvas.Lineto( xk[6],yk[6]);
Canvas.Moveto( xk[7],yk[7]); Canvas.Lineto( xk[8],yk[8]);
end;//procedure TForm1.RisTelega
procedure TForm1.Perenos(var xx,yy:integer);
begin
xx:=xx+dx;
yy:=yy+dy;
end;//procedure TForm1.Perenos(var xx,yy:integer)
procedure TForm1.Povorot(var xx,yy:integer;
xc,yc:integer);
var p:real;
begin p:=xx;
xx:=round(xc+(xx-xc)*cos(f)+(yy-yc)*sin(f));
yy:=round(yc-(p-xc)*sin(f)+(yy-yc)*cos(f));
end;//procedure TForm1.Povorot(var xx,yy:integer;xc,yc:integer)
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.interval:=20;
Timer1.Enabled:=true;
end;//procedure TForm1.Button2Click
procedure TForm1.Timer1Timer(Sender: TObject);
begin
dwish;
end;//procedure TForm1.Timer1Timer
procedure TForm1.Dwish;
var i:integer; px,py:integer;
begin
Canvas.Pen.Color:=clWhite;
RisTelega;//стереть старое изображение
for i:=1 to 8 do
begin
perenos(x[i],y[i]);
perenos(xk[i],yk[i]);
end;
px:= (xk[1]+xk[2])div 2;
py:= (yk[1]+yk[2])div 2;
for i:=1 to 4 do
povorot(xk[i],yk[i],px,py);
px:= (xk[5]+xk[6])div 2 ;
py:= (yk[5]+yk[6])div 2;
for i:=5 to 8 do
povorot(xk[i],yk[i],px,py);
//изменение диаметра круга
inc(ll); dd:=dd0 div ll;
Canvas.Pen.Color:=clBlack;
RisTelega;
if x[4]>=ClientWidth then Timer1.Enabled:=false;
end;//procedure TForm1.Dwish
procedure TForm1.Button3Click(Sender: TObject);
begin close; end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=False;
end;
end.
ЗАДАНИЯ НА ЛАБОРАТОРНЫЕ РАБОТЫ
взять из учебного пособия
А. Л. Исаев, А. В. Куров «Машинная графика в среде программирования Delphi» . – М.: Изд-во МГТУ им. Н. Э. Баумана, 2006. (взять в библиотеке)
Таблица 11, стр 55.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.