检查矩形中的一个点

时间:2012-05-08 11:47:44

标签: math geometry

我有:

  1. 轴对齐的矩形 R ;
  2. 非垂直线 A (由两点指定);
  3. 垂直线 B (由x坐标指定)。
  4. 上述所有对象均由整数坐标指定。

    我需要检查,如果 A B 的结果在 R 中。但是我不能只计算交叉 A B 的结果,因为它可能在整数坐标中不可用。此外,我无法将其转换为双打,因为我需要在没有任何不准确的情况下获得绝对准确的结果。

    那么,我该如何检查呢?

3 个答案:

答案 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将以某种方式确定,仅通过操纵整数:

首先,您需要检查

  1. if xB * xR >= 0(x坐标的同一侧)
  2. if abs(xB) <= abs(xR)(B行切割矩形)
  3. 如果没问题,那么你需要检查这个整数(等于(x1-x0)yB)

    Y = (y1-y0)(xB-x0)+(x1-x0)y0
    

    验证

    1. Y * yR >=0(y-coord的同一侧)
    2. abs(Y) <= (x1-x0) * abs(yR)(意味着你的交叉点位于R区域,关于y-coord)
    3. 当且仅当4个条件为真时,您的观点在R内。 希望它有所帮助。