【问题标题】:Rotate Vec2f line about a non origin point围绕非原点旋转 Vec2f 线
【发布时间】:2018-08-03 20:18:28
【问题描述】:

在 OpenCv 中,线是在极坐标中定义的,用 R 和 theta 表示。在我的情况下,我在图像中找到了一条线,旋转了图像,现在我想知道这条线在旋转图像中的值是多少。在这种情况下,我围绕一个不是原点的已知点旋转。

我知道我可以通过添加旋转角度来简单地找到 theta 的新值,但不知道如何将极线旋转一个非零点。

所以我真正要问的是,如果围绕 (Xr, Yr) 旋转线,R 的新值是多少?

我注意到我意识到我可能只是在新图像中再次找到该线,但是在找到我想要的那条线时需要进行大量计算,所以如果有一个公式可以用来找到新的线值那会更好。

【问题讨论】:

  • 在笛卡尔坐标中,您可以减去该点,围绕原点旋转并再次添加该点。也许这也适用于极坐标,但不知道如何在极坐标中翻译

标签: opencv math vector rotation polar-coordinates


【解决方案1】:

我可以想到一个笨拙但相当简单的方法来做到这一点,使用从任意点找到离线最近的点的想法。一些图表可能能够更好地解释这一点:

其中C 是旋转中心,Q 是直线上离它最近的点(对应于OP)。从r, θ 计算Pd,我们可以使用向量数学公式(在许多几何教科书中都有)找到Q

在旋转dQ 之后(后者围绕C - 我假设你知道怎么做):

现在我们只需使用与上面查找Q相同的方法找到P',然后简单地给出新的θ'r'

注意事项:

  1. 请注意,我们需要 atan2(大多数语言版本)而不是 atan,因为后者无法正确处理所有四个象限。

  2. 还有一种特殊情况,最后一行通过O的距离很小,这会导致计算θ时出错。为了处理这种情况,我们可以计算新方向d' 90° 的极角(根据上图中使用的“handed-ness”约定)。计算 P 时无需同样小心。

【讨论】:

  • 非常好的方法
  • @MBo 谢谢。我欢迎任何建议或更好的方法 - 我只是发现使用笛卡尔向量消除了极坐标中的许多特殊情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多