I have:
- axis-aligned rectangle R;
- non-vertical line A (specified by two points);
- vertical line B (specified by x-coordinate).
All objects above is specified by integer coordinates.
I need to check, if result of crossing A and B is in the R. But I can’t just calculate result of crossing A and B because it may be unpresentable in integer coordinates. Also I can’t convert it to doubles because I need to get absolutely accurate result without any inaccuracy.
So, how can I check it?
If lines are specified by integer coordinates, then their crossing point has rational coordinates, which may be compared with absolutely precision.
Let’s A goes through points (ax0, ay0) and (ax1, ay1), and B is at X0 coordinate.
Then crossing point Y-coordinate is (ay0*(ax1-ax0)+(X0-ax0)*(ay1-ay0))/(ax1-ax0) = p/q, where p and q are integer, and q is positive (negate nominator if needed).
Then p may be compared with R.Top*q and R.Bottom*q