计算平分线段坐标

calculate bisector segment coordinates

我认为对此有一个非常直接的答案,但我找不到。我的几何课离这个太远了。问题是: 给定 2 个点 A 和 B(坐标 Ax Ay Bx 和 By),我想找到点 C 和 D 的坐标,以便 [AB] 和 [CD] 线段在它们的中心相交并且 [CD] 的长度为 d (一个变量)。 我想从 Ax、Ay、Bx、By 和 d 中找到给我 Cx、Cy、Dx 和 Dy 的方程。 这是问题的一个小模式:

以及预期结果的图片:

我已经知道怎么求[AB]的圆心(Ax+Bx/2,Ay+By/2),怎么求[AB]线段的斜率(By-Ay/Bx-Ax) 然后是 [CD] 片段之一 (Ax-Bx/By-Ay)。但是后来我陷入了如何获得两分的问题。我以为我可以计算斜坡的角度,然后将它与一些三角函数一起使用以获得坐标,但这听起来像是一个非常繁重、丑陋和不必要的计算…… 感觉很接近,但我还是看不懂

我也找到了this post,几乎完美,但是不能定义长度:必须和第一段一样。

我不认为这是 language-dependent,但如果你必须知道,我正在做一个关于处理的迷你原型,稍后可能会在 javascript 上得到它。

感谢您的帮助。

这里的基本技巧是,在 2d 中,向量 (x, y) 的垂线仅为 ± (-y, x)。 (通过在 3d 中用 (0, 0, 1) 向量计算 cross product,然后投影到 2d 得到这个。)所以你需要做的是:

  1. 获取 A 和 B 之间的中点(你已经做到了)。

  2. 得到A到B的向量,即B - A = (x, y) = (bx - ax, by - ay)。

  3. 得到垂直向量:(-y, x).

  4. 标准化。让length = sqrt(y*y + x*x),然后norm = (-y/length, x/length).

  5. 将归一化垂直线乘以您想要的距离±d/2(因为您希望 C 和 D 之间的距离为 d),然后添加到中心点。

不需要斜率或三角函数。