【问题标题】:how to find the coordinates of the intersection point of a line ( parallel to a given line) and other line如何找到一条线(平行于给定线)和其他线的交点的坐标
【发布时间】:2022-06-28 11:49:16
【问题描述】:

我在链接中有 3 点 A、B、C。这些点生成一个三角形 ABC.2 平行于 AB 的红线,它们之间的距离为 30。绿线穿过 B 并垂直于 AC。 here is picture to describe it

如何找到两条红线和绿线之间的坐标

【问题讨论】:

    标签: python-3.x geometry shapely


    【解决方案1】:

    假设您想要高度Bh 和红线之间的两个交点(平行于BA,距离d):

    获取向量

    AC = C.x - A.x, C.y- A.y
    BA = A.x - B.x, A.y- B.y
    

    并将它们归一化((使单位长度除以矢量幅度)

    获取垂直于 AC 的高度向量

    n = -ac.y, ac.x
    

    使用叉积求 nBA 之间角度的正弦

    s = abs(n.x * ba.y - n.y * ba.x)
    

    现在获取交点坐标:

    ip1 = B + n * d / s
    ip2 = B - n * d / s
    

    就是这样。

    【讨论】:

    • 哇,我不知道有像你最后一个表达式那样计算交集的快速方法,它变得容易多了,非常感谢。但是我觉得在第二个代码块里,应该是ac.x而不是ax.x吧?
    • 是的,已更正。
    • @Quân nguyễn 到目前为止还没有答案吗?
    • 很抱歉拒绝了你的回答,但我认为求正弦的表达式不正确,当我更正它时,我发现它们之间的距离不正确
    • 正弦表达式是正确的。表达式计算前是否对 ac 和 ba 向量进行了归一化处理?
    【解决方案2】:

    谢谢@MBo,我想提供一种更简单的方法来找到答案以及在最后一个表达式中理解: 我将ip1坐标为

    ip1 = b.x + t * n.x, b.y + t * n.y                                     (1)
    

    所以ip1和b之间的距离为:

    d / sine(n, BA) = sqrt ((t * n.x) ** 2 + (t * n.y) ** 2)
    

    您可以轻松计算 t,然后将其放入 (1) 中以找到 ip1 和 ip2

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2023-03-07
      相关资源
      最近更新 更多