C# :: Aufgabe #390 :: Lösung #4
4 Lösungen

#390
Schnittpunkt zweier Geraden endlicher Länge
Fortgeschrittener - C#
von hollst
- 20.04.2021 um 10:25 Uhr
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig vier unterschiedliche Punkte P1, P2, P3 und P4. Gedanklich verbinde man P1 und P2 mit einer geraden Linie L12 sowie P3 und P4 mit einer geraden Linie L34.
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!
#4

von JchrisP (60 Punkte)
- 15.07.2021 um 15:40 Uhr

namespace Schnittpunkt { class Point { public double X; public double Y; public Point(double x, double y) { X = x; Y = y; } } class Trace { public Point A; public Point B; public string Name; public Trace(string name, Point a, Point b) { A = a; B = b; Name = name; } } class Program { public static void IntersectControl(Trace a, Trace b) //Die eigentliche Funktion(Methode) "IntersectControl" { double m1 = (a.B.Y - a.A.Y) / (a.B.X - a.A.X); //Steigungsrgad von Trace a double m2 = (b.B.Y - b.A.Y) / (b.B.X - b.A.X); //Steigungsrgad von Trace b if (m1 == m2) Console.WriteLine($"Die beiden Strecken {a.Name} und {b.Name} haben den gleichen Steigungsgrad und daher haben sie keinen gemeinsamen Schnittpunkt"); if (m1 != m2) { double b1 = a.A.Y - (a.A.X * m1); //b (Y_Schnittpunkt) der Geraden, auf Trace a liegt double b2 = b.A.Y - (b.A.X * m2); //b (Y_Schnittpunkt) der Geraden, auf Trace b liegt double IntersectX = (b2 - b1) / (m1 - m2); //Koordinate X des Schnittpunktes berechnen double IntersectY = m1 * IntersectX + b1; //Koordinate Y des Schnittpunktes berechnen if ((IntersectX > a.A.X) && (IntersectX < b.A.X) && (IntersectX > b.B.X) && (IntersectX < a.B.X) && (IntersectY < a.A.Y) && (IntersectY > b.B.Y) && (IntersectY < b.A.Y) && (IntersectY > a.B.Y)) //Prüfen ob der Schnittpunkt der Geraden innerhalb der beiden Strecken liegt { Console.WriteLine($"Die beiden Strecken {a.Name} und {b.Name} haben einen gemeinsamen Schnittpunkt"); } else { Console.WriteLine($"Die beiden Strecken {a.Name} und {b.Name} haben keinen gemeinsamen Schnittpunkt"); } } } static void Main(string[] args) { //Point L12_P1 = new Point(4.5, 6.2); //Point L12_P2 = new Point(-2.7, -7.8); //Die Werte von L34 als L12 zum testen //Point L12_P1 = new Point(-10.77, 12.24); //eine Strecke ohne gemeinsamen Schnittpunkt //Point L12_P2 = new Point(-5.21, 6.53); Point L12_P1 = new Point(-4.5, 5.8); Point L12_P2 = new Point(3.1, -2); Point L34_P1 = new Point(4.5, 6.2); Point L34_P2 = new Point(-2.7, -7.8); Trace L12 = new Trace("L12",L12_P1, L12_P2); Trace L34 = new Trace("L34",L34_P1, L34_P2); IntersectControl(L12, L34); //Aufrufen der Funktion IntersectControl Console.ReadKey(); } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1