Maison >développement back-end >Golang >Comment déterminer si trois coordonnées sont colinéaires

Comment déterminer si trois coordonnées sont colinéaires

PHPz
PHPzavant
2024-02-06 08:12:03442parcourir

Comment déterminer si trois coordonnées sont colinéaires

Contenu de la question

Je suis sûr que ma question est très générale, probablement une pure question Java. Cependant, j'ai essayé de trouver un moyen d'identifier si trois coordonnées sont colinéaires, en utilisant la même logique et j'ai constaté que cela ne semble pas fonctionner pour l'exemple avec "point" en entrée. Deux méthodes peuvent être utilisées 1. Trouvez l'aire du triangle formant trois coordonnées/points. S'ils sont sur la même ligne ; la valeur de la zone doit être nulle. 2. Divisez la ligne reliant ces coordonnées en deux parties et trouvez leurs pentes respectives. S'ils sont sur la même ligne, les pentes seront les mêmes.

Voici ce que j’essaie.

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; 
  }

Dans les deux cas, en utilisant les coordonnées comme entrée ; même pour des cas également colinéaires, je me retrouve avec des valeurs pour la zone, comme 4, etc. Pour les cas qui ne sont clairement pas colinéaires ; je me retrouve avec la même valeur de pente.

Existe-t-il un moyen d'obtenir un notificateur explicite de colinéarité en utilisant n'importe quelle construction ? Est-ce que je le fais bien ? Les exemples de valeurs de coordonnées que je transmets à la méthode sont Coefficient endPointOne = -26.66666666666686, 32.38095238095238 ....etc

J'attends avec impatience vos avis.

Merci et salutations


Bonne réponse


Je ne vérifie pas l'indicatif régional, mais je vérifie si les trois points sont colinéaires. Alors la formule est :

Points (x1,y1), (x2,y2), (x3,y3).

Il devrait être colinéaire si et seulement si,

(y2-y1)      (y3-y2)
 -------  =   -------
 (x2-x1)      (x3-x2)

Donc le code devrait être,

if(result1==result2){
      isCollenear = true;
  }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer