Geometry 与端点处的圆弧相切的圆弧和直线

Geometry 与端点处的圆弧相切的圆弧和直线,geometry,computational-geometry,Geometry,Computational Geometry,我有: 弧:由p1x、p1y-p2x、p2y、半径、中心、初始-最终ang定义 行:由ax、ay-bx、by定义 正如你们在图片上看到的,我想算出一条与弧和直线相切的弧,经过第一条弧的端点 我认为有一个独特的解决办法。(或者两个,R+和R-) 我想看看如何在没有结果的情况下实现一个算法 任何想法都将不胜感激 您要做的是找到一个与无限长直线“L”相切的圆,并在圆上的特定点与圆相切。关键的观察结果是,因为,我们需要找到的是点“TC”(“切线中心”)和距离“d”,在该点处,一条从给定直线偏移距离d的直

我有:

弧:由p1x、p1y-p2x、p2y、半径、中心、初始-最终ang定义

行:由ax、ay-bx、by定义

正如你们在图片上看到的,我想算出一条与弧和直线相切的弧,经过第一条弧的端点

我认为有一个独特的解决办法。(或者两个,R+和R-)

我想看看如何在没有结果的情况下实现一个算法

任何想法都将不胜感激


您要做的是找到一个与无限长直线“L”相切的圆,并在圆上的特定点与圆相切。关键的观察结果是,因为,我们需要找到的是点“TC”(“切线中心”)和距离“d”,在该点处,一条从给定直线偏移距离d的直线与从圆向外绘制的法线相交相同的距离(请原谅我的拙劣艺术):

求解“d”的最简单方法如下:

  • 通过取p-C并归一化,在点“p”处构造归一化法向量“R”。(这将构造圆的外切线。如果需要内切线,可以翻转。)

  • 构造与直线“L”垂直的归一化向量“N”。我不确定变量“ax,ay-bx”的意思是什么,所以让我们用起点“a=(ax,ay)”和方向向量“DA=(dax,day)”来定义这条线。在这种情况下,正常值为
    +/-(-day,dax)/sqrt(day*day+dax*dax)
    。(与三维中的(0,0,1)向量的归一化交叉。)

  • 选择“N”的符号,使其指向远离p的方向,即,如果(p-A)和N的点积为正,则翻转N。如果点积(接近)为零,则切线圆的半径(接近)为零,因此未定义

  • < P>现在考虑一个由P2= p+d*(r+n)定义的点Tc。如果P2位于直线L上,那么d是我们所寻找的相切圆的半径!当且仅当(P2-A)和N的点积为零时,P2位于直线上。这在一个变量d中定义了一个线性方程,所以可以求解它。请注意,如果R+N(接近)的长度为零,则P与圆和直线之间的最近点成180度角;您需要明确地检查并处理它

  • 一旦有了d,就可以得到圆心TC=p+d*R

  • 当p处圆的切线与直线平行或近似平行时,该方法应具有良好的数值稳定性


    您没有指定语言,但希望这可以帮助您开始。我的主要语言是c#。

    你的意思是在直线上的任何位置与无限直线相切,还是你试图到达线段的末端?@civiltomain-你不明白为什么P2在直线上时“d”是切线圆的半径,或者如何建立和解方程吗?谢谢dbc。我正在编写自己的代码,因为问题比我预期的要严重,因为我有带方位角的线段和圆弧。Th。谢谢你的时间。