#1
23.04.2021 um 21:55 UhrZeilen 38 und 40 könnten vertauscht werden.
C# :: Aufgabe #390 :: Lösung #2
using System;
using static System.Console;
using System.Text;
Double[][] XY_Test = new Double[][] {
new double[] { 0, 0 }, // P1 (x1, y1)
new double[] { 1, 1 }, // P2 (x2, y2)
new double[] { 1, 1 }, // P3 (x3, y3)
new double[] {-10, 0 } // P4 (x4, y4)
};
WriteLine(Environment.NewLine + Intersection(XY_Test));
ReadKey();
static string ToMyString(Double[][] xy) {
StringBuilder sb = new();
for (var i = 0; i < xy.Length; i++) {
for (var j = 0; j < xy[i].Length; j++)
sb.Append($"{xy[i][j].ToString("F2"),6}");
sb.AppendLine();
}
return sb.ToString();
}
static bool Intersection(Double[][] xy) {
WriteLine(ToMyString(xy));
Double dx0 = xy[1][0] - xy[0][0]; WriteLine($"dx0 delta x L12 {dx0}"); //delta x L12
Double dy0 = xy[1][1] - xy[0][1]; WriteLine($"dy0 delta y L12 {dy0}"); //delta y L12
Double dx1 = xy[3][0] - xy[2][0]; WriteLine($"dx1 delta x L34 {dx1}"); //delta x L34
Double dy1 = xy[3][1] - xy[2][1]; WriteLine($"dy1 delta y L34 {dy1}"); //delta y L34
Double DX = xy[2][0] - xy[0][0];
Double DY = xy[2][1] - xy[0][1];
Double det = dy0 * dx1 - dy1 * dx0;
if (det == 0)
return false;
Double det1 = DY * dx1 - dy1 * DX;
Double det2 = dy0 * DY - DX * dx0;
WriteLine($"det {det} det1 {det1} det2 {det2}");
Double t1 = det1 / det;
Double t2 = det2 / det;
WriteLine($"t1 {t1.ToString("F2"),6} t2 {t2.ToString("F2"),6}");
return (t1 <= 1) && (t2 <= 1) && (t1 >= 0) && (t2 >= 0);
}
Kommentare:
hollst
Punkte: 13980
761 Aufgaben
132 Lösungen
117 Kommentare
hollst
Punkte: 13980
761 Aufgaben
132 Lösungen
117 Kommentare
hollst
Punkte: 13980
761 Aufgaben
132 Lösungen
117 Kommentare
Double det2 = DY * dx0 - dy0 * DX;