| | #1 | ||||||
| rrrFer Форумчанин Регистрация: 06.09.2008 Адрес: Красноярск
Сообщений: 1,829 Репутация: 2001 (528) |
Надоели темы студентов с просьбой нарисовать что-либо в Турбо-Прологе. литература: 1. Д.Соломон "Использование Турбо-Пролога" 2. Н. Ярушина "Программирование на языке Турбо-пролог 2.0." есть 3 режима при работе с графикой: BGI-Графика, старая графика и черепашья. старая графика инициализируется предикатом graphics и позволяет вывести линию или точку, описана с примерами в [1], вобщем любые фигуры рисуеются из точек и линий. черепашья графика позволяет опустить перо, поднять перо, сдвинуть перо, изменить цвет пера, повернуть перо. Вобщем тоже можно нарисовать что угодно, но ИМХО еще больше мучений чем в предыдущем случае. Описана в [1]. при использовании BGI графики доступно большее количество возможностей, в том числе большое количество графических примитивов(дуги, окружности, ломаные линии и т.д.). что такое BGI. Для использования BGI нужно иметь соответсвующую библиотеку и драйверы. Ниже код программы, выводящей 5 квадратиков по диагонали:
14 строка - getMaxX(MaxX),getMaxY(MaxY), %получаем размеры окна 15 строка - setViewPort(0,0,MaxX,MaxY,1), %устанавливаем размеры и положение графического окна 16 строка - очищаем графическое окно. 20 строка - рисуем прямоугольник 7 строка - инициализация графического драйвера первый параметр =0 значит autodetect описание предикатов в и параметров в [2]. Можно найти GRAPDECL.PRO - в нем описаны константы для использования графического режима. | ||||||
| | |||||||
| Другие темы раздела | Форум программистов Prolog. Программирование на языке Prolog (Пролог). Помощь в решении задач на Прологе. |
| 3 задания на прологе (создание предиката) Prolog 1. Создайте предикат, который по данному списку строит список его элементов, встречающихся в нем не менее n раз (списки одноуровневые). 2. Создайте предикат, упорядочивающий список целых чисел по возрастанию (список одноуровневый). 3. Создайте предикат, выравнивающий в многоуровневом списке все.... 3 задания на прологе (создание предиката) | Prolog Программа. Дистрибутивность. Надо создать программу. Задание: Создать предикат, который по базе данных пролог-программы, содержащей определение некоторых двух алгебраических операций, определяет, выполняется ли свойство дистрибутивности одной операции относительно другой.. Программа. Дистрибутивность. |
| | #2 | |||||||||||
| rrrFer Форумчанин Регистрация: 06.09.2008 Адрес: Красноярск
Сообщений: 1,829 Репутация: 2001 (528) |
в примере выше необязательно было использовать ViewPort. Можно так:
координаты верхнего левого угла, координаты нижнего правого угла, и флаг. Если флаг равен нулю, то при выходе изображения за границы графического окна, изображение не будет обрезано. Если графическое окно не было создано - то основное окно используется как графическое. Для получения параметров ViewPort используется getViewSettings (параметры такие же как у setViewPort). Если создан ViewPort то координаты считаются относительно его верхнего левого угла. Вобщем если мы захотим вывести такую же картинку, но шириной в половину экрана, и еще начать рисовать ее не из верхнего левого угла, а например, из точки с координатами [50,50] то удобно использовать viewPort:
| |||||||||||
| | ||||||||||||
| | #3 | ||||||
| rrrFer Форумчанин Регистрация: 06.09.2008 Адрес: Красноярск
Сообщений: 1,829 Репутация: 2001 (528) |
вот в этой теме: Графика в TurboProlog я привел исходный код в котором используются предикаты getimage() и putimage(), теперь кратко опишу в чем их суть. Продублирую исходный код:
в строке 11 выводим на экран картинку по ширине и высоте в 1/5 часть экрана(как это делается описано выше). В переменных Mx и My у нас сохранены размеры этой картинки. В строке 12 вызываем getimage и передаем координаты верхнего левого и нижнего правого углов прямоугольника, содержащего картинку. Изображение сохраняется в переменной BTMP (переданной в качестве пятого параметра). Теперь изображение у нас сохранено, можем очистить экран, вызываем cleardevice в 13 строке. В 14 строке вызываем Draw - тот Draw, который имеет 5 аргументов, при этом в качестве параметров передается по порядку: BTMP(изображение, сохраненное с помощью getimage), количество дублей изображения которое на до вывести, начальные координаты верхнего левого угла(координаты с которых начнется вывод изображений), ширина и высота изображения(для того чтобы определится с тем, насколько сдвигать новое изображение относительно предыдущего). Рассмотрим подробнее как работает этот предикат. Строки 16-17 нужны для остановки предиката(в случае если количество изображений которое осталось вывсти меньше единицы). В строку 18 попадаем если это количество больше или равно 1. В 19 строке уменьшаем на единицу количество изображений которое нам осталось вывести и рассчитываем координату по оси абсцисс для нового изображения. в строке 20 выводим изображение по старым координатам(полученым в качестве параметров предикатом). И наконец, в строке 21 вызываем Draw для отрисовки следующего экземпляра изображения по новым(рассчитанным в строке 19) координатам. На экране получим 5 экземпляров изображения каждое из которых сдвинуто относительно предыдущего по оси абсцисс на ширину одного изображения. Первое изображение выводится начиная с координаты (0,0) верхнего левого угла. Каждый экземпляр изображения представляет собой 20 прямоугольников, каждый размером в 1/100 экрана по ширине и высоте. Прямоугольники расположены по диагонали воображаемого прямоугольника, ширина и высота которого составляют 1/5 часть экрана. | ||||||
| | |||||||
![]() |
| Похожие темы | |
| Тема | Автор |
| Заказать программу Турбо пролог Привет всем нуждаюсь в помощи в работе с прологом В прологе валенок пытаюсь разобраться и не получается... помогите создать программу 1. Создайте предикат, вычисляющий 1!+2!+3!+...+n!. 2. Создайте предикат, осуществляющий разделение исходного списка на два подсписка. В первый из них... | johan |
| Prolog Строки (турбо пролог 2.0) есть вот такое задание по строкам: 1. В заданной последовательности символов удалить каждый символ * и повторить каждый символ, отличный от *. по 1 заданию есть: predicates change(string,string) clauses change("",""). change(S,R):-frontchar(S,H,T),H='*',change(T,R). | ROR13 |
| Prolog Файлы. Турбо пролог. Здравствуйте. Помогите пожалуйста. - Удаление из файла, содержащего текст Пролог-программы, комментариев. Турбо пролог. | inmate08 |
| Prolog Русский Турбо Пролог 2.0 Не подскажите, как сделать, чтобы в Турбо Прологе 2.0 печатались русские буквы? Находил один способ в инете, но он оказался, увы, неработоспособным. Заранее спасибо. | Alex_C# |
| Prolog Турбо пролог Помогите, пожалуйста, написать программки на турбо пролог: 1.Дан список, объектами которого являются числа. Между первым минимальным и первым максимальным элементами списка найти сумму положительных элементов списка; 2. Вычислить: 1к + 2к + … + nк, где к и n – натуральные числа. 3. Дан список,... | tanywa77 |
| Опции темы | Поиск в этой теме |
| | |
| Опции просмотра | |
| |
| Текущее время: 23:22. Часовой пояс GMT +4. |