Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear
Saya pasti soalan saya adalah soalan yang sangat umum, mungkin soalan java tulen. Walau bagaimanapun, saya telah cuba mencari cara untuk mengenal pasti sama ada tiga koordinat adalah kolinear, menggunakan logik yang sama dan mendapati ia nampaknya tidak berfungsi untuk contoh dengan "titik" sebagai input. Dua kaedah boleh digunakan 1. Cari luas segi tiga yang membentuk tiga koordinat/titik. Jika mereka berada pada baris yang sama, nilai kawasan mestilah sifar. 2. Bahagikan garis yang menghubungkan koordinat ini kepada dua bahagian dan cari cerun masing-masing. Jika mereka berada pada baris yang sama, cerun akan sama.
Ini yang saya cuba.
private boolean collinearCheck( Coordinate endPointOne , Coordinate intersection,Coordinate endPointTwo ){ boolean isCollenear = false; //Area of triangle approach double area = (Math.round(endPointOne.x )* (Math.round(intersection.y) - Math.round (endPointTwo.y)) + Math.round(intersection.x )* (Math.round(endPointTwo.y) - Math.round (endPointOne.y)) + Math.round(endPointTwo.x) * (Math.round(endPointOne.y) - Math.round(intersection.y))); if((endPointOne.x * (intersection.y - endPointTwo.y) + intersection.x * (endPointTwo.y - endPointOne.y) + endPointTwo.x * (endPointOne.y - intersection.y))<= 0) if(Math.round(area) <= 0) { isCollenear = true; } // Slope Approach double numeratorOne = Math.round(intersection.y) - Math.round(endPointOne.y); double denominatorOne = Math.round(intersection.x) - Math.round(endPointOne.x); double numeratorTwo = Math.round(endPointTwo.y) - Math.round(intersection.y); double denominatorTwo = Math.round(endPointTwo.x) - Math.round(intersection.x); double result1 = Math.round(numeratorOne/denominatorOne); double result2 = Math.round(numeratorTwo/denominatorTwo); if(result1== 0 && result2==0){ isCollenear = true; } return isCollenear; }
Dalam kedua-dua kes, menggunakan koordinat sebagai input; walaupun untuk kes kolinear yang serupa, saya mempunyai nilai untuk kawasan, seperti 4, dsb. Untuk kes yang jelas bukan kolinear; saya mempunyai nilai cerun yang sama.
Adakah terdapat cara untuk mendapatkan pemberitahuan eksplisit untuk kolineariti menggunakan sebarang binaan? Adakah saya melakukannya dengan betul? Nilai sampel koordinat yang saya hantar ke kaedah ialah Coefficient endPointOne = -26.6666666666686, 32.38095238095238 ....dll
Mengharapkan pendapat anda.
Terima kasih dan salam sejahtera
Saya tidak menyemak kod kawasan, tetapi menyemak sama ada tiga titik itu adalah kolinear. Maka formulanya ialah:
Mata (x1,y1), (x2,y2), (x3,y3).
Ia sepatutnya kolinear jika dan hanya jika,
(y2-y1) (y3-y2) ------- = ------- (x2-x1) (x3-x2)
Jadi kodnya sepatutnya,
if(result1==result2){ isCollenear = true; }
Atas ialah kandungan terperinci Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!