私は2つのポイントシリーズを持っています
A = [(18.405316791178798, -22.039859853332942),
(18.372696520198463, -21.1145),
(18.746540658574137, -20.1145),
(18.698714698430614, -19.1145),
(18.80081378263931, -18.1145),
(18.838536172339943, -17.1145),
(18.876258562040572, -16.1145),
(18.967679510389303, -15.1145),
(19.004907703822514, -14.1145),
(19.042135897255729, -13.1145),
(19.345372798084995, -12.1145),
(19.391824245372803, -11.598937753853679),
(19.435471418833544, -11.1145),
(19.420235820376909, -10.1145),
(19.423148861774159, -9.1145),
(19.426061903171416, -8.1145),
(19.452752569112423, -7.1145),
(19.489649834463115, -6.1145),
(19.444635952332344, -5.1145),
(19.443635102001071, -5.0430597023976906),
(19.430626347601358, -4.1145),
(19.421676068414001, -3.1144999999999996),
(19.362954522948439, -2.1144999999999996),
(19.346848825989134, -1.1144999999999996),
(19.359781116687397, -0.1144999999999996),
(19.396797325132418, 0.69011368336827994)]
B=[(21.7744, -17.859620414326386),
(22.7744, -17.858000854574556),
(23.7744, -18.065164294951039),
(24.7744, -18.051109497755608),
(25.7744, -18.037054700560173),
(26.7744, -18.022999903364742),
(27.7744, -18.008945106169307),
(28.7744, -18.014846881456318),
(29.7744, -18.02764295838865),
(30.7744, -18.098340990366935)]
それらの1つが1つの頭から延長される場合、それらが交差することは確かです.
今、私はそれらの「潜在的な」交差点を見つけたいと思っています。「すでに交差している」点シリーズの交点を見つけることができる関数を作成しました。
# find the intersection between two line segments
# if none, return None
# else, return sequence numbers in both rep1 and rep2 and the intersection
def _findIntersection(rep1, rep2):
x_down = [elem[0] for elem in rep1]
y_down = [elem[1] for elem in rep1]
x_up = [elem[0] for elem in rep2]
y_up = [elem[1] for elem in rep2]
for m in xrange(len(x_down)-1):
p0 = np.array([x_down[m], y_down[m]])
p1 = np.array([x_down[m+1], y_down[m+1]])
for n in xrange(len(x_up)-1):
q0 = np.array([x_up[n], y_up[n]])
q1 = np.array([x_up[n+1], y_up[n+1]])
try: # to ignore the parallel cases
params = np.linalg.solve(np.column_stack((p1-p0, q0-q1)), q0-p0)
if np.all((params >= 0) & (params <= 1)):
return m, n, ((p0+params[0]*(p1-p0))[0], (p0+params[0]*(p1-p0))[1])
except:
pass
だから、私が必要としているのは、どのポイントシリーズのどの端を拡張する必要があるかを見つけることだと思います. これを知っている限り、単純に拡張して、既存の との交点を見つけることができます_findIntersection()
。
この問題では、2 つのポイント シリーズはほぼ両方とも直線であり、交点が 1 つだけ存在することを意味していると安全に想定できます。
私はPythonを使用していますが、一般的なソリューションも大歓迎です!