Javaで2行の交差点を見つける
1. 概要
このクイックチュートリアルでは、線形関数によって定義された2本の線の交点を勾配切片形式で見つける方法を示します。
2. 交差の数学式
平面上の任意の直線(垂直を除く)は、線形関数で定義できます。
y = mx + b
ここで、 m は傾き、bはy切片です。
垂直線の場合、 m は無限大に等しいため、除外します。 2本の線が平行である場合、それらの傾きは同じです。つまり、mの値は同じです。
2行あるとしましょう。 最初の関数は最初の行を定義します。
y = m1x + b1
そして、2番目の関数は2行目を定義します。
y = m2x + b2
これらの線の交点を見つけたいと思います。 明らかに、方程式は交点に当てはまります。
y1 = y2
y-変数を置き換えましょう:
m1x + b1 = m2x + b2
上記の式から、x-座標を見つけることができます。
x(m1 - m2) = b2 - b1
x = (b2 - b1) / (m1 - m2)
最後に、交点のy座標を見つけることができます。
y = m1x + b1
それでは、実装の部分に移りましょう。
3. Javaの実装
まず、4つの入力変数があります。1行目は m1、b1 、2行目は m2、b2です。
次に、計算された交点を java.awt.Pointタイプのオブジェクトに変換します。
最後に、線は平行である可能性があるため、戻り値を作成しましょうオプション
public Optional<Point> calculateIntersectionPoint(
double m1,
double b1,
double m2,
double b2) {
if (m1 == m2) {
return Optional.empty();
}
double x = (b2 - b1) / (m1 - m2);
double y = m1 * x + b1;
Point point = new Point();
point.setLocation(x, y);
return Optional.of(point);
}
次に、いくつかの値を選択して、平行線と非平行線のメソッドをテストしてみましょう。
たとえば、 x 軸( y = 0 )を最初の線とし、 y = x –1で定義された線を2番目の線とします。ライン。
2番目の線の場合、傾きmは1に等しく、これは 45 度を意味し、y切片は[ X139X] -1 は、線が点(0、-1)のy軸と交差することを意味します。
2番目の線とx軸との交点は、(1,0 )でなければならないことは直感的に明らかです。
確認してみましょう。
まず、線が平行ではないため、 Point が存在することを確認してから、xとyの値を確認します。
@Test
public void givenNotParallelLines_whenCalculatePoint_thenPresent() {
double m1 = 0;
double b1 = 0;
double m2 = 1;
double b2 = -1;
Optional<Point> point = service.calculateIntersectionPoint(m1, b1, m2, b2);
assertTrue(point.isPresent());
assertEquals(point.get().getX(), 1, 0.001);
assertEquals(point.get().getY(), 0, 0.001);
}
最後に、2本の平行線を取り、戻り値が空であることを確認しましょう。
@Test
public void givenParallelLines_whenCalculatePoint_thenEmpty() {
double m1 = 1;
double b1 = 0;
double m2 = 1;
double b2 = -1;
Optional<Point> point = service.calculateIntersectionPoint(m1, b1, m2, b2);
assertFalse(point.isPresent());
}
4. 結論
このチュートリアルでは、2本の線の交点を計算する方法を示しました。
いつものように、完全なソースコードはGitHubでから入手できます。