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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2007, 19:14   #1
redred
 
Регистрация: 08.12.2007
Сообщений: 5
По умолчанию Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью?

Как нарисовать в Delphi два движущиеся на встречу друг друга шара с определенной скоростью?

Последний раз редактировалось redred; 08.12.2007 в 19:16.
redred вне форума Ответить с цитированием
Старый 08.12.2007, 20:05   #2
Andr
Пользователь
 
Аватар для Andr
 
Регистрация: 11.04.2007
Сообщений: 75
По умолчанию

Да впринципе много есть способов. Например сделай два Imagа, в которых нарисованы эти шары и двигай их с помощью таймера.
Andr вне форума Ответить с цитированием
Старый 08.12.2007, 20:17   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

В Дельфи даже есть тип TShape там и шар есть.
А в разделе про игры есть даже уроки, вот ссылка
http://www.programmersforum.ru/showthread.php?t=1206
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 08.12.2007, 20:39   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
Счастье

Шары и окружность не одно и тоже. Может имелось в виду сфера....
И возможно автор хочет 3Д.

Надо уточнить... если окружность то смотри до меня что писали...
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.12.2007, 22:21   #5
redred
 
Регистрация: 08.12.2007
Сообщений: 5
По умолчанию

у меня шар , а не сфера. Мне надо сделать так, что есть два шара, можна задавать скорость с какой они будут двигатся , эти скорости могут быть разными. И мне надо показать эту картинку. Теоретически я знаю, что надо использовать таймер, TShape и т.д., но практически мне нужна помощь в написании алгоритма.На самом деле мне еще нужно определить момент их столкновения и в этот момент направить их движения в противоположные стороны.
redred вне форума Ответить с цитированием
Старый 08.12.2007, 23:31   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Все зависит от того насколько реалистичной должна быть физика. Если простое линейное движение то это несложно.
Объект Шар
Скорость Х
Скорость Y
Координата X
Координата Y
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 08.12.2007, 23:57   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

на скорую руку...... коегде криво иногда срабатывает.. Но принцип понятен.

И всёже шар - это объёмная фигура.
Вложения
Тип файла: rar Sphere.rar (162.4 Кб, 238 просмотров)
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 09.12.2007, 00:38   #8
redred
 
Регистрация: 08.12.2007
Сообщений: 5
По умолчанию

Спасибо за помощь. Я еще поработаю над этим ,если возникнут вопросы обращусь.Еще раз спасибо.
redred вне форума Ответить с цитированием
Старый 11.12.2007, 09:17   #9
redred
 
Регистрация: 08.12.2007
Сообщений: 5
По умолчанию

мне опять нужна помощь. Вообщем написана была мною программа, но что-то не так. у меня есть два шарика они катятся на встречу друг к другу со скоростями v01 и v02. После столкновения шарики должны отлететь в разные стороны со скоростями S_speed_1 и S_speed_2 соответственно (скорость S_speed_1 и S_speed_2 зависит от масс шариков ma1 и ma2 и их начальной скорости v01 и v02 вот откуда такая формула ниже - закон сохранения импульса). Так вот когда мной была написана ниже программа, и когда она была запущена, то шарики совсем не отлетали в разные стороны, что-то было непонятное. Подскажите пожалуйста.
Shape1 находится слева,
Shape2 - справа.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Shape1: TShape;
Button1: TButton;
Shape2: TShape;
m1: TEdit;
m2: TEdit;
v1: TEdit;
v2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);


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

var
Form1: TForm1;
v01,v02,S_speed_1,S_speed_2,ma1,ma2 :integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=not Timer1.Enabled
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

v01:=round(strtofloat(v1.Text));
v02:=round(strtofloat(v2.Text));
ma1:=round(strtofloat(m1.Text));
ma2:=round(strtofloat(m2.Text));
S_speed_1:=round((2*v02*ma2+(ma1-ma2)*v01)/(ma1+ma2));
S_speed_2:=round((2*v01*ma1+(ma2-ma1)*v02)/(ma1+ma2));

if Shape1.Left + 65 < Shape2.Left then
Shape1.Left := Shape1.Left + v01

else Shape1.Left := Shape1.Left - S_speed_1 ;


if Shape2.Left > Shape1.Left+65 then
Shape2.Left := Shape2.Left - v02
else Shape2.Left := Shape2.Left + S_speed_2


end;
end.
redred вне форума Ответить с цитированием
Старый 11.12.2007, 10:01   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
  if Timer1.Enabled then Button1.Caption := 'Стоп'
  else Button1.Caption := 'Старт';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  v01 := StrToInt (v1.Text);
  v02 := StrToInt (v2.Text);
  ma1 := StrToInt (m1.Text);
  ma2 := StrToInt (m2.Text);

  if Shape1.Left < 0 then v01 := -v01;
  if Shape2.Left + 65 > ClientWidth then v02 := -v02;

  if Shape1.Left + 65 > Shape2.Left then begin
    v01 := Round ((ma2*v02 - ma1*v01) / (2 * ma1));
    v02 := Round (-ma1*v01/ma2);
  end;

  v1.Text := IntToStr (v01);
  v2.Text := IntToStr (v02);
  Shape1.Left := Shape1.Left + v01;
  Shape2.Left := Shape2.Left + v02;
end;
На большой разницы в массах глючит. Из-за того, что скорость - целое число. При округлении 0,22 становится равна 0.
Доделаешь.

Последний раз редактировалось Sibedir; 11.12.2007 в 10:04.
Sibedir вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Как перейти к определенной строчке в Memo DmT Общие вопросы Delphi 5 08.07.2008 21:50
процедура, которая вычисляет объем шара motaro Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2008 19:22
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54
Delphi World 6 Pro (5005 Статей по Delphi) CoreFox Свободное общение 3 23.05.2007 10:43