查找连接两个矩形中心的段长度的算法

时间:2011-12-09 17:52:17

标签: algorithm line center segment

好的,这是故事:几周前我在其中一个披萨盒中发现了这个问题。它说如果你能在完成披萨之前解决这个问题,那么你就可以在tripadviser上受雇。虽然我不打算被雇用,但这个问题让我眼前一亮,并且把我的注意力集中在披萨和晚餐上。我做了一些事情,但有一些假设。这是一个问题:

假设我们知道P,Q R和S.每条矩形都有连接中心的线。我们需要找出C点和D点。我不确定是否还有其他变量可以解决这个问题。 enter image description here

修改

寻找程序性或psudo代码解释 - 无需转移到maxthexchange。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

逐步进行非常简单:

  1. 计算A =(P + Q)/ 2且B = R + S / 2(逐个组件)
  2. A和B之间的直线的等式是L(t) = t * A + (1 - t) * (B - A)。刚解决 这个t*的线性方程使得L(t*).y = Q.y获得C = L(t*)。用L(t).y = R.y做类似的事情得到D。
  3. 您还可以使用求解C和D时得到的t*值来确定重叠矩形等病态情况。

答案 1 :(得分:1)

您实际上无需找到点CD来查找距离。

我假设您已经知道矩形的坐标。计算中心点的坐标和边缘的长度是微不足道的。

现在,想象一条穿过A的垂直线和一条穿过B的水平线。它们在某一点交叉,称之为X。另外,想象一条垂直线穿过C并调用其与矩形RS - C'的上边缘的交点。

您可以轻松计算AX的长度。但AX的长度是RS的高度的一半+ PQ的高度的一半(两者都知道)+ CC'的长度。

现在您知道CC'的长度(称之为x)。

您还可以从n和B坐标计算AB CC'A所做的角度(称之为CC'),因为您知道x * cos(n)是{{1}}垂直。

因此,段CD的长度为{{1}}。