IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Движение предметов
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Составить программу в графическом режиме, в которой по наклонной катится окружность.

program speed;
uses crt, graph;
var
gd,gm:integer;
begin
gd:=VGA;
gm:=VGAhi;
initgraph (gd,gm,'C:\BP\BGI');
if graphresult =grOk then
begin
line (0,0,639,479);
circle (15,20,15);
...
end;
end.



Вот на что меня хватило, может кто подскажет как сделать иллюзию движения
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
может кто подскажет как сделать иллюзию движения
Сделать рисование окружности в цикле... Ну, например, чтобы окружность двигалась из левого верхнего в правый нижний угол, можно сделать:
x := 0;				{ начинаем с X = 0 }
while x < 640 do begin { пока не выйдем за пределы экрана }
line (0,0,639,479); { рисуем линию, по которой "катится" откужность }
circle (x, (3 * x) div 4, 15); { и саму окружность }
x := x + 10; { На следующем шаге будем рисовать правее }
delay(1000); { Сохраняем рисунок какое-то время на экране }
cleardevice; { А потом чистим экран и переходим к следующей итерации }
end;

Теперь о том, почему (3 * x) div 4: все очень просто - разрешение экрана 640*480, то есть, длина относится к высоте (X к Y) как 640/480 = 4/3... У нас есть X. Надо получить Y. Если X/Y = 4/3, то Y = 3*x/4, но деление должно быть целочисленным, поэтому используем div... Если тебе нужно движение НЕ из одного угла в другой - придётся заводить ещё одну переменную - Y - и изменять её там же, где и X...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Уважаемый volvo, по моему, условие содержит два варианта:

Цитата(Spaun @ 14.11.2008 7:57) *

Составить программу в графическом режиме, в которой по наклонной катится окружность.
....
Вот на что меня хватило, может кто подскажет как сделать иллюзию движения


Окружность катится по наклонной, а не по прямой, т.е. либо по диагонали
(к примеру-сверху вниз,слева направо), либо по некой криволинейной траектории. Если по диагонали-то ваш вариант верен, если по криволинейной, приведу свой.


Uses Crt, Graph;
Const r1=72; r2=36;
Var t:Real;
.........
Procedure OrtoCon;
Begin {procedure}
Setcolor(5);
Circle(120,80,r1);

Setcolor(7);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
Circle(Round(120-r2*cos(t)), Round(80-r2*sin(t)),r2);
Delay(1000);

Setcolor(0);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
End;{procedure}

Begin {program}
InitGraph(gd,gm,''); t:=0;

repeat
t:=t+0.1;
OrtoCon;
until ch='q';
CloseGraph
End.{program}


Смотрите "Инь-Ян" на экране. blum.gif
И добро пожаловать в тему "философия и философы-что это по вашему?" cool.gif


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(Чужак)
Окружность катится по наклонной, а не по прямой, т.е. либо по диагонали
(к примеру-сверху вниз,слева направо), либо по некой криволинейной траектории.
Цитата
Наклонной, проведенной из данной точки к данной прямой, называется отрезок, соединяющий данную точку с любой точкой прямой, неявляющейся основанием перпендикуляра, опущенного из этой же точки на данную прямую.
( http://neive.by.ru/geometriia/otr1.html ) Я надеюсь, прямолинейность отрезка (в данном контексте) не оспаривается? Откуда взялась "криволинейная траектория", если не секрет?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Уважаемый, Чужак, надеюсь вы не возражаете, если я приведу ваш код к рабочему виду? wink.gif

Uses Crt, Graph, wincrt;
Const r1=72; r2=36;
Var t:Real;
gd,gm: integer;
Procedure OrtoCon;
Begin {procedure}
Setcolor(5);
Circle(120,80,r1);

Setcolor(7);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
Circle(Round(120-r2*cos(t)), Round(80-r2*sin(t)),r2);
Delay(100); //думаю зависит от конкретного компа, так что каждому свое ))

Setcolor(0);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
End;{procedure}

Begin {program}
gd:=VGA;
gm:=VGAhi;
InitGraph(gd,gm,''); t:=0;
repeat
t:=t+0.1;
OrtoCon;
until keypressed; { выполнение закончится, когда будет нажата любая клавиша,
в предыдущем варианте приходилось завершать принудительно }
while heypressed do readkey; //очищаем буфер клавиатуры
CloseGraph
End.{program}


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Цитата(volvo @ 14.11.2008 22:32) *

( http://neive.by.ru/geometriia/otr1.html ) Я надеюсь, прямолинейность отрезка (в данном контексте) не оспаривается? Откуда взялась "криволинейная траектория", если не секрет?

Автор темы, по-моему, не выразился столь конкретно. В разговорном языке "наклонная" означает "находящаяся под наклоном". Впрочем, пусть автор сам решает, какой вариант ему нужен. cool.gif

Айра, не возражаю. give_rose.gif
Кстати, у меня выходил без принуждений.

Сообщение отредактировано: Чужак -


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
Кстати, у меня выходил без принуждений.

Странно, q ведь нигде не вводится..
 repeat
t:=t+0.1;
OrtoCon;
until ch='q';

Может IDE просто сама сбрасывала вечный цикл? wink.gif тут уж я плохо разбираюсь..

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Цитата(Айра @ 14.11.2008 23:01) *

Странно, q ведь нигде не вводится..
 repeat
t:=t+0.1;
OrtoCon;
until ch='q';

Может IDE просто сама сбрасывала вечный цикл? wink.gif тут уж я плохо разбираюсь..

сорри, при копировании забыл одну строчку-

Uses Crt, Graph;
Const r1=72; r2=36;
Var t:Real;
ch:char; gd, gm: integer; { вот эту!!!!! }



Сообщение отредактировано: Чужак -


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


no1.gif Это дела не меняет.. все равно значение ch нигде не изменяется, а если делать ввод через readln в цикле, то будет очень некрасиво..


Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Цитата(Айра)


Uses Crt, Graph, wincrt;
Const r1=72; r2=36;
Var t:Real;
gd,gm: integer;
Procedure OrtoCon;
Begin {procedure}
Setcolor(5);
Circle(120,80,r1);

Setcolor(7);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
Circle(Round(120-r2*cos(t)), Round(80-r2*sin(t)),r2);
Delay(100); //думаю зависит от конкретного компа, так что каждому свое ))

Setcolor(0);
Circle(Round(120+r2*cos(t)), Round(80+r2*sin(t)),r2);
End;{procedure}

Begin {program}
gd:=VGA;
gm:=VGAhi;
InitGraph(gd,gm,''); t:=0;
repeat
t:=t+0.1;
OrtoCon;
until keypressed; { выполнение закончится, когда будет нажата любая клавиша,
в предыдущем варианте приходилось завершать принудительно }
while heypressed do readkey; //очищаем буфер клавиатуры
CloseGraph
End.{program}





программа делает совсем не то окружность просто зацикливается и крутится на одном месте, причем внутри неевращаются еще 2 окружности. sad.gif

Добавлено через 18 мин.
Цитата(volvo)


x := 0; { начинаем с X = 0 }
while x < 640 do begin { пока не выйдем за пределы экрана }
line (0,0,639,479); { рисуем линию, по которой "катится" откужность }
circle (x, (3 * x) div 4, 15); { и саму окружность }
x := x + 10; { На следующем шаге будем рисовать правее }
delay(1000); { Сохраняем рисунок какое-то время на экране }
cleardevice; { А потом чистим экран и переходим к следующей итерации }
end;




Не знаю почему но не работает, мерцает курсор и все.

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата
Не знаю почему но не работает, мерцает курсор и все.
Не знаю, почему (и главное - ЗАЧЕМ), но я все программы проверяю прежде чем выложить... Странно, да? Правила Раздела - обычно для того, чтобы их соблюдать, а не для того, чтоб они там были в красивой рамочке:
Цитата(Правила Раздела "Задачи")
7. Проверяйте программы перед тем, как разместить их на форуме!!!
Так вот у меня все отработало. Если у тебя не работает - значит, что-то делал не так. Приводи программу полностью, и название компилятора тоже (а то BP\BGI наводит на некоторые подозрения)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
программа делает совсем не то окружность просто зацикливается и крутится на одном месте, причем внутри неевращаются еще 2 окружности.

Тебе это как вариант предложили..

Цитата
Не знаю почему но не работает, мерцает курсор и все.

У меня код volvo работает нормально..



Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Чисто логически код составлен правильно, наверное это у меня что-то с паскалем другого быть не может.
Может ктонибудь даст ссылку на нормальный паскаль а то уже замучился скачивать. Заранее благодарен!

Сообщение отредактировано: Spaun -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


выложи весь свой код.. может где-то допустил вне этого кусочка ошибки.. и какой компилятор то у тебя?

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Вот полный код программы:

program speed;
uses crt,graph;
var gd,gm,x:integer;
begin
gd:=VGA;
gm:=VGahi;
initgraph(gd,gm,'');
x := 0;
while x < 640 do begin
line (0,0,639,479);
circle (x, (3 * x) div 4, 15);
x := x + 10;
delay(1000);
cleardevice;
end;
closegraph;
readkey;
end.


Не работае мерцает курсор в верхнем левом углу и все.
Компилятор из tp7 вроде...
У кого не спрашивал говорят работает, возможно это проблемы с компилятором, но как их решить? если кто может выложите пожалуйста рабочий код.

Сообщение отредактировано: Spaun -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Spaun @ 30.11.2008 17:35) *
Не работае мерцает курсор в верхнем левом углу и все.
Компилятор из tp7 вроде...
У кого не спрашивал говорят работает, возможно это проблемы с компилятором, но как их решить? если кто может выложите пожалуйста рабочий код.
Код - рабочий, тебе уже несколько раз сказали.
С компилятором тоже все должно быть ок, если остальные проги работают.
Такое (мигающий курсор) может быть, если программа слишком быстро проскакивает (быстрее, чем твой монитор переключается в граф. моду), и срабатывает CloseGraph. Попробуй сделать следующее:

1. Переставь местами ReadKey и CloseGraph. Это вообще, надо сказать, нонсенс, выполнять задержку после закрытия графики. Что ты собирался увидеть? Надо задерживать ДО выхода из графики.

2. Переставь ClearDevice в НАЧАЛО цикла (сразу за while). Иначе ты все сотрешь и все равно ничего не увидишь.

3. Увеличь задержку. Хотя, она у тебя и так большая, но все же увеличь. Сделай 10000 вместо 1000.

А прежде всего, вообще-то, стоит убедиться, что у тебя графика включается. Судя по всему - да (в других прогах ты что-то видишь, и экран чистый - да?), но все же double check это.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 11:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name