圆到切线映射

时间:2010-11-13 18:40:59

标签: math vector geometry computational-geometry vectormath

假设您给出一个圆圈,其中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 ...)沿着切线。为了确定给定点的“正确边”,我可以使用该点到切线的投影。但是,即便如此,我怎么知道'哪一方是哪一方'?也许有更简单的方法可以做到这一点。

欢迎任何关于如何做到这一点的建议。如果我不够精确,我会详细说明。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

要确定您所在圈子的“侧面”,您基本上需要确定您所在行AB的哪一侧。对于答案,请参阅例如Determine which side of a line a point lies