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"); } }