I almost ran out of characters for the question title so I couldn't clarify as much as I wanted to but here goes:
A grid point is simply a point where both the $x$ and $y$ values are in $\mathbb{Z}$.
Assume I have a line segment defined by the two grid points $P_1$ and $P_2$ where $P_1 = (x_1, y_1)$ and $P_2 = (x_2, y_2)$.
I then calculate the normal vector to that line segment so I can move it exclusively parallel:
$d_x = x_2 - x_1$
$d_y = y_2 - y_1$
$\vec{k} = \begin{bmatrix}-d_y\\d_x\end{bmatrix}$
I then calculate the unit vector of that normal vector and use it to move the line segment in its direction like so (where $m$ is the magnitude of movement and $n$ is the unit vector of the normal vector to the line segment)
The magnitude of movement ($m$) is also in $\mathbb{Z}$ ie it's a whole number multiplier.
$T_x = \vec{n}_x \cdot m$
$T_y = \vec{n}_y \cdot m$
$P_1' = (round(x_1 - T_x), round(y_1 - T_y))$ and $P_2' = (round(x_2 - T_x), round(y_2 - T_y))$
In my setup, it is guaranteed that the new points are also in $\mathbb{Z}$ because they get rounded.
I think it may be needed to replace rounding with something else, such as rounding based on which value preserves the slope because I am confident the slope cannot be allowed to change for this to be true, so for now assume the function "round()" does just that: rounds the output to the points that preserve the slope
So simply put, I have a line segment defined by two integer points and I move it parallely to two new also integer points. I want to prove that if the line segment before the translation was intersecting with $N$ grid points then it will remain to do so after the translation as described above.
Picture for illustration: green points are intersections with the grid.
