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
Libérer: 2024-02-06 08:12:03
avant
439 Les gens l'ont consulté

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; 
  }
Copier après la connexion

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)
Copier après la connexion

Donc le code devrait être,

if(result1==result2){
      isCollenear = true;
  }
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal