Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear

Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear

PHPz
PHPzke hadapan
2024-02-06 08:12:03429semak imbas

Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear

Kandungan soalan

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


Jawapan betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam