Сканировать заполняющий раствор:
Проецировать треугольник на XY
и отсканировать заполнить его (рассмотрите все целочисленные ординаты Y
между Ymin
и Ymax
и для каждого Y
найдите Xmin
и Xmax
путем пересечения со сторонами, возьмите все промежуточные X
).
Затем проверьте, является ли соответствующий Z
целым числом (уравнение плоскости равно a.X + b.Y + c.Z + d = 0
).
Объем работы пропорционален проецируемой области треугольника.
Вы можете немного ускорить процесс, заметив, что для постоянной Y
вы используйте только решения диофантова уравнения a.X + c.Z = - d - b.Y
. Это уравнение имеет решения, только если gcd(a, c)
делит d + b.Y
, и это ограничивает возможное Y
.
В вашем случае плоскость равна X + Y + Z = 3
, а спроецированный треугольник (0, 0)
, (3, 0)
, (0, 3)
.
Заполнение дает десять точек сетки, из которых три угла, шесть точек по краям и еще одна внутри. Для всех этих точек Z
является целым числом. (Методы ускорения здесь не применяются.)
(0, 0, 3), (1, 0, 2), (2, 0, 1), (3, 0, 0),
(0, 1, 2), (1, 1, 1), (2, 1, 0),
(0, 2, 1), (1, 2, 0),
(0, 3, 0).