Я не уверен, что это лучше всего здесь или в математике, но я полагаю, что я могу также получить некоторые подсказки о коде.
Для выполнения задания мне нужно решить выпуклые головоломки Tangram , используя Prolog.
Все головоломки и доступные кусочки определяются как списки вершин. Например:
puzzle(1,[(0,0),(4,0),(4,4),(0,4)])
представляет собой квадратную головоломку, а piece(1,[(0,0),(4,0),(2,2)])
может быть одним из больших треугольников.
Я уже определил все 7 частей с идентификатором и списком точек, и я думаю, что я должен быть в состоянии написать надлежащий код для итерации этих частей и выполнения некоторых операций над ними. Тем не менее, я не настолько проницателен, когда речь идет о геометрии, поэтому я понятия не имею, как я могу определить, какой кусок подходит к какой части головоломки, просто основываясь на ее вершинах.
Большинство заданий в этом курсе основаны на классических комбинаторных задачах, таких как коммивояжер. Существуют ли такие проблемы, связанные с выпуклыми формами (или любой другой формой), которые могут вдохновить меня на поиск решения? Мне трудно найти в Интернете примеры декларативного кода, который имеет дело с формами таким образом. Было бы очень полезно, если бы я знал, что искать.
Я полагаю, что могу убедиться в правильности решения, проверив, покрыты ли внешние границы головоломки один раз, а внутренние (в результате размещения частей) покрыты дважды. Я мог бы использовать этот факт в качестве базового варианта для какой-то части моего решения. Помимо этого, лучшее, что я могу придумать на данный момент, - это грубое принуждение каждого куска в какое-то незанятое пространство между границами головоломки, пока они не уместятся.