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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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