![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Проиллюстрируйте законы Кеплера, согласно которым планеты движутся по эллипсам, в одном из фокусов которого находиться солнце. Параметрические уравнения траектории движения по эллипсу имеют вид:
x = r1cos(t) y = r2sin(t) где t принимает значения от [0;2π] |
|
#2
|
|||
|
|||
|
И в чем проблема? Берем TPaintBox и рисуем на нем. Угол (t) меняем по таймеру. Кстати, можно не рисовать, а просто загрузить несколько картинок и просто выводить их копированием (для быстроты и красоты).
|
|
#3
|
|||
|
|||
|
Программу желательно написать с использованием графических примитивов
|
|
#4
|
|||
|
|||
|
Очень прошу помогите
|
|
#5
|
||||
|
||||
|
Здесь всегда срашивают, как минимум, ваше собственное видение решения данной задачи, а потом помогают в успешной его реализации
![]() |
|
#6
|
||||
|
||||
|
Ну, если не знаешь, как делать, могу подсказать.
Все по-простому, можно доделать - мой вариант: P.S Да, пока не забыл: в строке Код:
dy:=cy+round(r2*sin(t)+r2); ![]() Последний раз редактировалось YVitaliy, 28.03.2012 в 22:56. |
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
ksu04061992 (28.03.2012)
| ||
|
#7
|
|||
|
|||
|
У меня получилось, но как сделать так что бы планета не оставляла следов при передвижении?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Draw;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type Planeta=record
x,y,d,d2,r1,r2:integer;
t:real;
end;
var
Form1: TForm1;
s,z,m,v:planeta;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:= false;
s.d:= 50; s.d2:=s.d div 2;
s.x:= Image1.Width div 2;
s.y:= Image1.Height div 2;
m.d:= 10;
m.d2:= m.d div 2;
m.r1:=100;
m.r2:=60;
m.t:=0;
m.x:=m.r1*trunc(cos(m.t));
m.y:=m.r2*trunc(sin(m.t));
end;
procedure tform1.Draw;
begin
image1.Canvas.Ellipse (s.x-m.r1,s.y-m.r2,s.x+m.r1,s.y+m.r2) ;
image1.Canvas.Ellipse(s.x-s.d2,s.y-s.d2,s.x+s.d2,s.y+s.d2);
image1.Canvas.Ellipse(m.x-m.d2,m.y-m.d2,m.x+m.d2,m.y+m.d2);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
m.t:=m.t+0.06;
//if m.t>2*pi then m.t:=0;
m.x:=s.x+round(m.r1*cos(m.t));
m.y:=s.y-s.r2-round(m.r2*sin(m.t));
draw;
end;
end.lmikle: Пользуемся тегами!!! http://rghost.ru/37302439 Последний раз редактировалось lmikle, 30.03.2012 в 00:05. |
|
#8
|
|||
|
|||
|
Вот сама программа
|
|
#9
|
||||
|
||||
|
Добавь строчку:
Код:
procedure tform1.Draw; begin image1.Canvas.FillRect(image1.ClientRect); image1.Canvas.Ellipse (s.x-m.r1,s.y-m.r2,s.x+m.r1,s.y+m.r2) ; image1.Canvas.Ellipse(s.x-s.d2,s.y-s.d2,s.x+s.d2,s.y+s.d2); image1.Canvas.Ellipse(m.x-m.d2,m.y-m.d2,m.x+m.d2,m.y+m.d2); end; |
|
#10
|
||||
|
||||
|
Здесь я не вижу ни строчки
из своего примера! А где пропали фокусы эллипса? Их уже не нужно? Чтобы не оставалось следа, нужно делать, как пишет angvelem, но лучше так, как в моем примере - рисовать сначала на отдельный битмап, а потом все сразу на имаг - так мерцания не будет. |
|
#11
|
||||
|
||||
|
Видно разобраться в твоём примере сил не хватило
, или своё лучше.Хотя и в твоём примере имеется недостаток: Код:
Buff.Width:=Image1.Width; Buff.Height:=Image1.Height; cx:= Buff.Width div 2;// Центр экрана cy:= Buff.Height div 2;// Центр экрана Хотя, если форма с изменяемым размером... Последний раз редактировалось angvelem, 29.03.2012 в 23:26. |
|
#12
|
||||
|
||||
|
Ну, на случай изменения размеров
имага. Я наперед все просчитываю! Вот так вот... Я же писал: Цитата:
![]() |
|
#13
|
|||
|
|||
|
YVitaliy, не спорю у вас хороший пример, он мне очень помог спасибо, просто преподаватель предпочитает такой стиль программирования, что бы там записи были и тп.
|
|
#14
|
||||
|
||||
|
Стиль программирования у тебя должен быть свой.
|
|
#15
|
|||
|
|||
|
Привет, мне нужна программа срочно, которая будет доказывать второй закон Кеплера
|