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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2016, 18:06   #1
Michael_Gazorov
Новичок
Джуниор
 
Регистрация: 04.02.2016
Сообщений: 2
Печаль Если круги коснуться друг друга, или границ монитора, то должны отскочить

Бредовое задание,но мне нужно,что бы два моих круга могли двигаться в разные стороны(Рандомно).Если они коснуться друг друга,или границ монитора,то должны отскочить .Я сделал круги,осталось только движение и условие.Третий день пытаюсь .Ничего не выходит:c



Код:
Program Circle_Name;
USES CRT,Graph;
Procedure Graphinterface;
Var gd,gm:integer;
begin
clrscr;
gd:=detect;
InitGraph(gd,gm,'');
end;
  begin
  clrscr;
  Graphinterface;
  Setcolor(red);
  Setfillstyle(1,red);
  Circle(500,150,50);
  Floodfill(500,150,red);
  SetTextJustify(CenterText,CenterText);
  SetColor(Green);
  OutTextXY(500,150,'Misha');
  Setcolor(blue) ;
  Setfillstyle(1,blue);
  Circle(150,150,50);
  FloodFill(150,150,blue);
  SetTextJustify(CenterText,CenterText);
  SetColor(Green);
  OutTextXY(150,150,'Misha');
 Readkey;
 CloseGraph;
 end.

Последний раз редактировалось Аватар; 04.02.2016 в 18:55.
Michael_Gazorov вне форума Ответить с цитированием
Старый 04.02.2016, 18:40   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Michael_Gazorov Посмотреть сообщение
...Если они коснуться друг друга,или границ монитора,то должны отскочить .Я сделал круги,осталось только движение и условие.Третий день пытаюсь ...
Я у вас не вижу никаких почти переменных. Одни цифры.
Вот вместо Circle(500,150,50) сделайте например Circle(x1,y1,r1) , и меняйте координаты центра x1,y1 - это и будет движение одной окружности.
Также и вторую сделать - Circle(x2,y2,r2)

И проверяйте расстояние между окружностями по теореме Пифагора. Если оно стало <= (r1+r2) - значит они прикоснулись, и должны отскочить. Как там в физике - абсолютно упругий удар. То есть меняются направления движения.
type_Oleg вне форума Ответить с цитированием
Старый 04.02.2016, 19:17   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1) Рисование круга вывести в отдельную процедуру, которая будет принимать координаты центра круга и его радиус

2) В цикле меняете координаты кругов: сначала рисуете черный круг по текущим координатам, а потом белый по новым (тут надо ввести переменные, которые будем прибавлять к координатам круга на каждом шаге, т.н. приращение координат). Вот вам и движение )

3) На каждом шаге цикла проверяете не коснулся ли круг стены (центр круга +- его радиус не должен быть "<0" или "> ширины/высоты экрана". НЕ коснулся ли круг другого круга - расстояние между центрами кругов (привет школьной геометрии) не должно быть меньше суммы их радиусов. Если есть касание - меняете знак приращения одной из координат круга -> он начинает двигаться в другую сторону
-------
прозевал ответ предыдущего комментатора, там по сути уже все написано
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 04.02.2016, 21:56   #4
Michael_Gazorov
Новичок
Джуниор
 
Регистрация: 04.02.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Я у вас не вижу никаких почти переменных. Одни цифры.
Вот вместо Circle(500,150,50) сделайте например Circle(x1,y1,r1) , и меняйте координаты центра x1,y1 - это и будет движение одной окружности.
Также и вторую сделать - Circle(x2,y2,r2)

И проверяйте расстояние между окружностями по теореме Пифагора. Если оно стало <= (r1+r2) - значит они прикоснулись, и должны отскочить. Как там в физике - абсолютно упругий удар. То есть меняются направления движения.
Спасибо
Michael_Gazorov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler. Дан текст, слова которого отделяются друг от друга пробелами. Если слово минимальное по длине единственное, то... megashara Помощь студентам 0 19.05.2014 11:12
Поиск файлов, дублирующих друг друга (C# или C++) Constructor1990 Помощь студентам 4 14.02.2014 19:42
Два класса должны использовать не статичные методы друг друга. Adis_ Общие вопросы C/C++ 4 21.05.2010 18:19
Как сделать так, что б Float-элементы не уезжали друг под друга (если не влазят в экран) barbiturat HTML и CSS 3 09.12.2008 10:26