Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
SonyaR
0 / 0 / 0
Регистрация: 22.05.2011
Сообщений: 1
#1

при достижении шариком границы области происходит изменение направления движения по закону отражения, - Delphi

25.05.2011, 19:19. Просмотров 1376. Ответов 2
Метки нет (Все метки)

Ребята!!!помогите..нужно программу сделать в delphi:
дана прямоугольная область,в которой происходит движение шариков.каждый шарик имеет свой диаметр.начальные координаты и направление движения шариков определяются случайным образом,скорости шариков одинаковы.при достижении шариком границы области происходит изменение направления движения по закону отражения,причем вводится помеха -5..+5.шарики имеют синий цвет.однако,если происходит пересечение шариков,то все шарики,попадающие в пересечение,закрашиваются красным на время пересечения.предусмотреть добавление и удаление шариков без остановки процесса движения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2011, 19:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос при достижении шариком границы области происходит изменение направления движения по закону отражения, (Delphi):

Изменение направления движения - Delphi
Label1 двигается от левого края к правому при достижении границы формы меняет направление движения в обратную сторону.

Направления движения движения кнопок в игре пятнашки - Lazarus
Ребят подскажите как можно задать перемещение кнопок . по какому признаку или действию Заранее всем спасибо !!!

Перенос текста, при достижении нижней границы div'a - HTML, CSS
Добрый день. Возник вопрос - возможно ли реализовать перенос текста таким образом, как на приложенном рисунке. Если да, то объясните как,...

Модуль Graph. Нарисовать овал, который движется по вертикали. При достижении границы меняет цвет - Turbo Pascal
Нарисовать на экране овал зеленого цвета, который движется по вертикали по центру экрана. При достижении границы экрана овал меняет цвет на...

Вывод сообщения при достижении определенной области - JavaScript
Есть страница с текстом... Надо сделать так, чтобы когда мы к примеру прокручиваем ее до определенного элемента (неважно рисунок, ссылка...

Движение символа и смена направления движения при столкновении с границей окна - C (СИ)
как сделать, чтобы символ передвигался и, доходя до рамки менял направление на обратное пишу на чистом C многопоточную программу модели...

2
anonimus
2154 / 1244 / 32
Регистрация: 28.04.2010
Сообщений: 4,563
26.05.2011, 10:32 #2
нет вопроса! По этому тебе еще никто и не ответил.
0
kukuruku310
197 / 184 / 7
Регистрация: 14.02.2010
Сообщений: 539
26.05.2011, 19:18 #3
1. Создаем новый проект
2. На форму кладем кнопку, размещаем ее по верху экрана (свойство Top = 0). Это будет кнопка создания нового шарика
3. На форму кладем компонент Timer, в его свойствах пишем Enabled: True, Interval: 20
4. В редакторе кода после строчки
Delphi
1
{$R *.DFM}
пишем код
Delphi
1
2
3
4
5
6
7
8
9
10
11
const
  PI = 3.14;
type
  pBall = ^TBall;
  TBall = record     // один шарик
    x, y: Double;    // координаты центра
    dir:  Extended;  // направление (угол в радианах)
    cl:   TColor;    // цвет
  end;
var
  Balls: TList;
5. Щелкаем на кнопке. В созданной процедуре пишем код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var
  b: pBall;
  Rect: TRect;
begin
  New(b);
 
  if Balls = nil then
    Balls := TList.Create;
 
  Balls.Add(b);
 
  Rect := ClientRect;
  Randomize;
  b^.x   := Random(Rect.Right - 10);
  b^.y   := Random(Rect.Bottom - 10);
  b^.dir := Random(180)/180 * PI;
  b^.cl := clBlue;
end;
6. Щелкаем на Timer1-Events-OnTimer. В созданной процедуре пишем код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TForm1.Timer1Timer(Sender: TObject);
var
  i, j: Integer;
  Rect: TRect;
begin
  Rect := ClientRect;
  for i := 0 to Balls.Count - 1 do begin
    pBall(Balls[i])^.x := pBall(Balls[i])^.x + 5*sin(pBall(Balls[i])^.dir);
    pBall(Balls[i])^.y := pBall(Balls[i])^.y + 5*cos(pBall(Balls[i])^.dir);
 
    if pBall(Balls[i])^.x <= Rect.Left + 10 then
      pBall(Balls[i])^.dir := -pBall(Balls[i])^.dir
    else if pBall(Balls[i])^.x >= Rect.Right - 10 then
      pBall(Balls[i])^.dir := -pBall(Balls[i])^.dir
    else if pBall(Balls[i])^.y <= Rect.Top + Button1.Height + 10 then
      pBall(Balls[i])^.dir := PI-pBall(Balls[i])^.dir
    else if pBall(Balls[i])^.y >= Rect.Bottom - 10 then
      pBall(Balls[i])^.dir := PI-pBall(Balls[i])^.dir;
    pBall(Balls[i])^.cl := clBlue;
  end;
 
  for i := 0 to Balls.Count - 2 do begin
    for j := i + 1 to Balls.Count - 1 do begin
      if sqrt(Power(pBall(Balls[i])^.x - pBall(Balls[j])^.x, 2) +
              Power(pBall(Balls[i])^.y - pBall(Balls[j])^.y, 2)) < 20 then begin
        pBall(Balls[i])^.cl := clRed;
        pBall(Balls[j])^.cl   := clRed;
      end;
    end;
  end;
 
  Canvas.Brush.Color := clBtnFace;
  Canvas.FillRect(Rect);
 
  for i := 0 to Balls.Count - 1 do begin
    Canvas.Brush.Color := pBall(Balls[i])^.cl;
    Canvas.Ellipse(Trunc(pBall(Balls[i])^.x-10), Trunc(pBall(Balls[i])^.y-10),
                   Trunc(pBall(Balls[i])^.x+10), Trunc(pBall(Balls[i])^.y+10));
  end;
end;
7. запускаем, смотрим

Домашнее задание: какие в данной реализации ошибки/недоработки, как их исправить.
Как и что можно оптимизировать.

После выполнения домашнего задания качаем вложение, смотрим (там пример модуля, как
всю эту чехарду можно написать более-менее адекватно. На абсолютную безгрешность вовсе не
претендует, но, по крайней мере, явные ляпы убраны.
1
Вложения
Тип файла: zip 2.ZIP (6.2 Кб, 54 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2011, 19:18
Привет! Вот еще темы с ответами:

Изменение того или инного параметра при достижении блока - HTML, CSS
Господа, подскажите пожалуйста код js, а лучше сss, который бы изменял css свойство того или инного тэга(изменял ширину hr) при попадании...

Происходит выход за границы при нахождении палиндромов - C#
почему выходит за границы ?(( ищу слова палидромы private void button2_Click(object sender, EventArgs e) { ...

Движение объекта на panel. Изменение направления при нажатии кнопки - C#
Дело такое, есть круг, при нажатии кнопки &quot;Старт&quot; он начинает двигаться на право, и при этом у него цвет ЗЕЛЕНЫЙ, при нажатии &quot;Стоп&quot; он...

Найти скорость движения отражения - Оптика
Доброго времени суток, уже несколько часов ломаю голову, и кажется только запутался. Собственно задача: точечный источник S движется со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru