【问题标题】:Finding coordinate points of intersection with two numpy arrays查找与两个 numpy 数组的交点坐标
【发布时间】:2016-05-07 05:16:47
【问题描述】:

这类问题与通过 numpy.情况就是这样,我正在创建一个查看斜坡稳定性的程序,我需要找到一个圆与一条线相交的位置。

我有两个 numpy 数组:

一个数组为我提供了二维高程剖面的正常 (x, y) 值

另一个数组是坐标 (x, y) 的计算值,它从定义的中心跨越圆的圆周。

我需要以某种方式比较两者,圆的坐标与轮廓线相交的近似点是什么?

这里有一些数据可以使用:

circ_coords = np.array([
                        [.71,.71],
                        [0.,1.]
                       ])

linear_profile = np.array([
                           [0.,0.],
                           [1.,1.]
                         ])

我需要一个函数,它会根据这些圆坐标和你的线性轮廓吐出一个或多个坐标值。这两者会在这里相交。

def intersect(array1, array2):
    # stuff
    return computed_array

【问题讨论】:

  • circ_coords 的中心是什么?
  • 在这种情况下它只是 (0,0):circ_coords 已经是我创建的一个函数,用于从定义的中心创建一个值数组
  • 您只想在 numpy 中执行此操作?因为shapely有一些很酷的功能toblerity.org/shapely/manual.html
  • @pseudoAJ 我不必在 numpy 中严格执行此操作,但我看看那个链接。

标签: python numpy matplotlib scipy


【解决方案1】:

你可以用代数来解决它。 (x1,y1) 和 (x2,y2) 之间的线段上的点 (x,y) 的参数表示为:

x=tx1+(1−t)x2 和 y=ty1+(1−t)y2,

其中 0≤t≤1。

如果将其代入圆的方程并求解得到的 t 二次方程,则可以测试 0≤t01≤1,即线段是否与圆相交。 t01 值可用于计算交点。

【讨论】:

    【解决方案2】:

    Shapely 有一些很酷的功能。根据this post,这段代码应该可以工作:

    from shapely.geometry import LineString
    from shapely.geometry import Point
    
    p = Point(0,0)//center
    c = p.buffer(0.71).boundary//radius
    l = LineString([(0.,0.), (1., 1.)])//line point
    i = c.intersection(l)
    

    显然这里 i 是您要查找的数组,也请检查此post。希望这会有所帮助。

    【讨论】:

    • 是的,这个答案是完美的,正是我正在寻找的。谢谢
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2021-05-01
    • 2012-06-04
    相关资源
    最近更新 更多