I have a hyperplane defined by two vectors in $\mathbb{Z}^3$ and I have tiled the hyperplane by parallelograms defined by the two vectors. Then I have two lattice points that I want to project down to the hyperplane and determine if they are in the same parallelogram.
I want to be able to do this in general, but for the sake of an example, the hyperplane is defined by $(5,-4,-7)$ and $(-3,8,-2)$, which has normal vector $(64,31,28)$, and the two points are $(7,6,3)$ and $(7,15,1)$.
For what it's worth, the context here is that the hyperplane contains the integer lattice defined by the two vectors, and my two points will always have a Euclidean distance from each other that is less than the Frobenius number of the numerical semigroup defined by the normal vector of the lattice generators. In this case, the Frobenius number is 321.
Thanks for any assistance!
I'd start by projecting the two points into the plane by the standard technique -- move it by some multiple of the normal vector until it satisfies the equation of the plane. The result may not have integer coordinates, so for practical computation you may consider pre-scaling everything such that the division during this process always comes out whole; the divisor depends only on the normal vector, not on the variable points.
The point of explicitly projecting into the plane is that you can then project everything down to the $xy$ plane (or $xy$ or $yz$ if the normal vector lies in the $xy$ plane), including the base parallelogram.
Once you're in 2D, translate so the original of your base parallelogram is at $(0,0)$, and then convert the coordinates of the two variables points into the coordinate system defined by the parallelogram. Then see of the integer parts of the coordinates are the same.
Converting to the parallogram's coordinate system can be done by taking the 2D cross product between the point and each parallelogram edge, and dividing by the cross product of the two parallelogram edges themselves. (There are some sign subtleties here, but as it turns out it can This final division cannot be avoided; it is discarding the remainder from it that will give you the "same tile" information.
The advantage of moving to 2D is that there the result of a cross product is a simple scalar and you need its magnitude and sign. You could take the cross products in 3D too, but then the cross products would be vectors, and you'd need square roots to find their magnitudes and special logic to compensate for the lack of intrinsic sign in the magnitudes.