Все лабы для ИУ-7 - решения и задания (Студентам09ЗД к Упр 09 МГ3 ДВИЖЕНИЕ)

Посмотреть архив целиком


СЕМ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.


Случайные файлы

Файл
27001-1.rtf
180557.rtf
168893.rtf
142725.rtf
118238.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.