1 - если координаты точки лежат в узле решетки, иначе - 0.
Так это не функция, которая определена только на узлах; она определена всюду и есть индикатор этой решётки.
Но если шаг не постоянный, а задан некоторой функцией от n?
О, тогда это уже не та решётка, о которой лично я по крайней мере думал. С одной стороны задача скучнее (раз решётка, судя по всему, «ортогональная»). С другой стороны хуже.
Я не знаю как обойтись без 'double' и получить, например, логическую 1 или 0...
Если шаг рациональный,
mod должен работать, а если иррациональный, то убедитесь что это вам точно надо, потому что точная арифметика для работы с некоторыми видами иррациональных чисел конечно есть, но это сложно, и при использовании матлаба это как раз символьные вычисления могут в какой-то мере обеспечить, но…
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
есть порядковый номер вертикальной (горизонтальной) прямой, пересечение которой с соответствующей ортогональной прямой является соответствующим узлом решетки.
Координаты узлов решётки равны в точности
![$(f(i), f(j))$ $(f(i), f(j))$](https://dxdy-01.korotkov.co.uk/f/8/6/0/86010fde84c040a393f53b7b789bc07582.png)
для произвольных целых
![$i, j$ $i, j$](https://dxdy-04.korotkov.co.uk/f/3/e/3/3e384b223dce750e6c98aa501355f00b82.png)
? Или они равны
![$(F(i), F(j))$ $(F(i), F(j))$](https://dxdy-01.korotkov.co.uk/f/4/1/a/41a9d0600dc7680596a5739a725e7b0382.png)
, где
![$F(m) = \sum_{k = 0}^m f(k)$ $F(m) = \sum_{k = 0}^m f(k)$](https://dxdy-01.korotkov.co.uk/f/8/9/3/893c53bd53ef8a85c7d3816a910aaa5a82.png)
? Или что-то третье?
Задача заключается в поиске такого узла произвольной квадратной решетки (не обязательно с постоянным шагом), через который проходит луч X и который находится ближе всего к началу координат либо получению ответа, что заданный луч не проходит ни через один узел заданной решетки.
Луч X имеет начало в точке (0,0) и проходит через произвольную точку A.
Тогда вам не нужна функция-индикатор, совсем. Она вам не поможет. И если
![$f$ $f$](https://dxdy-02.korotkov.co.uk/f/1/9/0/190083ef7a1625fbc75f243cffb9c96d82.png)
произвольная, то останется скорее всего просто перебирать узлы решётки по одному в квадранте, в котором лежит луч, в порядке, примерно совпадающем с удалением узлов от начала координат, например перебирать
![$(i, j)$ $(i, j)$](https://dxdy-03.korotkov.co.uk/f/e/8/8/e8873e227619b7a62ee7eb981ef1faea82.png)
в порядке
![$$(0, 0), \quad (1, 0), (0, 1), \quad (2, 0), (1, 1), (0, 2), \quad (3, 0), \ldots, (0, 3), \quad (4, 0), \ldots$$ $$(0, 0), \quad (1, 0), (0, 1), \quad (2, 0), (1, 1), (0, 2), \quad (3, 0), \ldots, (0, 3), \quad (4, 0), \ldots$$](https://dxdy-02.korotkov.co.uk/f/9/c/b/9cb1fade0bb72331557e5b78843d4b7f82.png)
— и для общего случая вы никогда не сможете опровергнуть прохождение луча через хоть какой-то узел.
Но если функция
![$f$ $f$](https://dxdy-02.korotkov.co.uk/f/1/9/0/190083ef7a1625fbc75f243cffb9c96d82.png)
достаточно хорошая, можно как-то решить уравнение. Как бы вы например решили это для обычной регулярной решётки? Достаточно просто:
![$s (m_1, m_2) = x A$ $s (m_1, m_2) = x A$](https://dxdy-01.korotkov.co.uk/f/c/9/5/c954f783f3bbaa4242060d29ba5877d482.png)
для какого-то неизвестного
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
, где ищем мы наименьшее положительное из них. Тут видно, что шаг решётки
![$s$ $s$](https://dxdy-03.korotkov.co.uk/f/6/f/9/6f9bad7347b91ceebebd3ad7e6f6f2d182.png)
не имеет значения и мы имеем решения ровно если
![$A_1 / A_2$ $A_1 / A_2$](https://dxdy-01.korotkov.co.uk/f/c/a/8/ca895acd1f1230bcaef72ba1033ad8bb82.png)
— рациональное число, и тогда
![$m_1, m_2$ $m_1, m_2$](https://dxdy-02.korotkov.co.uk/f/9/0/e/90e68ebbb6df0c9f827f461ddc69e17082.png)
— числитель и знаменатель соответствующей приведённой дроби. И уже для такой простой задачи мы видим, что для численного решения она плохо поставлена, если вы не знаете, какому множеству принадлежит
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
по смыслу задачи. Если
![$\mathbb R^2$ $\mathbb R^2$](https://dxdy-03.korotkov.co.uk/f/e/d/5/ed5e84062bc1b4e4e51106fefe3dd6c782.png)
без ограничений — всё пропало, ничего хорошего не будет, рациональные числа всюду плотны в
![$\mathbb R$ $\mathbb R$](https://dxdy-04.korotkov.co.uk/f/b/c/0/bc0baa1bd1772406881ea71a3524054d82.png)
и вы не сможете написать удовлетворительный численный код.
Так что какова
![$f$ $f$](https://dxdy-02.korotkov.co.uk/f/1/9/0/190083ef7a1625fbc75f243cffb9c96d82.png)
, и каковы возможные
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
?