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

Bagaimana untuk menentukan sama ada tiga koordinat adalah kolinear

PHPz
Lepaskan: 2024-02-06 08:12:03
ke hadapan
439 orang telah melayarinya

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; 
  }
Salin selepas log masuk

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)
Salin selepas log masuk

Jadi kodnya sepatutnya,

if(result1==result2){
      isCollenear = true;
  }
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan