2016-10-30 7 views
2

line1とlin2が交わる点を求める方法(両方の線がx、y、alphaで定義されている場合)x、yは線上の点の座標で、alphaは角度線とx = constの間?2本の線の交点を見つけるための公式

私は正弦定理を適用しようとしましたが、2つの答えが得られます(線の両側に三角形を作ることができます)。ポイントの1つでどのポイントが正しい傾きになっているかチェックできますが、それは醜いです。

私はy = ax + b表現に切り替えることができますが、私は心配する必要がある特別なケースがあります。垂直線と水平線は、1/sin(アルファ)と1/cos(アルファ)の場合のゼロ除算を避けるために、異なっている必要があります。

私は特定の言語の実装を探しているわけではなく、数式だけを探しています。

これらの質問は、有限の線分を扱うものであり、線ではないため、関係しません。

Given two points and two vectors, find point of intersection

How do you detect where two line segments intersect?

答えて

2

line 1[x2, y2]alpha2によって[x1, y1]alpha1line 2によって定義されると仮定する。

k1 = tan(alpha1)k2 = tan(alpha2)とします。

そしてx座標の交点のための式は

x = (y2 - y1 + k1 * x1 - k2 * x2)/(k1 - k2) 

。注:機能tanは角度pi/2 + k * piため未定義である(kは任意の整数である)、そう:

​​がの場合、の場合、x = x1y = y2 + k2 * (x1 - x2)

k2次いで、x = x2y = y1 + k1 * (x2 - x1)

未定義ある場合(両方とも実際にインデックス1 <の交換と同様である - > 2)。

+1

チェックを回避する方法はありますために'if(aplha1!= pi/2)'?角度は異なることが保証されていますが、そのうちの1つがpi/2で、tan(pi/2)のdiv_zeroエラーが発生する可能性があります。 – Stepan

+0

この特別なケースについて警告していただきありがとうございます。 – MarianD

1

行式Y = aX + bの場合、a = tan(alpha)を計算できます。

したがって、line1がx、y、alphaとして定義されている場合、方程式はY = tan(alpha) * X + bです。

ここでbを見つけるには、あなたの行にポイントが必要です。この点には座標(x、y)があります。

y = ax + b

b = y - ax

だからライン方程式は次のとおりです。

Y = tan(alpha) * X + (y - tan(alpha) * x)

今、あなただけのライン方程式解く必要があります:

Y = a1 * X + b1

をです

Y = a2 * X + b2

a1 * X + b1 = a2 * X + b2

(a1 - a2) * X = b2 - b1

X = (b2 - b1)/(a1 - a2)

今あなたがあまりにもYを計算することができます。

だから我々は交換した場合、我々は得る:

X = ((y2 - tan(alpha2) * x2) - (y1 - tan(alpha1) * x1))/(tan(alpha1) - tan(alpha2)

を簡素化:

X = (y2 - y1 - tan(alpha2) * x2 + tan(alpha1) * x1))/(tan(alpha1) - tan(alpha2)

そして:

Y = tan(alpha1) * X + (y - tan(alpha1) * x

+1

同じ質問が適用されます - 1行が垂直でtan(90)=無限大の場合はどうなりますか? – Stepan

+0

数学をする前に確認する必要があります。 – Ludonope

+0

この方法を使用する場合、他の方法はありません(チェックする必要のない他の方法があります) – Ludonope

関連する問題