19.02.2015, 21:00 | #1 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Графика и движение
|
19.02.2015, 21:00 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Просмотрите содержимое этих ссылок, может быть что то найдете Графика в Delphi Четыре ядра приведены в движение Самопроизвольное движение курсора Графика |
20.02.2015, 10:42 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Поскольку речь идет о графике, этой информации мало. Какой Pascal? Если Tubo-Borland-Free, то это совсем одно, если АВС или там Lazarus - совсем другое.
Но общий алгоритм такой. 1. Задаем координаты (например) горизонтального отрезка, такого, чтобы 3/4 его длины располагались слева от центра, а 1/4 - справа. Пусть графическая длина одной четверти равна R. Тогда длина слева от центра будет 3R. Координаты концов отрезка составят (здесь и далее MaxX и MaxY - значения ширины и высоты экрана в пикселах, соответственно): левого Xold_left:= (MaxX div 2) - 3*R; Yold_left:= (MaxY div 2); правого Xold_right:= (MaxX div 2) + R; Yold_right:= (MaxY div 2); рисуем отрезок с координатами концов (Xold_left, Yold_left), (Xold_right, Yold_right) 2. Задаём шаг по углу поворота, допустим, π/20. Договоримся, что вращение происходит по часовой стрелке. Дальше создаём основной цикл программы вида For i:=1 to 40 do begin..end; . 3. Программируем тело цикла: а) меняем цвет с основного на фоновый и снова рисуем отрезок с координатами концов (Xold_left, Yold_left), (Xold_right, Yold_right) в результате чего отрезок исчезает. б) вычисляем новые координаты концов отрезков. Они составят: для левого (длинного) отрезка Xnew_left:= (MaxX div 2) - 3*R*Cos(Pi/20*i); Ynew_left:= (MaxY div 2) - 3*R*Sin(Pi/20*i); для правого (короткого) отрезка Xnew_right:= (MaxX div 2) + R*Cos(Pi/20*i); Ynew_left:= (MaxY div 2) + R*Sin(Pi/20*i); в) восстанавливаем основной цвет. г) рисуем новый отрезок с координатами концов (Xnew_left, Ynew_left), (Xnew_right, Ynew_right) д) ставим задержку - например, в полсекунды. е) переопределяем координаты Xold_left:= Xnew_left;; Yold_left:= Ynew_left; Xold_right:= Xnew_right; Yold_right:= Ynew_right; ж) конец цикла В результате работы программы отрезок опишет полный оборот и остановится. Если нужно, чтобы он крутился бесконечно до прерывания, то можно или охватить указанный цикл еще одним внешним типа Repeat..Until, либо (что лучше) поступить так: 1. Ввести переменную Angle и присвоить ей исходное значение Angle:=0; 2. Цикл вместо "for i:=1 to 40 do" организовать так: Repeat Angle:=Angle+Pi/20; дальше - как описано выше, только всюду в синусах и косинусах аргумент Pi/20*i заменить на Angle. Until KeyPressed; Удачи! |
13.03.2015, 17:25 | #3 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Vladimir_S, спасибо за объяснение! А скажите, литературы совсем никакой нет, чтобы вот именно с графикой( или может не только, главное, чтобы понятно)? ...У меня PascalABC.NET, а я хочу, но не могу установить pascal TURBO на свой ноутбук (windows7) Вы можете подсказать и с каких сайтов можно скачать??
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|