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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2015, 17:26   #1
vic7or
Новичок
Джуниор
 
Регистрация: 09.05.2015
Сообщений: 4
Сообщение Движение Луны вокруг Земли. Delphi

Добрый день, форумчане.

Есть вопрос, как сделать чтобы при изменении размеров формы Земля всегда находилась центре формы, а Луна двигалась по новой орбите?
И уменьшалась и увеличивалась Луна с Землей в зависимости от изменения размеров формы ?

Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm2 = class(TForm)
    img1: TImage;
    tmr1: TTimer;
    shp1: TShape;
    shp2: TShape;
    procedure FormActivate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure FormResize(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
 uses Unit1;
{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
var i:Integer;
begin
  Form2.Width:=form2.Height;
  alfa := 0;  // начальные значения
  MoonR:=15;
  EarthR:=30;
  Raduis:=img1.Width div 2 - 30;     {установим цвет закраски}
  img1.Canvas.Brush.Color:=clBlack;   {зальем окно черным цветом}
  img1.Canvas.FloodFill(10,10,clBlack,fsBorder);    {установим цвет пера}
  img1.Canvas.Pen.Color:=clWhite;                {нарисуем орбиту}
  img1.Canvas.Ellipse(img1.Width div 2 - Raduis, 
                             img1.Height div 2 - Raduis,
                             img1.Width div 2 + Raduis,
                             img1.Height div 2 + Raduis);
  
{устанавливает Землю в центре формы}
 shp1.Left := img1.Width div 2- EarthR;
 shp1.Top := img1.Height div 2- EarthR;
{устанавливаем размеры Земли}
 shp1.Width:= EarthR*2;
 shp1.Height:= EarthR*2;
{устанавливаем Луну на орбите справа от Земли на той же высоте}
 shp2.Left:= img1.Width div 2 + Raduis- MoonR ;
 shp2.Top:= img1.Height div 2 - MoonR;
{устанавливаем размеры Луны}
 shp2.Width:=MoonR*2;
 shp2.Height:=MoonR*2;
end;procedure TForm2.FormResize(Sender: TObject);
begin
  begin
    if form2.height>=form2.Width then
    form2.height:=form2.Width else
    form2.Width:=form2.height;
  end;
end;

procedure TForm2.tmr1Timer(Sender: TObject);
begin
  shp2.Left:=img1.Width div 2+trunc(Raduis*cos(alfa))-MoonR;
  shp2.Top:=img1.Height div 2-trunc(Raduis*sin(alfa))-MoonR;
  alfa:=alfa+0.1;
end;
end.
vic7or вне форума Ответить с цитированием
Старый 09.05.2015, 17:40   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Для этого нужно ввести специальную переменную которая бы характеризовала изменения (в абсолютной величине или в процентах). И уже перемножая этот коэффициент, считать поправку на размер и расстояние.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.05.2015, 17:53   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А почему Луна всего в 2 раза меньше Земли? На самом деле - где-то в 3,5 раза.
И модуле формы2, можно вместо
Код:
  Form2.Width:=form2.Height;
писать просто
Код:
  Width:=Height;
Вы ведь радиус орбиты масштабируете
Код:
Raduis:=img1.Width div 2 - 30;
Ну и с размерами Земли и Луны так же.

Например:
Код:
begin
  Width:=Height;
  alfa := 0;  // непонятно, что за альфа
  MoonR:=Height div 100; // например 
  EarthR:=7*MoonR div 2;
// и т .д.

Последний раз редактировалось type_Oleg; 09.05.2015 в 17:57.
type_Oleg вне форума Ответить с цитированием
Старый 09.05.2015, 18:19   #4
vic7or
Новичок
Джуниор
 
Регистрация: 09.05.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А почему Луна всего в 2 раза меньше Земли? На самом деле - где-то в 3,5 раза.
И модуле формы2, можно вместо
Код:
  Form2.Width:=form2.Height;
писать просто
Код:
  Width:=Height;
Вы ведь радиус орбиты масштабируете
Код:
Raduis:=img1.Width div 2 - 30;
Ну и с размерами Земли и Луны так же.

Например:
Код:
begin
  Width:=Height;
  alfa := 0;  // непонятно, что за альфа
  MoonR:=Height div 100; // например 
  EarthR:=7*MoonR div 2;
// и т .д.
Земля не меняет даже положение на форме при ее уменьшении\увеличении. Луна бегает, но не по радиусу.. хотя всегда во круг центра. Оба объекта не меняют размер..

Альфа - угол вращения Луны

Весь день сижу над этой задачей.. растолкуйте, пожалуйста, как нужно
vic7or вне форума Ответить с цитированием
Старый 09.05.2015, 19:45   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Земля не меняет даже положение на форме при ее уменьшении\увеличении. Луна бегает, но не по радиусу.. хотя всегда во круг центра. Оба объекта не меняют размер..
Это нам ясно
У Вас в комментах к программе все расписано (очевидно писали не Вы сами). Вам нужно выразить одну константу (MoonR) через другую (EarthR). Например
Код:
MoonR:=EarthR div 3.5;
А дальше пробуйте.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.05.2015, 20:37   #6
vic7or
Новичок
Джуниор
 
Регистрация: 09.05.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это нам ясно
У Вас в комментах к программе все расписано (очевидно писали не Вы сами). Вам нужно выразить одну константу (MoonR) через другую (EarthR). Например
Код:
MoonR:=EarthR div 3.5;
А дальше пробуйте.
Забыл написать... радиусы Луны, Земли и орбиты вводятся с клавиатуры..
Кто-то так..
Код:
  MoonR:=strtoint(form1.edt1.text);
  EarthR:=strtoint(Form1.edt2.text);
  Raduis:=strtoint(Form1.edt3.Text);
vic7or вне форума Ответить с цитированием
Старый 09.05.2015, 20:57   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

vic7or, наверное вы сами ничего не поняли в задании. И хотите, чтобы кто-то понял вместо вас ?
Сначала ну вас
И уменьшалась и увеличивалась Луна с Землей в зависимости от изменения размеров формы..
.. а потом
радиусы Луны, Земли и орбиты вводятся с клавиатуры..
type_Oleg вне форума Ответить с цитированием
Старый 09.05.2015, 21:06   #8
vic7or
Новичок
Джуниор
 
Регистрация: 09.05.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
vic7or, наверное вы сами ничего не поняли в задании. И хотите, чтобы кто-то понял вместо вас ?
Сначала ну вас
И уменьшалась и увеличивалась Луна с Землей в зависимости от изменения размеров формы..
.. а потом
радиусы Луны, Земли и орбиты вводятся с клавиатуры..

Да.. фигня получилась. Перечитал еще раз задание. В общем начальные значения вводятся с клавиатуры, а потом при изменении формы Луна с Землей меняются в размерах в зависимости от изменения размера формы.
vic7or вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить время и глубину взрыва от восхода луны Gezerg Помощь студентам 1 01.12.2013 17:40
Поворот изображения вокруг своей оси во время движения по кругу вокруг центра AsaDorius Помощь студентам 1 15.12.2010 21:57
А Вы зависите от Луны? Alex Cones Свободное общение 33 29.11.2010 10:28
движение вокруг тела по заданной траектории PADOCTb Помощь студентам 2 12.10.2008 16:39
Вращение луны вокруг Земли [LOL] Помощь студентам 4 19.06.2007 21:14