我有:
上述所有对象均由整数坐标指定。
我需要检查,如果 A 和 B 的结果在 R 中。但是我不能只计算交叉 A 和 B 的结果,因为它可能在整数坐标中不可用。此外,我无法将其转换为双打,因为我需要在没有任何不准确的情况下获得绝对准确的结果。
那么,我该如何检查呢?
答案 0 :(得分:1)
如果行由整数坐标指定,则它们的交叉点具有有理坐标,可以与绝对精度进行比较。
让A通过点(ax0,ay0)和(ax1,ay1),B位于X0坐标。 然后交叉点Y坐标为(ay0 *(ax1-ax0)+(X0-ax0)*(ay1-ay0))/(ax1-ax0)= p / q,其中p和q为整数,q为正(如果需要,否定提名人)。
然后可以将p与R.Top * q和R.Bottom * q
进行比较答案 1 :(得分:0)
[当B不与R相交时,让我们忽略没有意思的情况]
R从B切割一个段,我们称之为S.当且仅当A越过S时,B和A的交点位于R的内部。
找到S的分数是微不足道的。
要检查一条线是否穿过一个线段,你应该检查S的两端是否位于A的不同侧 - 这可以通过有角度的方式进行检查。
答案 2 :(得分:0)
假设A上的2个点是(x0, y0)
和(x1, y1)
,其中'x0< X1' 。
矩形由x坐标xR
和y坐标yR
B线由x坐标xB
您正在寻找的是(xB, yB)
,其中yB
将以某种方式确定,仅通过操纵整数:
首先,您需要检查
xB * xR >= 0
(x坐标的同一侧)abs(xB) <= abs(xR)
(B行切割矩形)如果没问题,那么你需要检查这个整数(等于(x1-x0)yB)
Y = (y1-y0)(xB-x0)+(x1-x0)y0
验证
Y * yR >=0
(y-coord的同一侧)abs(Y) <= (x1-x0) * abs(yR)
(意味着你的交叉点位于R区域,关于y-coord)当且仅当4个条件为真时,您的观点在R内。 希望它有所帮助。