Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2012, 21:00
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
По умолчанию Графические возможности Delphi

Проиллюстрируйте законы Кеплера, согласно которым планеты движутся по эллипсам, в одном из фокусов которого находиться солнце. Параметрические уравнения траектории движения по эллипсу имеют вид:
x = r1cos(t)
y = r2sin(t)

где t принимает значения от [0;2π]
Ответить с цитированием
  #2  
Старый 28.03.2012, 21:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,093
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

И в чем проблема? Берем TPaintBox и рисуем на нем. Угол (t) меняем по таймеру. Кстати, можно не рисовать, а просто загрузить несколько картинок и просто выводить их копированием (для быстроты и красоты).
Ответить с цитированием
  #3  
Старый 28.03.2012, 21:43
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
По умолчанию

Программу желательно написать с использованием графических примитивов
Ответить с цитированием
  #4  
Старый 28.03.2012, 21:46
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
По умолчанию

Очень прошу помогите
Ответить с цитированием
  #5  
Старый 28.03.2012, 21:53
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Здесь всегда срашивают, как минимум, ваше собственное видение решения данной задачи, а потом помогают в успешной его реализации
Ответить с цитированием
  #6  
Старый 28.03.2012, 22:53
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, если не знаешь, как делать, могу подсказать.
Все по-простому, можно доделать - мой вариант:
P.S Да, пока не забыл: в строке
Код:
dy:=cy+round(r2*sin(t)+r2);
красное удалить
Вложения
Тип файла: rar Solar.rar (167.6 Кбайт, 12 просмотров)

Последний раз редактировалось YVitaliy, 28.03.2012 в 22:56.
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
ksu04061992 (28.03.2012)
  #7  
Старый 29.03.2012, 22:56
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
Вопрос

У меня получилось, но как сделать так что бы планета не оставляла следов при передвижении?

Код:
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  
Старый 29.03.2012, 22:59
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
По умолчанию

Вот сама программа
Вложения
Тип файла: rar ellips.rar (168.8 Кбайт, 14 просмотров)
Ответить с цитированием
  #9  
Старый 29.03.2012, 23:08
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Добавь строчку:
Код:
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;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 29.03.2012, 23:18
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Здесь я не вижу ни строчки из своего примера! А где пропали фокусы эллипса? Их уже не нужно? Чтобы не оставалось следа, нужно делать, как пишет angvelem, но лучше так, как в моем примере - рисовать сначала на отдельный битмап, а потом все сразу на имаг - так мерцания не будет.
Ответить с цитированием
  #11  
Старый 29.03.2012, 23:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Видно разобраться в твоём примере сил не хватило , или своё лучше.
Хотя и в твоём примере имеется недостаток:
Код:
  Buff.Width:=Image1.Width;
  Buff.Height:=Image1.Height;
  cx:= Buff.Width div 2;// Центр экрана
  cy:= Buff.Height div 2;// Центр экрана
зачем это держать в процедуре Draw?

Хотя, если форма с изменяемым размером...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 29.03.2012 в 23:26.
Ответить с цитированием
  #12  
Старый 29.03.2012, 23:28
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, на случай изменения размеров имага. Я наперед все просчитываю! Вот так вот... Я же писал:
Цитата:
можно доделать
. Но не переделать сначала, причем, по-моему, неверно... ТС чето рванулся к ООП, но в итоге все еще более запутал. Как на меня, мой пример нагляднее.
Ответить с цитированием
  #13  
Старый 31.03.2012, 10:03
ksu04061992 ksu04061992 вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 6
Репутация: 10
По умолчанию

YVitaliy, не спорю у вас хороший пример, он мне очень помог спасибо, просто преподаватель предпочитает такой стиль программирования, что бы там записи были и тп.
Ответить с цитированием
  #14  
Старый 31.03.2012, 21:12
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Стиль программирования у тебя должен быть свой.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 23.05.2012, 09:25
progga progga вне форума
Прохожий
 
Регистрация: 23.05.2012
Сообщения: 4
Репутация: 10
По умолчанию

Привет, мне нужна программа срочно, которая будет доказывать второй закон Кеплера
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:39.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025