我有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()
我无法确定这两个线段的交点以及交叉点左右两侧的对应坐标。有人能指出我正确的方向吗?
答案 0 :(得分:0)
我假设您正在寻找分别来自集合list()
和dict()
的点(x,y)
生成的线段的交叉点。
蛮力方法是解决你的集合中的每两对点是否会引起相交的线段。我怀疑这种一般性问题有一种更有效的方法,但由于你的数据集很小,计算时间应该不是问题。
X * Y
和Sx * Sy
之间的线段有一个交叉点,如果对于0到1之间的某些(x1,y1)-(x2,y2)
你可以解决
(u1,v1)-(u2,v2)
因此,对于两个数据集中的每个连续点对,您可以求解此等式并检查a和b是否位于0和1之间。如果是这种情况,则线将相交。