Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

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

icq: 401708834
По умолчанию

В Дельфи даже есть тип TShape там и шар есть.
А в разделе про игры есть даже уроки, вот ссылка
http://www.programmersforum.ru/showthread.php?t=1206
mutabor вне форума   Ответить с цитированием
Старый 08.12.2007, 21:39   #4
Карась
Профессионал
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
Репутация: 407
Счастье

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

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

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

icq: 401708834
По умолчанию

Все зависит от того насколько реалистичной должна быть физика. Если простое линейное движение то это несложно.
Объект Шар
Скорость Х
Скорость Y
Координата X
Координата Y
mutabor вне форума   Ответить с цитированием
Старый 09.12.2007, 00:57   #7
Карась
Профессионал
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
Репутация: 407
По умолчанию

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

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

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

мне опять нужна помощь. Вообщем написана была мною программа, но что-то не так. у меня есть два шарика они катятся на встречу друг к другу со скоростями 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, 11:01   #10
Sibedir
Тот ещё
Профессионал
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Адрес: г. Барнаул
Сообщений: 2,260
Репутация: 931
По умолчанию

Код:
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 в 11:04.
Sibedir вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 18:46
Как перейти к определенной строчке в Memo DmT Общие вопросы Delphi 5 08.07.2008 21:50
процедура, которая вычисляет объем шара motaro Паскаль 2 21.01.2008 20: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


21:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.