Geometry 创建与半径为r的两条直线相切的圆[几何图形]

Geometry 创建与半径为r的两条直线相切的圆[几何图形],geometry,sympy,lines,Geometry,Sympy,Lines,我想在两条线之间画一个圆,但是,我只想用一条线来创建圆。 所以我的方法是在第1行选择点。 对于第1行上的每个点: 我想创建半径越来越大的圆,这些圆与直线上的点1相切。增加半径,直到圆与另一条线相交。然后以较小的步长减小半径,直到圆与两条直线相切。 继续第1行的下一点 不知何故,我无法找到一个干净、清晰的代码来实现这一点。线上的点可以使用line.Arbitral_point完成。 如何创建半径为R的圆到点p1,使其以最佳方式相切 谢谢 与两条直线相切的半径为R的圆的圆心s1和s2是另外两条直线的

我想在两条线之间画一个圆,但是,我只想用一条线来创建圆。 所以我的方法是在第1行选择点。 对于第1行上的每个点: 我想创建半径越来越大的圆,这些圆与直线上的点1相切。增加半径,直到圆与另一条线相交。然后以较小的步长减小半径,直到圆与两条直线相切。 继续第1行的下一点

不知何故,我无法找到一个干净、清晰的代码来实现这一点。线上的点可以使用line.Arbitral_point完成。 如何创建半径为R的圆到点p1,使其以最佳方式相切


谢谢

与两条直线相切的半径为
R
的圆的圆心
s1
s2
是另外两条直线的交点,每条直线平行一段距离
d=R

让线
s1
A1={ax1,ay1}
B1={bx1,by1}
s2
A2={ax2,ay2}
B2={bx2,by2}

使用参数化表示,将显示
s1
中的点

s1x= ax1 + k1·v1x
s1y= ay1 + k1·v1y
其中,
k1
是每个点的不同值,
{v1x,v1y}
是方向
A1,B1
上的酉向量:

le1 = sqrt((bx1-ax1)^2 + (by1-ay1)^2) //length of A1-B1 segment
v1x = (bx1-ax1) / le1
v1y = (by1-ay1) / le1
s2行也是如此:

s2x= ax2 + k2·v2x
s2y= ay2 + k2·v2y
with
le2 = sqrt((bx2-ax2)^2 + (by2-ay2)^2) //length of A2-B2 segment
v2x = (bx2-ax2) / le2
v2y = (by2-ay2) / le2
现在,为了得到与s1的平行线,我们只需通过添加一个垂直于A1-B1且长度为d=R的向量来改变点A1。垂直酉向量是:
vpu1={-v1y,v1x}
注意:如果需要另一种解决方案,请在两行的另一侧使用
{v1y,-v1x}

因此,对于
vp1=vpu1·R
vp2={-v2y,v2x}·R
而言,与
s1
s2
平行的新点是

px1= ax1 - v1y·R
py1= ay1 + v1x·R
px2= ax2 - v2y·R
py2= ay2 + v2x·R
现在我们必须找到这些线的交点
C

sp1x= px1 + k1·v1x
sp1y= py1 + k1·v1y
sp2x= px2 + k2·v2x
sp2y= py2 + k2·v2y
with
sp1x = sp2x
sp1y = sp2y
求解
k1、k2、sp1x、sp1y
我们得到:

den = v1x·v2y - v2x·v1y
k1 = (v2y·(px2-px1) - v2x·(py2-py1)) / den
k2 = (v1y·(px2-px1) - v1x·(py2-py1)) / den
cx = px1 + k1·v1x   =   px2 + k2·v2x   //choose one
cy = py1 + k1·v1y   =   py2 + k2·v2y   //choose one
注意
den
的值。它
abs(den)
(低,分母接近于零),然后
s1
s2
是平行的或相同的直线。在这种情况下,没有解决方案

最后,切线点现在很简单:

tx1 = ax1 + k1·v1x
ty1 = ay1 + k1·v1y
tx2 = ax2 + k2·v2x
ty2 = ay2 + k2·v2x

对你的方法的描述是模糊的。你真正想要的结果是什么?sympy在这里有多有用?也许一张照片可以让事情变得更清楚。。。