algorytm.org

Implementacja w Java

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Przecinanie się odcinków - Implementacja w Java
Ocena użytkownikóww: *****  / 4
SłabyŚwietny
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");
	}
}
Dodaj komentarz