Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 19.02.2015, 21:00   #1 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Графика и движение

Здравствуйте! Нам в университете сейчас дали задачи на графики и движения. Но я не знаю как решить их. Одна задача вот такая: изобразить на экране отрезок, вращающийся в плоскости экрана вокруг точки, делящей отрезок в отношении 1:3 . Подскажите как решать? С чего начать? (я могу только отрезок начертить и всё). И если есть какая-то литература, то очень прошу посоветовать. [работаем мы в pascal]
Asya_inter вне форума   Ответить с цитированием

Старый 19.02.2015, 21:00
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Просмотрите содержимое этих ссылок, может быть что то найдете

Графика в Delphi
Четыре ядра приведены в движение
Самопроизвольное движение курсора
Графика

Старый 20.02.2015, 10:42   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
работаем мы в pascal
Поскольку речь идет о графике, этой информации мало. Какой 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;

Удачи!
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 13.03.2015, 17:25   #3 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, спасибо за объяснение! А скажите, литературы совсем никакой нет, чтобы вот именно с графикой( или может не только, главное, чтобы понятно)? ...У меня PascalABC.NET, а я хочу, но не могу установить pascal TURBO на свой ноутбук (windows7) Вы можете подсказать и с каких сайтов можно скачать??
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 04:47.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.