2016-08-13 147 views
2

enter image description here计算在一个圆圈

平行线我计算是从原始线Ñ垂直距离线(2组坐标)(紫和绿 - 蓝线)。 (原线是粉红色的)(距离是绿色箭头)

如何获得四个新点的坐标?

我有2个原始点的坐标和他们的角度。 (粉红线)

我需要它的工作,如果行垂直,或任何其他方向。

现在我试图计算它: 1.获得垂直于两个老点的新点n距离 2.找到圆与我定义的新线相交的位置。

我觉得有一个更简单的方法。

+0

这是一种编程或数学的问题吗? – ja72

回答

1

类似于@ MBO的回答,让我们假设,该中心是(0,0)和您最初的两点是:

P0 = (x0, y0) and P1 = (x1, y1) 

上线P0P1的点的形式:

(x, y) = c(x1 - x0, y1 - y0) + (x0, y0) 

为一些常数c

(u, v)是垂直于线P0P1

(u, v) = (y1 - y0, x1 - x0)/sqrt((x1 - x0)^2 + (y1 - y0)^2) 

平行于P0P1上的任何线的点的形式为:

(x, y) = c(x1 - x0, y1 - y0) + (x0, y0) +/- (u, v)* n   {eq 1} 

其中n是线之间的垂直距离和c是一个常数。

这里剩下的是找到c的值,使得(x,y)在圆上。但这些可以通过求解以下两个二次公式计算:

(c(x1 - x0) + x0 +/- u*n)^2 + (c(y1 - y0) + y0 +/- v*n)^2 = r^2 

其中r为半径。请注意,这些方程可以写成:

c^2(x1 - x0)^2 + 2c(x1 - x0)*(x0 +/- u*n) + (x0 +/- u*n)^2 
+ c^2(y1 - y0)^2 + 2c(y1 - y0)*(y0 +/- v*n) + (y0 +/- v*n)^2 = r^2 

A*c^2 + B*c + D = 0 

其中

A = (x1 - x0)^2 + (y1 - y0)^2 
B = 2(x1 - x0)*(x0 +/- u*n) + 2(y1 - y0)*(y0 +/- v*n) 
D = (x0 +/- u*n)^2 + (y0 +/- v*n)^2 - r^2 

这实际上是两个二次方程之一的+/-迹象每个选择。这两个方程的4个解决方案会给你的c四个值从中你会用得到四点{EQ 1}


UPDATE

这里有两个二次方程(我“VE重用字母ABC但它们在每种情况下不同):

A*c^2 + B*c + D = 0           {eq 2} 

其中

A = (x1 - x0)^2 + (y1 - y0)^2 
B = 2(x1 - x0)*(x0 + u*n) + 2(y1 - y0)*(y0 + v*n) 
D = (x0 + u*n)^2 + (y0 + v*n)^2 - r^2 

A*c^2 + B*c + D = 0           {eq 3} 

其中

A = (x1 - x0)^2 + (y1 - y0)^2 
B = 2(x1 - x0)*(x0 - u*n) + 2(y1 - y0)*(y0 - v*n) 
D = (x0 - u*n)^2 + (y0 - v*n)^2 - r^2 
+0

感谢您的详尽解答。就你的答案的格式而言:is(x,y)是指每个x值对应于逗号前的第一个东西?另外,在你的方程中,c和C有什么区别?另外,什么是相当于处理+/-的代码?是否有条件检查n> = 0? – awongh

+0

另外,您的第二个到最后一个等式中的D是什么? – awongh

+0

请注意,我修改了最后一行,以便现在它定义了'D',即二次方程中的独立项'A * c^2 + B * c + D = 0'。 –

0

让我们圆半径为R,圆心是(0,0)(如果没有,转移所有的坐标,以简化数学),第一个和弦到底是P0=(x0, y0),第二弦到底是P1=(x1,y1),未知的新的和弦到底是P=(x,y)。 和弦长度L是

L = Sqrt((x1-x0)^2 + (y1-y0)^2) 

和弦结束趴在圆,所以

x^2 + y^2 = R^2 {1} 

倍增三角形PP0P1的区域可能被表示为底和高的产物和通过叉积的绝对值两个边缘向量,所以

+/- L * n = (x-x0)*(y-y1)-(x-x1)*(y-y0) = {2} 
     x*y - x*y1 - x0*y + x0*y1 - x*y + x*y0 + x1*y - x1*y0 = 
     x * (y0-y1) + y * (x1-x0) + (x0*y1-x1*y0) 

求解方程{1}和{2}的系统,找到新和弦结束的坐标。 (最多4分 - 两个用于+L*n情况下,两个用于-L*n情况)

我不能声称虽然,这种方法是简单的 - {2}基本上是平行线的方程,并且取代在{1}是相交与圈子。