Nadesłany przez Tomasz Lubiński, 03 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Odcinki.java:
/**
* Program sprawdza, czy dwa odcinki sie przecinaja
* Program pobrano ze strony www.algorytm.org
* (c)2005 Tomasz Lubinski
*/
public class Odcinki {
// Ta funkcja sprawdza, czy punkt z należy do odcinka |xy|
private static int przynaleznosc(int xx, int xy, int yx, int yy, int zx, int zy) {
int det; //wyznacznik macierzy
det = xx*yy + yx*zy + zx*xy - zx*yy - xx*zy - yx*xy;
if (det!=0)
return 0 ;
else {
if ((Math.min(xx, yx) <= zx) && (zx <= Math.max(xx, yx)) &&
(Math.min(xy, yy) <= zy) && (zy <= Math.max(xy, yy)))
return 1;
else
return 0;
}
}
// wyznacznik macierzy
private static int det_matrix(int xx, int xy, int yx, int yy, int zx, int zy)
{
return (xx*yy + yx*zy + zx*xy - zx*yy - xx*zy - yx*xy);
}
public static void main(String[] args) {
int i,det; //wyznacznik macierzy
int x[] = new int[4]; //tablica wspolrzednych x punktow
int y[] = new int[4]; //tablica wspolrzednych y punktow
System.out.println("Wprowadzanie wspolrzednych punktow.");
System.out.println("Odcinek 1");
System.out.println("Punkt #1");
x[0] = Console.readInt("x=");
y[0] = Console.readInt("y=");
System.out.println("Punkt #2");
x[1] = Console.readInt("x=");
y[1] = Console.readInt("y=");
System.out.println("Odcinek 2");
System.out.println("Punkt #1");
x[2] = Console.readInt("x=");
y[2] = Console.readInt("y=");
System.out.println("Punkt #2");
x[3] = Console.readInt("x=");
y[3] = Console.readInt("y=");
// Sprawdzanie, czy jakiś punkt należy do drugiego odcinka
if (przynaleznosc(x[0], y[0], x[1], y[1], x[2], y[2])==1) System.out.println("Odcinki sie przecinaja- przynaleznosc"); else
if (przynaleznosc(x[0], y[0], x[1], y[1], x[3], y[3])==1) System.out.println("Odcinki sie przecinaja- przynaleznosc"); else
if (przynaleznosc(x[2], y[2], x[3], y[3], x[0], y[0])==1) System.out.println("Odcinki sie przecinaja- przynaleznosc"); else
if (przynaleznosc(x[2], y[2], x[3], y[3], x[1], y[1])==1) System.out.println("Odcinki sie przecinaja- przynaleznosc"); else
// zaden punkt nie nalezy do drugego odcinka
if ((det_matrix(x[0], y[0], x[1], y[1], x[2], y[2]))*(det_matrix(x[0], y[0], x[1], y[1], x[3], y[3]))>=0)
System.out.println("Odcinki sie NIE przecinaja"); else
if ((det_matrix(x[2], y[2], x[3], y[3], x[0], y[0]))*(det_matrix(x[2], y[2], x[3], y[3], x[1], y[1]))>=0)
System.out.println("Odcinki sie NIE przecinaja");
else //znaki wyznaczników sa równe
System.out.println("Odcinki sie przecinaja- punkty leza po przeciwnych stronach");
}
}

