Создание прямоугольника - Координаты - Haskell - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать растровую графику. На данный момент я создал код для прямоугольника, однако код работает только для прямоугольника 3х3. Я не уверен, как улучшить код, чтобы он работал для 4x4, 5x5 и т. Д. Вот что у меня есть:

rectangleRaster :: Coord -> Coord -> Raster
rectangleRaster (x1, y1) (x2, y2) = [((x1, y1), 1.0), ((x1, y1 + y2), 1.0)] ++ [((x1, y2), 1.0), ((x1 + x2, y1), 1.0)] ++ [((x2 + x1, y2), 1.0), ((x2, y1), 1.0)] ++ [((x2, y2 + y1), 1.0), ((x2, y2), 1.0)]

Я вижу, что проблема в том, что каждый раз, когда я хочу большего прямоугольника, мне нужно добавить больше очков к rectangleRaster. Итак, как я могу использовать рекурсию или что-то еще, чтобы при вводе некоторых точек он создавал полный прямоугольник без пробелов. Вот что такое принты для очков:

Баллы: (-1, -1) (1, 1) (-1, -1) (1, 1)

Очки: (-2, 1) (2, -1) (-2, 1) (2, -1)

1 Ответ

0 голосов
/ 04 мая 2018

Растеризованный прямоугольник может быть выражен просто как:
Каждая точка (x', y'), существующая между (x1, y1) и (x2,y2), которая удовлетворяет любому числу следующих условий:
- x == x1
- x == x2
- y == y1
- y == y2
Понимание списка - достойное начало для того, что вы хотите. Как подсказка, вот понимание списка, которое даст вам заполненный квадрат между (x1, y1) и (x2, y2):

pointList = [(x', y') | x' <- [x1..x2], y' <- [y1..y2]]

Оттуда продолжайте свой путь, находя, как указать, какой из этих пунктов должен попасть в список. Вы можете прочитать о понимании списка, например, по адресу:
https://wiki.haskell.org/List_comprehension.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...