Istnieje wiele pytań na temat przecięć między segmentami linii tutaj w stackowerflow i tutaj jest jeszcze jeden! Przepraszamy, ale potrzebuję pomocy, aby zrozumieć, jak obliczyć skrzyżowania. Przeczytałem kilka pytań tutaj i przyjrzałem się kilku przykładom na innych stronach internetowych, ale nadal jestem zdezorientowany i nie rozumiem tego! Nie lubię kopiować i wklejać kodu bez działania.Obliczanie przecięć między segmentami linii
Do tej pory wiem, że zamierzam porównać punkty każdego segmentu linii, jak Ax, Ay, Bx, By, Cx, Cy, Dx, Dy. Czy ktoś mógłby mi wyjaśnić, co mam zamiar obliczyć, jaki byłby wynik obliczeń, gdyby istniało skrzyżowanie?
To jeden z kodu przykładowego, który widziałem. Chyba nie potrzebuję punktu przecięcia, żeby wiedzieć, czy linie przecinają się, czy nie.
public static Point lineIntersect(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
double denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
if (denom == 0.0) { // Lines are parallel.
return null;
}
double ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3))/denom;
double ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3))/denom;
if (ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f) {
// Get the intersection point.
return new Point((int) (x1 + ua*(x2 - x1)), (int) (y1 + ua*(y2 - y1)));
}
return null;
}
Czy muszę również obliczyć jakąś medianę, jak w tym przykładzie kodu?
For lines through points (x0,y0) and (x1,y1), let xm = (x0+x1)/2, ym = (y0+y1)/2 (median of line segment).
Then a = (y1-y0) and b = (x0-x1).
If you evaluate c = a(x-xm)+b(y-ym), c=0 for (x,y) on the line, and the sign(c) tells you which side a point is on
Czy twój punkt jest liczbą całkowitą lub zmiennoprzecinkową? –