【问题标题】:How to find two points along an existing line如何沿着现有线找到两个点
【发布时间】:2016-05-16 08:46:13
【问题描述】:

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

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

此设置的基本应用是我有 2 个圆圈(红色和蓝色),当我在画布上拖动它们时,我需要它们不断连接。粉红色的链接将通过它们的中心点连接它们,但我不希望这条线穿过圆的圆周。

希望这有意义吗?提前致谢。

【问题讨论】:

  • 我投票结束这个问题,因为它是关于 Mathematics 而不是编程或软件开发。
  • 这不是题外话,我在这里发帖而不是数学交流板是有充分理由的。上下文用于 JavaScript 实现。如果我在 Math Exchange 中写了这样的请求,我会得到使用数学符号以方程式表示的答案。我不会明白如何实现答案。通过在这里询问它,我将确保它以代码符号表示。我排除了有关我使用哪种语言的信息,因为它无关紧要。我认为人们留下的答案将对其他在 JS 中面临这个数学问题的人有用。

标签: math geometry trigonometry points


【解决方案1】:

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

  1. P1P2 方向创建单位向量v

    向量形式很容易:

    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,P2by 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;
    

【讨论】:

  • 感谢您的时间(和您的图表的努力)。我选择了您的答案,因为我在矢量匹配方面工作得更好,并且我正在使用基于矢量的系统进行绘图。
【解决方案2】:

你必须解决以下方程组:

对于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 的值。

【讨论】:

    【解决方案3】:

    设 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

    【讨论】:

      【解决方案4】:

      我要说的有点长。我会让你编写自己的代码,但是,这当然无济于事。

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

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

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

      【讨论】:

      • 感谢您抽出宝贵时间,您能否澄清一下公式第二部分中的“c”是什么:“y=mx+c”?谢谢。
      • @jayfield1979 当x=0(线偏移)从标准线方程时,它是线y的位置。这种方法不适用于垂直线,并且在|dy|>>|dx| 的情况下会失去准确性。向量和/或参数方法对此更好
      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多