Cari Persimpangan Dua Garisan di Jawa

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menunjukkan bagaimana mencari titik persilangan dua garis yang ditentukan oleh fungsi linear dalam bentuk cerobong-pintasan.

2. Rumus Matematik Persilangan

Sebarang garis lurus (kecuali menegak) pada satah dapat ditentukan oleh fungsi linear:

y = mx + b

di mana m adalah cerun dan b adalah pintasan-y.

Untuk garis menegak, m sama dengan tak terhingga, sebab itulah kami mengecualikannya. Sekiranya dua garis selari, mereka mempunyai cerun yang sama, iaitu nilai m yang sama .

Katakan kita mempunyai dua baris. Fungsi pertama menentukan baris pertama:

y = m1x + b1

Dan fungsi kedua menentukan baris kedua:

y = m2x + b2

Kami mahu mencari titik persilangan garis ini. Jelas, persamaan itu berlaku untuk titik persimpangan:

y1 = y2

Mari ganti pemboleh ubah y :

m1x + b1 = m2x + b2

Dari persamaan di atas kita dapat mencari koordinat x :

x(m1 - m2) = b2 - b1 x = (b2 - b1) / (m1 - m2)

Akhirnya, kita dapat mencari koordinat y dari titik persimpangan:

y = m1x + b1

Mari sekarang beralih ke bahagian pelaksanaan.

3. Pelaksanaan Java

Pertama, kita mempunyai empat pemboleh ubah input - m1, b1 untuk baris pertama, dan m2, b2 untuk baris kedua.

Kedua, kita akan menukar titik persilangan yang dikira menjadi objek jenis java.awt.Point .

Akhirnya, garis mungkin selari, jadi mari kita menjadikan nilai yang dikembalikan Pilihan :

public Optional 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); }

Sekarang mari kita memilih beberapa nilai dan menguji kaedah untuk garis selari dan tidak selari.

Sebagai contoh, mari kita ambil x -axis ( y = 0 ) sebagai baris pertama, dan garis yang ditakrifkan oleh y = x - 1 sebagai baris kedua.

Untuk garis kedua, cerun m sama dengan 1 yang bermaksud 45 darjah, dan pintasan- y sama dengan -1 yang bermaksud bahawa garis memintas paksi - y pada titik (0, -1).

Secara intuitif jelas bahawa titik persimpangan baris kedua dengan x -axis mestilah (1,0 ):

Mari kita periksa.

Pertama, pastikan Titik hadir, kerana garis tidak selari, dan kemudian periksa nilai x dan y :

@Test public void givenNotParallelLines_whenCalculatePoint_thenPresent() { double m1 = 0; double b1 = 0; double m2 = 1; double b2 = -1; Optional point = service.calculateIntersectionPoint(m1, b1, m2, b2); assertTrue(point.isPresent()); assertEquals(point.get().getX(), 1, 0.001); assertEquals(point.get().getY(), 0, 0.001); }

Akhir sekali, mari kita ambil dua garis selari dan pastikan nilai yang dikembalikan kosong:

@Test public void givenParallelLines_whenCalculatePoint_thenEmpty() { double m1 = 1; double b1 = 0; double m2 = 1; double b2 = -1; Optional point = service.calculateIntersectionPoint(m1, b1, m2, b2); assertFalse(point.isPresent()); }

4. Kesimpulan

Dalam tutorial ini, kami telah menunjukkan cara mengira titik persilangan dua garis.

Seperti biasa, kod sumber lengkap boleh didapati di GitHub.