Maison >développement back-end >C++ >Le nombre de segments de ligne horizontaux ou verticaux requis pour relier 3 points

Le nombre de segments de ligne horizontaux ou verticaux requis pour relier 3 points

WBOY
WBOYavant
2023-08-25 16:49:12856parcourir

Le nombre de segments de ligne horizontaux ou verticaux requis pour relier 3 points

Supposons qu'étant donné trois points (ou coordonnées) différents, vous souhaitiez trouver le nombre de segments de ligne horizontaux ou verticaux qui peuvent être formés en reliant ces trois points. De tels segments de ligne sont également appelés polylignes. Afin de résoudre ce problème, vous avez besoin du concept de géométrie computationnelle. Dans cet article, nous aborderons différentes manières de résoudre ce problème en C++.

Scénarios d'entrée et de sortie

Supposons que c1, c2 et c3 soient les coordonnées de 3 points sur le plan cartésien. Le nombre de segments de ligne horizontaux ou verticaux reliant ces 3 points sera celui indiqué ci-dessous.

Input: c1 = (-1, -1), c2 = (-2, 3), c3 = (4, 3)
Output: 1
Input: c1 = (1, -1), c2 = (1, 3), c3 = (4, 3)
Output: 2
Input: c1 = (1, 1), c2 = (2, 6), c3 = (5, 2)
Output: 3

Remarque - Les segments de ligne horizontaux et verticaux doivent être alignés avec l'axe de coordonnées.

Utilisez l'instruction If

Nous pouvons utiliser l'instruction if pour vérifier s'il y a une ligne horizontale ou verticale entre ces trois points.

  • Créez une fonction en combinant c1.x avec c2.x, c1.x avec c3.x et c2.x et c3.x. Si l’une ou l’autre des conditions est remplie, cela signifie qu’il existe un segment de ligne horizontale et que le décompte est incrémenté.

  • De même, cette fonction fonctionne en combinant c1.y avec c2.y, c1.y avec c3.y et c2.y et c3.y. Si l’une des conditions est remplie, le segment de ligne verticale existe. Le décompte augmente à nouveau.

Exemple

#include <iostream>
using namespace std;

struct Coordinate {
   int x;
   int y;
};
int countLineSegments(Coordinate c1, Coordinate c2, Coordinate c3) {
   int count = 0;
   // Check for the horizontal segment
   if (c1.x == c2.x || c1.x == c3.x || c2.x == c3.x)
      count++; 
   // Check for the vertical segment
   if (c1.y == c2.y || c1.y == c3.y || c2.y == c3.y)
      count++; 
   return count;
}

int main() {
   Coordinate c1, c2, c3;
   c1.x = -1; c1.y = -5;
   c2.x = -2; c2.y = 3;
   c3.x = 4; c3.y = 3;

   int numSegments = countLineSegments(c1, c2, c3);

   std::cout << "Number of horizontal or vertical line segments: " << numSegments << std::endl;

   return 0;
}

Sortie

Number of horizontal or vertical line segments: 1

Remarque Si les trois points sont sur le même axe du plan cartésien, c'est-à-dire l'axe X ou l'axe Y, alors le nombre de segments de ligne requis pour les connecter est 1. Si les points forment une forme en L, le résultat est 2, sinon le résultat est 3.

Utiliser les fonctions d'assistance

  • Ici, nous pouvons utiliser des fonctions auxiliaires (horizontalLine et verticalLine) pour calculer des segments de ligne.

  • Nous exploitons le fait que dans le système cartésien tous les points d'une ligne horizontale se trouvent sur la même coordonnée y. La fonction horizontalLine vérifie si deux points peuvent former un segment de ligne horizontale en comparant leurs coordonnées y. Si les coordonnées y sont les mêmes, il y a une ligne horizontale.

  • De même, tous les points d'une ligne verticale se trouvent sur la même coordonnée x. La fonction verticalLine vérifie si deux points peuvent former un segment de ligne verticale en comparant leurs coordonnées x. Si les coordonnées x sont les mêmes, il y a une ligne verticale.

  • Ensuite, nous avons la fonction countLineSegments , qui compte le nombre de segments de ligne horizontaux et verticaux. S'il y a des segments de ligne horizontaux ou verticaux, le nombre est incrémenté après chaque itération.

Exemple

#include <iostream>
using namespace std;

struct Coordinate {
   int x;
   int y;
};

// Helper functions
bool horizontalLine(Coordinate c1, Coordinate c2)  {
   return c1.y == c2.y;
}

bool verticalLine(Coordinate c1, Coordinate c2)  {
   return c1.x == c2.x;
}

int countLineSegments(Coordinate c1, Coordinate c2, Coordinate c3)  {
   int count = 0;
   // Check for horizontal segment
   if (horizontalLine(c1, c2) || horizontalLine(c1, c3) || horizontalLine(c2, c3))
      count++; 
   // Check for vertical segment
   if (verticalLine(c1, c2) || verticalLine(c1, c3) || verticalLine(c2, c3))
      count++; 
   return count;
}

int main() {
   Coordinate c1, c2, c3;
   c1.x = -1; c1.y = -5;
   c2.x = -2; c2.y = 3;
   c3.x = 4; c3.y = 3;

   int numSegments = countLineSegments(c1, c2, c3);

   std::cout << "Number of horizontal or vertical line segments: " << numSegments << std::endl;

   return 0;
}

Sortie

Number of horizontal or vertical line segments: 1

Conclusion

Dans cet article, nous explorons différentes manières de trouver le nombre de lignes horizontales et verticales pouvant relier 3 points différents dans le plan cartésien en utilisant C++. Nous avons déjà discuté de l'approche de déclaration if pour résoudre ce problème. Cependant, en raison du grand nombre d’itérations, la complexité temporelle augmente également. Nous pouvons résoudre ce problème efficacement en utilisant la fonction d'assistance, qui réduit le nombre d'itérations et donc la complexité temporelle.

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