Автор работы: Пользователь скрыл имя, 08 Ноября 2015 в 13:46, курсовая работа
Из перечисленных примеров может сложиться впечатление, что некоторые математические объекты и операции не реализуются компьютером в их совершенстве и полноте, но таких объектов как будто мало, и их нужно специально отыскивать. Однако такое впечатление, если бы оно возникло, было бы ошибочным. В действительности, пожалуй, нет таких математических объектов и операций, которые были воплощены в компьютере точно. Так, самая очевидная и простая операция - сложение целых чисел - может быть выполнена компьютером лишь для некоторых целых чисел.
kadr.Canvas.MoveTo(200, 600 - 400);
kadr.Canvas.LineTo(200, 600 - 300);
kadr.Canvas.MoveTo(0, 0);
kadr.Canvas.LineTo(0, 600);
kadr.Canvas.LineTo(900, 600);
kadr.Canvas.LineTo(900, 0);
kadr.Canvas.Brush.Color := clGreen;
kadr.Canvas.FloodFill(100, 400, 0, fsBorder);
if alf = 0 then
alf := 0.0001;
kadr.Canvas.Ellipse(round(x - 20), round(600 - y - 20), round(x + 20), round(600 - y + 20));
Form1.Canvas.Draw(0, 0, kadr);
for i := 1 to us do
begin
//Делаем сдвиг
v := sqrt(sqr(vx) + sqr(vy));
fs := n * Re * s * v;
Fsx := -Vx * fs / v;
Fsy := -Vy * fs / v;
Fx := Fsx;
Fy := Fsy - Ft;
Ax := Fx / m;
Ay := Fy / m;
Vx := Vx + ax * dt;
Vy := Vy + ay * dt;
k1 := tan(pi / 2 - alf);
b1 := y - k1 * x;
k2 := -tan(alf);
b2 := y0 - k2 * x0;
xp := (b2 - b1) / (k1 - k2);
yp := k1 * xp + b1;
d := sqrt(sqr(x - xp) + sqr(y - yp));
if d <= r then
begin
v := sqrt(sqr(vx) + sqr(vy));
fi := -ArcTan(vx / vy);
bet := fi + alf;
gam := pi / 2 - alf - bet;
vx := v * cos(gam);
vy := v * sin(gam);
x := x + vx * dt;
y := y + vy * dt;
end
else
begin
x := x + vx * dt;
y := y + vy * dt;
end;
if x > 920 then
Form1.Timer1.Enabled := False;
end;
end;
//Таймер движения с горки
procedure TForm1.Timer2Timer(Sender: TObject);
var
xx, yy, ras, d, Fp, Fs, Ftr, Ftrx, Ftry, Fu, Fux, Fuy, Fx, Fy, ax, ay: Real;
i: Integer;
begin
Kadr.Canvas.Brush.Color := clWhite;
kadr.Canvas.FillRect(rect(0, 0, 900, 600));
kadr.Canvas.Pen.Color := 0;
kadr.Canvas.Pen.Width := 3;
kadr.Canvas.MoveTo(200, 600 - 400);
kadr.Canvas.LineTo(200, 600 - 300);
kadr.Canvas.MoveTo(round(x0), round(600 - y0));
kadr.Canvas.LineTo(round(900), round(600 - y0 + (900 - x0) * sin(alf) / cos(alf)));
kadr.Canvas.Arc(0, 600 - 800, 400, 600 - 400, 0, 600 - 600, 200, 600 - 400);
xx := x2 + ((xc - x2) * 20 / rg);
yy := y2 + ((yc - y2) * 20 / rg);
Kadr.Canvas.Ellipse(Round(xx - 20), 600 - Round(yy - 20),
Round(xx + 20), 600 - Round(yy + 20));
kadr.Canvas.MoveTo(0, 0);
kadr.Canvas.LineTo(0, 600);
kadr.Canvas.LineTo(900, 600);
kadr.Canvas.LineTo(900, 0);
kadr.Canvas.Brush.Color := clGreen;
kadr.Canvas.FloodFill(100, 300, 0, fsBorder);
for i := 1 to us do
begin
x2 := x2 + vvx * dt;
y2 := y2 + vvy * dt;
ras := sqrt(sqr(xc - x2) + sqr(yc - y2));
d := ras - (Rg);
Fp := Ft * (Yc - y2) / Rg;
Fs := Ft * (xc - x2) / Rg;
Ftr := mu * Fp;
Ftrx := -Ftr * (yc - y2) / Rg;
Ftry := Ftr * (xc - x2) / Rg;
Fu := k * d; //
Fux := Fu * (xc - x2) / Rg;
Fuy := Fu * (yc - y2) / Rg;
Fx := Fux + Ftrx;
Fy := -Ft + Fuy + Ftry;
ax := Fx / m;
ay := Fy / m;
Vvx := vvx + ax * dt;
vvy := vvy + ay * dt;
end;
//Если закончился скат с горки то передаем данные другому таймеру, отключаем
//этот таймер, включаем другой таймер
if xx >= 200 then
begin
vx := vvx;
vy := vvy;
x := x2;
y := y2 + 20;
Form1.Timer2.Enabled := False;
Form1.Timer1.Enabled := True;
end;
Form1.Canvas.Draw(0, 0, kadr);
end;
end.