平行线我计算是从原始线Ñ垂直距离线(2组坐标)(紫和绿 - 蓝线)。 (原线是粉红色的)(距离是绿色箭头)
如何获得四个新点的坐标?
我有2个原始点的坐标和他们的角度。 (粉红线)
我需要它的工作,如果行垂直,或任何其他方向。
现在我试图计算它: 1.获得垂直于两个老点的新点n距离 2.找到圆与我定义的新线相交的位置。
我觉得有一个更简单的方法。
平行线我计算是从原始线Ñ垂直距离线(2组坐标)(紫和绿 - 蓝线)。 (原线是粉红色的)(距离是绿色箭头)
如何获得四个新点的坐标?
我有2个原始点的坐标和他们的角度。 (粉红线)
我需要它的工作,如果行垂直,或任何其他方向。
现在我试图计算它: 1.获得垂直于两个老点的新点n距离 2.找到圆与我定义的新线相交的位置。
我觉得有一个更简单的方法。
类似于@ 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重用字母A
,B
和C
但它们在每种情况下不同):
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
让我们圆半径为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}是相交与圈子。
这是一种编程或数学的问题吗? – ja72