Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 3

Геометрические объекты

10.10.2013, 21:09. Показов 2867. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые!

Начал изучение Prolog, разобрал и дополнил задачки с родственными отношениями, теперь стоит следующая задача:

Введите в программу факты вида: точка.
Определите следующие объекты: отрезок, треугольник, четырехугольник, прямоугольник, квадрат, ромб.
Обеспечьте проверку, является ли вводимый четырехугольник прямоугольником, квадратом, ромбом.
Обеспечьте проверку, лежит ли вводимая точка на прямой, проходящей через отрезок.
Про факты вида точка - понятно, а вот с объектами отрезок и т.д. не очень.
Судя по методичке, с помощью которой я изучаю пролог, объекты отрезок, треугольник, четырехугольник, квадрат, ромб могут быть представлены так:

Prolog
1
2
3
4
5
6
отрезок( X, Y).     % X и Y - точки
треугольник( X, Y, Z).    % X, Y, Z - точки
четырехугольник( X, Y, Z, W).
прямоугольник( X, Y, Z, W).
квадрат( X, Y, Z, W).
ромб( X, Y, Z, W).
Верно ли я рассуждаю? Если да, то подскажите, как реализовать проверки из задания, хотя бы одну для примера.

Диалект: SWI-Prolog.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2013, 21:09
Ответы с готовыми решениями:

Разработайте программу «Геометрические фигуры»
Всем доброго времени суток! Не могу разобраться с реализацией данной программы на Turbo Prolog с таким условием: Определите структуру...

Модифицировать код программы, вращающий геометрические объекты
Доброго времени суток! Есть следующий код написанный в BorlandC ...

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

9
18 / 18 / 0
Регистрация: 08.05.2012
Сообщений: 61
11.10.2013, 04:58
Для треугольника надо проверить, что все точки не лежат на одной прямой. Для отрезка - ниче не надо. Для 4-угольника - тоже какие-то условия из геометрии. Ромб, например, через него можно как-то так определить:
Prolog
1
2
3
длина_отрезка(точка(X1, Y1), точка(X2, Y2), Result) :- Result=sqrt(power(X2-X1, 2)+power(Y2-Y1, 2)).
ромб(A,B,C,D) :- четырехугольник(A,B,C,D), длина_отрезка(A,B,R1), длина_отрезка(C,D,R2), R1=R2.
ромб(A,B,C,D) :- четырехугольник(A,B,C,D), длина_отрезка(A,C,R1), длина_отрезка(B,D,R2), R1=R2.
Прямоугольник - примерно так:
Prolog
1
прямоугольник(A,B,C,D) :- четырехугольник(A,B,C,D), "проверка на три прямых угла"
Квадрат:
Prolog
1
квадрат(A,B,C,D) :- четырехугольник(A,B,C,D), ромб(A,B,C,D).
1
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.10.2013, 20:30
Result is sqrt((X2-X1)**2+(Y2-Y1)**2)
R1=:=R2
А вообще корень квадратный вычислять не надо, вещественные числа в проверке на равенство неблагонадежны. Нужна не сама длина, а факт равенства длин.
0
18 / 18 / 0
Регистрация: 08.05.2012
Сообщений: 61
12.10.2013, 06:24
Неужели, например, A is sqrt(4-2) и B is sqrt(3-1) могут не пройти проверку на равенство?
0
Заблокирован
12.10.2013, 15:00
Цитата Сообщение от feofilakt Посмотреть сообщение
Неужели, например, A is sqrt(4-2) и B is sqrt(3-1) могут не пройти проверку на равенство?
feofilakt, не просто могут, а должны не пройти.
Дробные числа вообще сравниваются всегда с погрешностью.
В библиотеку Qt для этого встроена функция типа qFuzzyCompare, которая сравнивает числа с погрешностью 0.00001f.
Пролог тоже может делать что-то такое, но разные прологи на разных платформах могут сработать по-разному в этой части. Не стоит так делать )
0
18 / 18 / 0
Регистрация: 08.05.2012
Сообщений: 61
12.10.2013, 15:39
Я просто думал, что хоть числа и дробные, но два числа-то абсолютно одинаковые вроде как. То есть ни на каком разряде отличий не будет, хоть с какой точностью они будут сравниваться. Или нет?
0
4 / 4 / 0
Регистрация: 28.09.2013
Сообщений: 93
14.10.2013, 21:34
Здравствуйте, помогите пожалуйста разобраться с задачкой про выбор интересов...
0
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 3
14.10.2013, 21:48  [ТС]
По своей глупости до сих пор воюю с задачей.

Prolog
1
2
3
4
5
6
7
8
9
10
точка( 1, 1).
точка( 1, 2).
точка( 1, 3).
точка( 1, 4).
точка( 2, 2).
 
отрезок( точка( X1, Y1), точка( X2, Y2)).
 
треугольник( точка( X1, Y1), точка( X2, Y2), точка( X3, Y3)) :-
    ((X2-X1)*(Y2-Y3))-((Y2-Y1)*(X2-X3)) \= 0.
Условие треугольника проверяет, что точки не лежат на одной прямой (нашел формулу в интернете), но все равно работает неверно. Т.е. если ввести, например:
треугольник( точка( 1, 2), точка( 1, 3), точка( 1, 6)).
То результат будет true. В чем может быть проблема?
0
4 / 4 / 0
Регистрация: 28.09.2013
Сообщений: 93
14.10.2013, 21:54
Цитата Сообщение от nikita-dalek Посмотреть сообщение
По своей глупости до сих пор воюю с задачей.

Prolog
1
2
3
4
5
6
7
8
9
10
точка( 1, 1).
точка( 1, 2).
точка( 1, 3).
точка( 1, 4).
точка( 2, 2).
 
отрезок( точка( X1, Y1), точка( X2, Y2)).
 
треугольник( точка( X1, Y1), точка( X2, Y2), точка( X3, Y3)) :-
    ((X2-X1)*(Y2-Y3))-((Y2-Y1)*(X2-X3)) \= 0.
Условие треугольника проверяет, что точки не лежат на одной прямой (нашел формулу в интернете), но все равно работает неверно. Т.е. если ввести, например:

То результат будет true. В чем может быть проблема?
привеет)) если бы я знаал((( сам не шарю в этой программе((( а вы не можете посмотреть задачу про интересы?? не могу догадаться что нужно дописать(( вы наверное всне же больше знаете пролог
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
14.10.2013, 22:43
Цитата Сообщение от nikita-dalek Посмотреть сообщение
То результат будет true. В чем может быть проблема?
\= опять же не подходит, нужно использовать арифметический оператор сравнения =\=
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2013, 22:43
Помогаю со студенческими работами здесь

Как уничтожать динамические объекты и вообще объекты, если это необходимо сделать в их процедурах?
Создать отдельную процедуру CloseObject(Object: TObject) и вызывать ее в конце процедуры или так тоже нельзя? А то бесят эти access...

Встроенные объекты Java Script. Объекты Array, Date
Создать массив, содержащий названия элементов, находящихся в системном блоке компьютера. Добавить к нему массив, содержащий названия ...

Удалить все объекты и создать объекты - потомки
Как сделать клоны объекта в другом объекте? Использую метод Instantiate Есть метод public Transform Elem; //элемент на...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru