Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
1

Изобразить, как одна точка догоняет другую

28.05.2013, 13:04. Показов 1340. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста, как реализовать следующее:
Две точки появляются на расстоянии друг от друга, одна точка идет по какой-то траектории, а вторая догоняет ее по кратчайшему пути. Точки движутся с заданной скоростью...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2013, 13:04
Ответы с готовыми решениями:

Изобразить фигуру правильной пятиконечной звезды, одна из сторон горизонтальна
ребята учусь на 3 курсе и задали составить программу в паскале, которая в графическом режиме...

SetPixel и GetPixel. Одна точка закрашивает другую, но не должна
Здравствуйте. Задача: нарисовать прямую заданной толщины с полоской в 1 пиксель по середине. Как бы...

Как сделать , чтобы одна текстура не перекрывала другую?
Как сделать , чтобы одна текстура не перекрывала другую? У меня здесь одна текстура получается...

Как сделать так, чтобы при нажатии на кнопку менялась одна форма на другую?
Я вот пытаюсь разработать тест и столкнулась с такой проблемой, как смена формы на другую... В...

13
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
28.05.2013, 14:32 2
Это называется "Задача перехвата" (при наведении перехватчика на цель). Элементарно решается для прямолинейных траекторий: здесь надо найти время и курс перехвата (можно из теоремы косинусов). При сложной, но заранее известной, траектории цели без вычисления интегралов не обойтись. А вот если цель меняет характеристики своей траектории, то ... И так далее.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.05.2013, 15:07 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Например так...
Pascal
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
41
42
43
44
45
46
47
48
49
uses crt,graph;
var x1,y1,x2,y2:longint;
    tx,ty,x11,y11,x12,y12:integer;
    dx1,dy1,dx2,dy2:integer;
    r:real;
begin
initgraph(dx1,dy1,'');
x1:=50;y1:=50;
dx1:=3;
x2:=getmaxX div 2;y2:=getmaxY-100;
setcolor(9);
circle(x1,y1,3);
setfillstyle(1,9);
floodfill(x1,y1,9);
setcolor(10);
circle(x2,y2,3);
setfillstyle(1,10);
floodfill(x2,y2,10);
setcolor(11);
x11:=x1;
x12:=x2;y12:=y2;
repeat
r:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if r>0 then
 begin
  dx2:=round((x1-x2)*5/r);
  dy2:=round((y1-y2)*5/r);
  x11:=x1+dx1;
  x12:=x12+dx2;y12:=y12+dy2;
  setcolor(9);
  line(x1,y1,x11,y1);
  x1:=x11;;
  setcolor(10);
  line(x2,y2,x12,y12);
  x2:=x12;y2:=y12;
  delay(100);
 end;
until r<=0;
{нарисуем место встречи}
setcolor(9);
circle(x1+6,y1,3);
setfillstyle(1,9);
floodfill(x1+6,y1,9);
setcolor(10);
circle(x2,y2,3);
setfillstyle(1,10);
floodfill(x2+1,y2,10);
readln
end.
1
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
29.05.2013, 01:43  [ТС] 4
Никак не пойму... На секунду на экране появляется темнота, а потом исчезает и сам паскаль выключается... В чем может быть проблема?

Добавлено через 3 часа 44 минуты
А можно сделать подпись к каждой точке? То есть чтобы точка двигалась, а под ней была надпись с надписью, например "точка 1". Просто если ставить надпись в цикле, то она накладывается друг на друга, я так понимаю нужно перемещать ее, но как?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.05.2013, 07:39 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Tiktak Посмотреть сообщение
На секунду на экране появляется темнота, а потом исчезает и сам паскаль выключается... В чем может быть проблема?
Наверное нужно скопировать в папку с программой драйвер EGAVGA.BGI из папки BGI

Добавлено через 32 минуты
Движение точек с подписями
Pascal
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
uses crt,graph;
procedure tochka(x,y,c:integer;s:string);
begin
setcolor(c);
circle(x,y,2);
setfillstyle(1,c);
floodfill(x,y,c);
outtextXY(x,y-10,s);
end;
var x1,y1,x2,y2:longint;
    dx1,dy1,dx2,dy2:integer;
    r:real;
begin
initgraph(dx1,dy1,'');
x1:=50;y1:=50;
dx1:=3;
x2:=getmaxX div 2;y2:=getmaxY-100;
tochka(x1,y1,9,'1');
tochka(x2,y2,10,'2');
repeat
delay(100);
tochka(x1,y1,0,'1');
tochka(x2,y2,0,'2');
r:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if r>0 then
 begin
  dx2:=round((x1-x2)*5/r);
  dy2:=round((y1-y2)*5/r);
  x1:=x1+dx1;
  x2:=x2+dx2;y2:=y2+dy2;
  tochka(x1,y1,9,'1');
  tochka(x2,y2,10,'2');
 end;
until r<=0;
{нарисуем место встречи}
cleardevice;
tochka(x1+6,y1,9,'1');
tochka(x2,y2,10,'2');
readln
end.
1
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
29.05.2013, 09:42 6
Цитата Сообщение от Tiktak Посмотреть сообщение
Здравствуйте! Подскажите, пожалуйста, как реализовать следующее:
Две точки появляются на расстоянии друг от друга, одна точка идет по какой-то траектории, а вторая догоняет ее по кратчайшему пути. Точки движутся с заданной скоростью...
Это задача с двумя неизвестными: время и курс.

Добавлено через 11 минут
Во многих случаях одна точка никогда не догонит другую.
1
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
29.05.2013, 12:26  [ТС] 7
Puporev, Благодарю, а не подскажите как еще как в этом коде изменять направление первой точки и скорость обоих?

Добавлено через 36 секунд
Проблема с запуском, кстати, решилась использованием эмулятора DOS, через него работает.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.05.2013, 12:57 8
Цитата Сообщение от Tiktak Посмотреть сообщение
а не подскажите как
Нет не подскажу, ибо не знаю что Вы там творите... Я просто привел пример...
1
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
29.05.2013, 13:10  [ТС] 9
Puporev, Хорошо, а может тогда подскажите как реализовать преждевременный выход по нажатию какой-либо кнопки до того как точки встретились? Просто в процессе написания иногда сразу виден баг в программе, но приходится ждать пока точки столкнутся друг с другом...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.05.2013, 13:11 10
стр. 34
Pascal
1
until (r<=0)or keypressed;
1
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
29.05.2013, 18:42  [ТС] 11
А как можно сделать подсчет секунд за которое точки встретятся?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.05.2013, 18:53 12
uses dos;
функция gettime, 1 раз в начале, второй в конце, берешь разность (переводишь и то и другое в секунды)
1
8 / 8 / 3
Регистрация: 16.04.2010
Сообщений: 80
29.05.2013, 19:59  [ТС] 13
Еще вопрос... Графический режим я использую в процедуре, после чего возвращаюсь в тело(меню), не графическое, для этого использую функцию RestoreCrtMode. Но если опять выбрать графическую процедуру, то программа закрывается. Как можно это исправить?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.05.2013, 20:35 14
При каждом возвращении в графический режим писать
initgraph(x,y,'');
При каждом возвращении в текстовый режим режим писать
RestoreCrtMode
1
29.05.2013, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 20:35
Помогаю со студенческими работами здесь

Изобразить треугольник, одна сторона которого совпадает с правой стороной формы
Ребят, помогите пожалуйста, нужно написать приложение,которое в заголовке формы выводит её размеры...

Одна программа вызывает другую
Как это сделать? Напишите две программы. Первая должна суммировать два введённых из входного...

Одна ячейка налезает на другую.
Имеется следующий макет: &lt;body style=&quot;margin:0px;&quot;&gt; &lt;table border=0 cellspacing=5...

Гугл что догоняет Яндекс по глобальной статистике?
Как то уже месяца 2 не интересовался глобальной статистикой ПСов по данным LI и Spylog. А сегодня...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru