找到2个向量坐标点的交集?

时间:2017-05-05 17:03:33

标签: python

我有2组数据。首先是(X,Y),第二个是(sX,sY)。这两组数据具有共同的交叉点。我想找到这两个数据集的交点(可以是多个或单个),并且(X,Y)坐标和(sX,sY)坐标位于交叉点的左侧和右侧。在下面找到附加数据

sX      =   np.array([-20000, 0, 10000, 40000])
sY      =   np.array([400000,400000,370000, 320000])
#
X = np.array([ -42511.39120081,  -41162.03618773,  -39569.14753556,
        -35456.17500301,  -32679.740863  ,  -27909.4795152 ,
        -18043.90334475,  -16739.03515622,  -11966.40224792,
         -5457.43885436,   -1974.19548315,    1612.6087504 ,
          2067.30503084,    8643.06707226,   12837.72525583,
         15307.19705378,   17027.36753134,   17071.59864826,
         33936.11882314,   34278.79468656,   34476.61704745,
         38158.25661822,   39848.28959228,   41956.72582408,
         45164.50724157,   46230.92552002,   47886.68542507,
         49046.00122228,   49555.60159235,   50338.23870893,
         58882.11117872,   68733.94172537,   71774.82308826,
        110450.93324733,  111599.75183894,  112602.89111697,
        113881.7040512 ])

Y = np.array([ 228251.19825081,  230583.93531626,  233331.11161642,
        240441.01092232,  245240.56187394,  253478.75628186,
        270522.9733343 ,  272773.30832584,  281012.42774874,
        292229.25066418,  298245.2126661 ,  304438.214557  ,
        305237.34824933,  316868.11198967,  324286.15993646,
        328648.43365539,  331685.06094314,  331761.78491836,
        361574.37018552,  362178.34470217,  362863.66652499,
        375965.64871771,  381981.13511198,  389467.85830642,
        400870.84443964,  404675.99664723,  410549.82353843,
        414676.24431532,  415900.80400938,  416975.0460433 ,
        426163.12838202,  436755.58167939,  440008.96015215,
        481606.30492179,  481985.52601648,  481298.07692515,
        479284.44077501])

plt.plot(X,Y)
plt.plot(X,Y,'x')
plt.plot(sX, sY)
plt.plot(sX,sY,'o')
plt.show()

我无法确定这两个线段的交点以及交叉点左右两侧的对应坐标。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我假设您正在寻找分别来自集合list()dict()的点(x,y)生成的线段的交叉点。

蛮力方法是解决你的集合中的每两对点是否会引起相交的线段。我怀疑这种一般性问题有一种更有效的方法,但由于你的数据集很小,计算时间应该不是问题。

蛮力方法:

X * YSx * Sy之间的线段有一个交叉点,如果对于0到1之间的某些(x1,y1)-(x2,y2)你可以解决

(u1,v1)-(u2,v2)

因此,对于两个数据集中的每个连续点对,您可以求解此等式并检查a和b是否位于0和1之间。如果是这种情况,则线将相交。

相关问题