Maison > développement back-end > C++ > le corps du texte

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

WBOY
Libérer: 2023-08-25 16:49:12
avant
823 Les gens l'ont consulté

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

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

Sortie

Number of horizontal or vertical line segments: 1
Copier après la connexion
Copier après la connexion

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

Sortie

Number of horizontal or vertical line segments: 1
Copier après la connexion
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.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