Ci sono un sacco di domande sulle intersezioni tra i segmenti di linea qui su Stackowerflow e eccone un'altra! Ci dispiace, ma ho bisogno di aiuto per capire come calcolare le intersezioni. Ho letto molte delle domande qui e ho visto diversi esempi su altri siti web, ma sono ancora confuso e non capisco! Non mi piace copiare e incollare il codice senza come funzionano le cose.Calcolo delle intersezioni tra i segmenti di linea
Finora so che ho intenzione di confrontare i punti di ogni segmento di linea come Ax, Ay, Bx, By, Cx, Cy, Dx, Dy. Qualcuno potrebbe spiegare per me quello che sto per calcolare, quale sarebbe il risultato del calcolo se c'è un'intersezione?
Questo è uno dei codici di esempio che ho visto. Immagino di non aver bisogno del punto di intersezione, solo per sapere se le linee si intersecano o meno.
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;
}
Devo anche calcolare un valore mediano come in questo esempio di codice?
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
Il tuo punto intero o fluttuante? –