【问题标题】:Circle to tangent mapping圆到切线映射
【发布时间】:2010-11-13 18:40:59
【问题描述】:

假设给定一个圆,AB 线包含它的中心 O,这样 A 和 B 在圆上(OA=OB=半径)。在点 A 上绘制切线 t,并且 我应该计算圆的某些点 (a,b,c,d...) 到切线 (at, bt, ct, dt, ...) 上的点的映射,使得距离 Aa (距离沿圆)与距离 Aat(沿切线的距离)相同(距离 Ab、Ac、Ad 也相同)。但是,在这里,应该考虑一定的约束:从圆的一侧从 A 到 B 的圆的那些点(在 (a, b, c, d) 之间)应该放在切线的一侧(较近),从 A 到 B 的圆的另一侧应放在另一侧。基本上,圆应该在 B 处分割,然后映射到切线。我希望这个解释已经足够了。

需要注意的是,我有关于 A、B、O、a、b、c、d 坐标的信息。我应该计算(at,bt,ct,dt)。 为了解决这个问题,我有两种方法,但我不确定如何确保它们始终正常工作。

1) 我计算点 A 的切线方程。然后对于每个点 (a, b, c, d) 我计算到 A 的距离(沿圆),并使用这些距离计算 (at, bt, ct, dt...) 沿切线。我不知道的是如何计算距离 从 A 到 (a, b, c, d)。问题是“正确的一侧”确定,这意味着我应该如何确定该点应该映射在切线的一侧还是另一侧。确定这一点的方法是什么。

2) 我计算点 A 的切线方程。然后对于每个点 (a, b, c, d) 我计算到 A 的距离(沿圆),并使用这些距离计算 (at, bt, ct, dt...) 沿切线。为了确定给定点的“正确的一侧”,我可能会使用该点到切线的投影。但是,即使这样,我怎么知道“哪一边是哪一边”?也许有更简单的方法可以做到这一点。

欢迎任何有关如何执行此操作的建议。如果我不够精确,我会详细说明。

【问题讨论】:

  • 这是一个相当重量级的描述。图表会很有帮助!

标签: math vector geometry computational-geometry vectormath


【解决方案1】:

一个更好的建议是计算一个坐标变换,将圆映射到一个以原点为中心的单位圆,这样 A 将具有坐标 (1, 0)(和 B 分别为 (-1, 0) )。 变换应该是旋转膨胀。 现在,Aa 上的距离只是以弧度测量的角度 aOA。所以你可以很容易地计算出,它是 (1, atan2(y, x)) 其中 (x, y) 是 a 的坐标。

现在,您唯一需要做的就是返回原始坐标系,应用逆变换。

【讨论】:

  • 谢谢。是否有一个“自动”公式来计算给定弧端点的弧长(一个包含角度的公式)?该公式应涉及原始弧端点(不是转换的结果)
  • @user: 嗯,弧长等于弧度乘以半径的角度
  • 谢谢。假设我确定了点 K 相对于线 AB 的“边”(这由一个正号确定,例如,“确定点位于直线的哪一侧”中建议的方法)。另外,我找到了切线方程。现在,我想在与 K 位于线 AB 同一侧的切线 t 上获得新点 Kt,但 Kt 应该在切线 t 上。假设距离 AKt 应该是 p。如何继续将 Kt 放置在正确的一侧?谢谢
  • @user:如果采用我的方法,这是可以完全避免的问题之一。好吧,如果你还是想走你的路,你需要做以下事情: 1. 考虑C 的角度AOC 为90 度的点。矢量OC 肯定是你的切线的direction vector .而且,它的长度等于圆的半径。
  • 2.对于每隔一个点a,计算角度alpha = aOA 以弧度为单位。矢量alpha * OC 将沿线定向,具有所需的长度,并将朝正确的方向看。 3.你的观点at现在是A + alpha * OC
【解决方案2】:

要确定你在圈子的哪一边,你基本上需要确定你在AB的哪一边。有关该问题的答案,请参见例如Determine which side of a line a point lies.

【讨论】:

  • 谢谢。我需要知道以下内容是否正确(以及背后的原因是什么):
  • 谢谢。假设我确定了点 K 相对于线 AB 的“边”(这由一个正号确定,例如,“确定点位于直线的哪一侧”中建议的方法)。另外,我找到了切线的方程。现在,我想在与 K 位于线 AB 同一侧的切线 t 上获得新点 Kt,但 Kt 应该在切线 t 上。假设距离 AKt 应该是 p。如何将 Kt 放置在正确的一侧?谢谢
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多