Heim  >  Artikel  >  Backend-Entwicklung  >  Die Anzahl der horizontalen oder vertikalen Liniensegmente, die zum Verbinden von drei Punkten erforderlich sind

Die Anzahl der horizontalen oder vertikalen Liniensegmente, die zum Verbinden von drei Punkten erforderlich sind

WBOY
WBOYnach vorne
2023-08-25 16:49:12762Durchsuche

Die Anzahl der horizontalen oder vertikalen Liniensegmente, die zum Verbinden von drei Punkten erforderlich sind

Angenommen, Sie möchten anhand von drei verschiedenen Punkten (oder Koordinaten) die Anzahl der horizontalen oder vertikalen Liniensegmente ermitteln, die durch die Verbindung dieser drei Punkte gebildet werden können. Solche Liniensegmente werden auch Polylinien genannt. Um dieses Problem zu lösen, benötigen Sie das Konzept der Computergeometrie. In diesem Artikel werden wir verschiedene Möglichkeiten zur Lösung dieses Problems in C++ diskutieren.

Eingabe- und Ausgabeszenarien

Angenommen, c1, c2 und c3 sind die Koordinaten von 3 Punkten auf der kartesischen Ebene. Die Anzahl der horizontalen oder vertikalen Liniensegmente, die diese drei Punkte verbinden, ist wie folgt.

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

Hinweis − Horizontale und vertikale Liniensegmente müssen an der Koordinatenachse ausgerichtet sein.

Verwenden Sie die If-Anweisung

Mit der if-Anweisung können wir prüfen, ob zwischen diesen drei Punkten eine horizontale oder vertikale Linie liegt.

  • Erstellen Sie eine Funktion, indem Sie c1.x mit c2.x, c1.x mit c3.x und c2.x und c3.x kombinieren. Wenn eine der beiden Bedingungen erfüllt ist, bedeutet dies, dass ein horizontales Liniensegment vorhanden ist und die Anzahl erhöht wird.

  • In ähnlicher Weise funktioniert diese Funktion durch die Kombination von c1.y mit c2.y, c1.y mit c3.y und c2.y und c3.y. Wenn eine der Bedingungen erfüllt ist, existiert das vertikale Liniensegment. Die Zahl erhöht sich erneut.

Beispiel

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

Ausgabe

Number of horizontal or vertical line segments: 1

Hinweis Wenn alle drei Punkte auf derselben Achse der kartesischen Ebene liegen, d. h. auf der das Ergebnis ist 2, andernfalls ist das Ergebnis 3.

Hilfsfunktionen nutzen

  • Hier können wir Hilfsfunktionen (horizontalLine und verticalLine) verwenden, um Liniensegmente zu berechnen.

  • Wir machen uns die Tatsache zunutze, dass im kartesischen System alle Punkte einer horizontalen Linie auf derselben y-Koordinate liegen. Die Funktion horizontalLine prüft, ob zwei Punkte ein horizontales Liniensegment bilden können, indem sie ihre y-Koordinaten vergleicht. Wenn die y-Koordinaten gleich sind, gibt es eine horizontale Linie.

  • Ebenso liegen alle Punkte einer vertikalen Linie auf derselben x-Koordinate. Die Funktion verticalLine prüft, ob zwei Punkte ein vertikales Liniensegment bilden können, indem sie ihre x-Koordinaten vergleicht. Wenn die x-Koordinaten gleich sind, gibt es eine vertikale Linie.

  • Als nächstes haben wir die Funktion countLineSegments , die die Anzahl der horizontalen und vertikalen Liniensegmente zählt. Wenn horizontale oder vertikale Liniensegmente vorhanden sind, wird die Anzahl nach jeder Iteration erhöht.

Beispiel

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

Ausgabe

Number of horizontal or vertical line segments: 1

Fazit

In diesem Artikel untersuchen wir verschiedene Möglichkeiten, um mit C++ die Anzahl der horizontalen und vertikalen Linien zu ermitteln, die drei verschiedene Punkte in der kartesischen Ebene verbinden können. Wir haben bereits den if-Anweisungsansatz zur Lösung dieses Problems besprochen. Aufgrund der großen Anzahl an Iterationen steigt allerdings auch die zeitliche Komplexität. Wir können dieses Problem effizient lösen, indem wir die Hilfsfunktion verwenden, die die Anzahl der Iterationen und damit die Zeitkomplexität reduziert.

Das obige ist der detaillierte Inhalt vonDie Anzahl der horizontalen oder vertikalen Liniensegmente, die zum Verbinden von drei Punkten erforderlich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen