如何沿现有线找到两点

How to find two points along an existing line

我敢肯定这是基本的三角学,我敢打赌我很多年前在学校学过,但我很难知道将什么函数应用于现实世界的情况。无论如何,我没有尝试解释我需要什么帮助,而是画了一个小图表:

我知道 p1、p2、r1 和 r2,但我不记得(或不知道如何搜索)如何算出 p3 和 p4 是什么。

此设置的基本应用是我有 2 个圆圈(红色和蓝色),当我将它们拖到 canvas 周围时,我需要它们不断连接。粉红色 link 将通过它们的中心点连接它们,但我不希望线穿过圆的圆周。

希望这是有道理的?提前致谢。

您必须求解以下方程组:

对于 p3 -->

(X-p1x)/(p1x-p2x)=(Y-p1y)/(p1y-p2y)
(X-p1x)^2 + (Y-p1y)^2 = r1^2

p4 相同,只是在第二个等式中将 r1 更改为 r2,将 p1 更改为 p4。

第一个方程是给定 2 个点的直线方程。 而第二个方程是给定圆心和半径的圆方程

生成的 X、Y 值将是 p3 的值,然后是 p4 的值。

我要说的有点长。我会让你写你自己的代码,但是,当然不会有帮助。

您知道点 P1、P2 以及半径 R1 和 R2。假设点 P1 和 P2 的坐标分别为 (x1,y1) 和 (x2,y2)。

连接P1和P2的直线是一条直线,因此可以用公式m=(y2-y1)/(x2-x1)计算直线的斜率。由于您知道斜率和两个坐标,因此可以计算截距 c 并构建形式为 y=mx+c 的公式。

一旦有了直线公式,您就可以为点 P3 应用 x 的值并计算 y,比方说 x3 和 y3,因为您的半径为 R1。同样,计算P4的坐标。

令 d 为 p1(x1, y1) 和 p2(x2,y2) 之间的距离
因此 d = sqrt((x1-x2)^2 + (y1-y2)^2)
现在点 p3(x3, y3) 以 r1:(d-r1)

的比例划分 p1 和 p2 之间的线

因此
x3 = (r1*x2 + (d-r1)*x1)/d 和
y3 = (r1*y2 + (d-r1)*y1)/d

与 p4(x4, y4) 类似
x4 = (r2*x1 + (d-r2)*x2)/d 和
y4 = (r2*y1 + (d-r2)*y2)/d

这是简单的矢量数学(不需要三角函数)

  1. 创建单位向量 vP1P2 方向

    矢量形式很简单:

    v=P2-P1; v/=|v|
    

    当放入 2D 时:

    v.x=P2.x-P1.x;
    v.y=P2.y-P1.y;
    l=sqrt((v.x*v.x)+(v.y*v.y))
    v.x/=l;
    v.y/=l;
    
  2. 现在只需从 P1,P2 翻译 r1,r2

    矢量形式:

    P3=P1+r1*v
    P4=P2-r2*v
    

    2D:

    P3.x=P1.x+r1*v.x;
    P3.y=P1.y+r1*v.y;
    P4.x=P2.x-r2*v.x;
    P4.y=P2.y-r2*v.y;