如何在二维平面中给定点A、B坐标,找到一条与之平行的直线

3
我有A(x1,y1)和B(x2,y2)两个坐标,我也知道这条线的长度和倾角。现在我需要找到一条平行线,它会在指定距离处给我C(x3,y3)和D(x4,y4)这两个坐标。这是一条斜线。
任何伪代码或数学公式都可以帮助我解决问题。
例如,给定坐标A(200,0) B(0,450)。该线的倾角为113.962,长度为492.4。
请帮我查找距离A、B坐标50的C和D坐标。
请参见下面的图像,这是一条带有角度的线。
请参见下面的更新图像,以便找到平行线。

只需将a.x和b.x分别加上50即可。结果的线将是平行的。 - bhspencer
请查看附图 @Nelfeal @bhspencer @SomeDude。 - user10519853
C点可以是以A点为中心,半径为50的圆上的任意一点;同样,D点相对于B点也是如此,因此从技术上讲有无限多个解。按照一些人的建议,在X轴上平移50个单位会得到一个符合条件的答案;在Y轴上平移,或者在其他方向上平移也会得到相同结果。我猜你实际上想问的是,是否需要与原始线段垂直且距离为50的平行线段——这意味着ABCD将构成一个正方形。这是你要找的吗? - Daniel Beck
我的第一个评论仍然有效。V的角度是线的角度加上或减去90°,取决于你想要的哪一边。有很多在线资源可以学习如何通过向量来平移一个点。 - Nelfeal
好的,根据你更新的图像,听起来我的猜测是正确的(除了"square"部分是我的失误——只有当线段长度为50个单位时才有效。ABCD将成为一个矩形)。你想要将线段沿着垂直于该线的方向平移50个单位,而不是沿X轴或Y轴方向。 - Daniel Beck
显示剩余8条评论
1个回答

9
你的线条有基点 (x1,y1) 和方向向量:
(dx, dy) = (x2-x1, y2-y1)

将向量的各个分量除以向量长度,使其归一化:

len = sqrt((x2-x1)^2 + (y2-y1)^2)
(udx, udy) = (dx / len, dy / len)

垂直向量:

(px, py) = (-udy, udx)  
(note also reverse vector (udy, -udx) to shift onto another side)

距离为dist的平行线的基准点:

(nx, ny) = (x1 -udy * dist, y1 + udx * dist) 

第二点,如果您需要:
(sx, sy) = (nx + dx, ny + dy)

我们能找到任何余弦和正弦角度的公式吗? - user10519853
你能给我解释得更详细一些吗?对向量这个概念还不太了解。 - user10519853
udx,udy 实际上是线倾斜角的余弦和正弦,但你不需要显式使用它们。所有公式已计算完毕。 - MBo
x1 = x + cos(ang) * distance; y1 = y + sin(ang) * distance; - user10519853
有两个点就不需要角度。还要注意 - 垂直的组成部分已经交换,其中一个被取反了。 - MBo
当这些平行线与一条直线相交时,它们会超出轮廓并显得奇怪。请查看更新的图片 @MBo - user10519853

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接