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番目の線の場合、傾きm1に等しく、これは 45 度を意味し、y切片は[ X139X] -1 は、線が点(0、-1)のy軸と交差することを意味します。

2番目の線とx軸との交点は、(1,0 )でなければならないことは直感的に明らかです。

確認してみましょう。

まず、線が平行ではないため、 Point が存在することを確認してから、xyの値を確認します。

@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から入手できます。