2017-06-19 11 views
0

私は比較的簡単な質問がありますが、私は答えは知っていますが、PythonとNumpyを使って正しい実装を見つけることができないようです。アイデアは、私は2つの線を持っており、私は仮想交点を見つける必要がある(私はhttps://www.youtube.com/watch?v=kCyoaidiXAU&t=313sからの例を使用した)。numpyでPythonのラインラインの交差点

どちらの線も、位置ベクトル(線が通過する点)としてt0を変数とし、Vを方向ベクトルとして、r = r0 + t * Vの形式をとります。方向ベクトルVは、単に線の両方の点を通るベクトルを見つけることによって見つけることができる。私ができる、
L1 = R0(既知点)+ T(未知変数)* V(方向ベクトル)次に

: - Vは= A、それは、ラインを処方することができるものとB.

です簡単に手動で見つけることができますが、私はPythonにどのように伝えるべきかを知りません。numpy.linalg.solveを試しましたが、これは行列を与えますが、単一の値が必要です。例えば

# Line A and Line B that intersect somewhere 
A = LineString([(4., 0.), (4., -3.)]) 
B = LineString([(6., 2.), (10., 2.)]) 

# direction vectors for line A and B 
v1 = (A[0].x - A[1].x, A[0].y, A[1].y) # --> [0,3] 
v2 = (B[0].x - B[1].x, B[0].y, B[1].y) # --> [-4,0] 

L1 = A[1] + x * v1 
L2 = B[1] + y * v2 

さて、私はX用のL1を解くことによって、手動でこれを解決するだろう:

L1 = [4, 0] + x * [0, 3] = [4, 3x] 
L2 = [6, 2] + y * [-4, 0] = [6-4y, 2] 

# finding intersection point by solving L1 = L2 
4 = 6-4y & 3x = 2 
y = 1/2 & x = 2/3 

しかし、私はxについて解く方法numpyの/のpythonを伝えるためにどのよう見当がつかないとy。

正しい方向のヘルプやガイドがあれば幸いです。

+1

関連:https://stackoverflow.com/q/41797953/67579 –

+0

あなたは「numpy」と言っていますが、ここでは何も表示されません。あなたは気の利いた解決策を望んでいますか?それとも必要ないのですか? –

+0

可能であれば、うまくいきませんが、Numpy.linalg.solveを試したので、numpyはそのようなことをする機能を持っていると思っていました。 – Matthie456

答えて

0

A0とA1の線はパラメトリック方程式(1-t)*A0 + t*A1を持ちます。ここで、tはパラメータです。 B0とB1を通る線はパラメトリック方程式(1-s)*A0 + s*A1を持ちます。ここで、sはパラメータです。これらを等しく設定すると、システム(A1-A0)t + (B0-B1)s == B0-A0が得られます。したがって、右辺はB0-A0であり、行列は列A1-A0およびB0-B1を有する。システムはnp.linalg.solveで解決できます。完全な例:

A = np.array([[4, 0], [4, -3]]) 
B = np.array([[6, 2], [10, 2]]) 
t, s = np.linalg.solve(np.array([A[1]-A[0], B[0]-B[1]]).T, B[0]-A[0]) 
print((1-t)*A[0] + t*A[1]) 
print((1-s)*B[0] + s*B[1]) 

どちらのプリントが出力[4., 2.]が正しいことを確認するコマンド。 (2番目は本当に冗長に印刷されています)