Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 23:36   #1
azbin
Новичок
Джуниор
 
Аватар для azbin
 
Регистрация: 26.05.2011
Сообщений: 1
Восклицание ДВИЖЕНИЕ ШАРА ПО ПАРАБОЛЕ.КОСЯК С ТАЙМЕРОМ.

ШАР ДВИЖЕТСЯ С ПОВЕРХНОСТИ ПО ПАРАБОЛЕ , ВЗЛЕТАЕТ С ЛЕВОГО УГЛА И ПРИЗЕМЛЯЕТСЯ В ПРАВОМ УГЛУ НА ПОВЕРХНОСТЬ , ПРИ ЭТОМ ОН ВРАЩАЕТСЯ. ПРОБЛЕМА В ТОМ ЧТО НЕКОРРЕКТНО ЗАДАЁТСЯ СКОРОСТЬ ШАРА И СКОРОСТЬ ВРАЩЕНИЯ ШАРА И Я НАОБУМ ПОДГОНЯЛ ТРАЕКТОРИЮ ПОД ПАРАБОЛУ. ПРОШУ ПОМОЧЬ СО СКОРОСТЯМИ И С ТРАЕКТОРИЕЙ(с траекторией особенно) вот код
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
const
xn=10.0; yn=434.0; d=20.0; m=pi/180; r=30.0;
type
m1=array[1..18] of real;
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button5: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);
procedure Button4Click(Sender: TObject);


private
x,y,xk,yk:m1; interval,dx,dy:integer; f:real;
public
procedure Risunok;
procedure perenos(var xx,yy:real);
procedure Povorot(var xx,yy:real; xc,yc:integer);
{ Public declarations }
end;

var
Form1: TForm1;

cvet:boolean;
i:integer; di,dl:real; //di - проекция радиуса на ось при угле=45гр.
v,w:real;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
//var i: integer;
begin

Timer1.Enabled:=false;
Timer1.Interval:=interval;
//ввод скорости
interval:=40;
f:=0.12;
dx:=1; //1
dy:=25;
//ввод координат точек

xk[5]:=xn; yk[5]:=yn;
xk[6]:=xk[5]+2*r; yk[6]:=yk[5]+2*r;
xk[1]:=xk[5]; yk[1]:=yk[5]+r;
xk[2]:=xk[5]+2*r; yk[2]:=yk[5]+r;
xk[3]:=xk[5]+r; yk[3]:=yk[5];
xk[4]:=xk[5]+r; yk[4]:=yk[5]+2*r;


end;


procedure TForm1.Risunok;
begin
with canvas do
begin
// рисуем ШАР
brush.style:=bssolid;
brush.color:=clwhite;
ellipse(round(xk[5]),round(yk[5]),round(xk[6]),round(yk[6]));
moveto(round(xk[1]),round(yk[1]));
lineto(round(xk[2]),round(yk[2]));
moveto(round(xk[3]),round(yk[3]));
lineto(round(xk[4]),round(yk[4]));

end;
end;


// СТАТИЧЕСКОЕ ИЗОБРАЖЕНИЕ
procedure TForm1.Button1Click(Sender: TObject);
begin
FormCreate(Sender);
with Canvas do
begin
Brush.Style:=bsSolid;
Brush.Color:=clWhite;
Rectangle(0,0,ClientWidth,ClientHei ght);
Risunok;
moveto(0,ClientHeight-50);
lineto(ClientWidth,ClientHeight-50);

end;

end;


//ДВИЖЕНИЕ
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;

//движение ШАРА
procedure TForm1.perenos(var xx,yy:real);
begin
xx:=xx+15*dx;
yy:=yy-dy;
end;

//вращение ШАРА
procedure TForm1.Povorot(var xx,yy:real; 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.Timer1Timer(Sender: TObject);
var i:integer; px,py:integer;
begin
dx:=dx;
dy:=dy-1;
if (yk[1]>=423) and (xk[1]>=200) then Timer1.Enabled:=false;
Canvas.Pen.Color:=clWhite;
Risunok;
for i:=1 to 7 do
begin
perenos(x[i],y[i]);
perenos(xk[i],yk[i]);
end;

px:= round((xk[1]+xk[2]) / 2);
py:= round((yk[3]+yk[4]) / 2);
for i:=1 to 4 do
povorot(xk[i],yk[i],px,py);
Canvas.Pen.Color:=clBlack;
Risunok;

if yk[4]=r then
begin
dy:=0;
dx:=0;
end;
end;

//СТОП
procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;

//ВЫХОД
procedure TForm1.Button5Click(Sender: TObject);
begin
close;
end;



procedure TForm1.Button6Click(Sender: TObject);
begin
cvet:=false;
end;





procedure TForm1.Button4Click(Sender: TObject);
begin
v:=StrToFloat(Edit1.text);
w:=StrToFloat(Edit2.text);

end;

end.
azbin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить радиус шара! Sandra_Breiv Помощь студентам 1 27.01.2011 14:32
Задать движение шара по траектории параболы в Delphi reznor264 Помощь студентам 6 02.11.2010 19:36
Как реализовать форму с в виде объямного шара? Mixasik Общие вопросы Delphi 12 02.09.2009 06:51
Решение задачи на нахождение площади и обьема куба(а также вписанного шара) soldm Помощь студентам 4 30.09.2008 08:32
процедура, которая вычисляет объем шара motaro Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2008 19:22