【问题标题】:Intersection between circle and axis aligned rectangle圆和轴对齐矩形之间的交点
【发布时间】:2011-07-13 09:37:23
【问题描述】:

我正在为 2D 几何数据编写转换器。我必须转换的元素之一是圆弧。在源系统中,弧是用两个轴对齐的矩形来描述的。第一个矩形是圆弧所在的圆的边界框。第二个矩形是弧本身的边界框。约束是,弧的边界框必须与圆的边界框的两条边相交。我知道每个矩形的左上角和右下角的坐标。

目标系统对圆弧的描述如下:矩形是围绕圆的边界框,圆弧是圆的一部分。到目前为止,它与上述相同。然后我有两个点指定弧的起点和终点。两个点都必须正好在圆的“边缘”上。

问题是:您是否发现了一种计算圆弧起点和终点的简单方法?我已经看过this question,但看起来真的很复杂。也许有更简单的方法可以做到这一点......

到目前为止我的想法:

看来我必须计算圆弧边界框的边缘与圆的交点。可能有两种情况(由于上述限制):只有一条边与圆相交或两条边与圆相交。此外,所有其他边将始终位于圆外。

更新:起点和终点将圆分成两部分。这两个部分中的哪一个被绘制为圆弧,由起点和终点的顺序决定。圆弧总是从起点到终点按逆时针方向绘制。

【问题讨论】:

  • “只有一条边与圆相交”是什么情况?
  • 另外,圆的边界框是正方形,不是吗? (也许我错过了一些重要的东西!)
  • @belisarius:你是对的,圆圈的边界框是正方形。但是第二个边界框可以并且在大多数情况下将是一个矩形。 “只有一条边与圆相交”的情况是边与圆相交两次。弧的端点都将具有相同的 x 或 y 坐标。

标签: math geometry 2d


【解决方案1】:

调用外框坐标topleftbottomright。那么中心和半径是:

centre.x = (left + right)/2
centre.y = (top + bottom)/2
radius = (right - left)/2

由此我们可以写出一个方程,该方程对于圆周上的所有点都必须满足:

(x - centre.x) * (x - centre.x) + (y - centre.y) * (y - centre.y) = radius * radius

内框坐标为您提供xy 的可能值。一次替换一个并作为标准解决quadratic equation。如果有一个真正的解决方案,并且对应的点在内框的范围内,那就是一个点。鉴于原始数据的限制,您应该会发现有两点——这就是您的答案。

【讨论】:

  • 非常感谢,这是一个很好的解决方案。我已经实现了它。目前我正在解决一些小问题,但这些问题应该很快就会解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 2012-03-28
相关资源
最近更新 更多