点内旋转2D矩形(不使用翻译,三角函数,或点积)(Point inside rotated 2D r

2019-10-16 20:10发布

我在想,如果下面的算法来检查点在内部矩形是有效的。 我用我自己的直觉(没有强烈TRIG /数学基础,以支持它)它的发展,所以我喜欢从别人听到同在这个问题上更多的经验。

语境:

  • 矩形与4个点定义。 它可以旋转。
  • 坐标始终为正。
  • 根据定义,如果相交的点被认为是在矩形内。

假设:

  • 使用点和矩形顶点(下面第一图)之间的距离。
  • 最大可能的总距离是当点是在一个顶点(第二图)。
  • 如果点仅仅是矩形之外,该距离将会更大(第三图)。

图链接: http://i45.tinypic.com/id6o35.png

算法(JAVA):

static boolean pointInsideRectangle(Point[] rect, Point point) {
    double maxDistance = distance(rect[0], rect[1]);
    maxDistance += distance(rect[0], rect[2]);
    maxDistance += distance(rect[0], rect[3]);

    double distance = 0;
    for (Point rectPoint : rect) {          
        distance += distance(rectPoint, point);
        if (distance > maxDistance) return false;
    }
    return true;
}

问题:这是正确的?

Answer 1:

简短的回答:NO:P(鸵鸟政策下跌很内疚)

龙答 :Intersecction从你提到(相对顶点之间的最大距离)不产生一个矩形的四个圆圈的区域。 因为我是在几何形状有点生疏我不能充分数学解释(时间限制就我而言),但给你与约束程序的一些伪代码,你问(没有花哨的公式),适用于任何矩形wikipeida或几何本书可以填补国内空白。

  • 找了N,E,S,W顶点(最上,最右侧的,最低和最左边的顶点),这是很轻松任何矩形但对准的轴线谁可以产生顶点的奇怪分配(参见其实例图像)
  • 找到NE,SE,SW和NW的边界,这是直线方程在维基百科或其他链接 ,再次应该很容易,但轴对齐边界应仔细analized 因为这些产生另一种类型的ecuation /限制 。
  • 检查您的点是在“右侧”的边界看到不平等的数学术语 ,只有你的矩形内一个点满足四个限制,你可以附着在图像中看到。

  • 我道歉,如果我有忽略java.geom的一些命令可以完成这个任务

我希望这有助于你的endevour



Answer 2:

您可以尝试this.Lets命名我们作为A.Draw A和你得到4种不同的triangles.Calculate三角形正在该地区(使用海伦公式)的rectangle.After的每个点之间的线的点,并将其与该rectangle.If的面积相同的面积那么你的观点是在矩形内。 干杯



文章来源: Point inside rotated 2D rectangle (not using translation, trig functions, or dot product)