Пересечение линий

Модератор: Absurd

Ответить
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

18 дек 2010, 21:01

Определить класс Line дляпрямых линий, проходящих через точки А(х1,у1) и В(х2,у2).Создать массив обьектов класса Line. Определить какие из прямых линий пересекаются а какие совпадают. Нарисовать все пересекающиеся прямые.
Я написал алгоритм, вроде правильно, но не могу сделать правильно прорисовку линий. Рисуется только вторая(
Вот что я написал:

Код: Выделить всё

	public class Line extends Applet{

	int N = 2;
	int[][] A = new int[N][2]; 
	int[][] B = new int[N][2];
	int Y,U,X;
	
	Random a = new Random();
	Date d = new Date(4);
	
	public void paint(Graphics g)
	{
		
		A[0][0] = 1; A[0][1] = 1;
		A[1][0] = 100; A[1][1] = 1;
		//A[2][0] = 1; A[2][1] = 1;
		//A[3][0] = 1; A[3][1] = 1;
		//A[4][0] = 1; A[4][1] = 1;
		B[0][0] = 500; B[0][1] = 500;
		B[1][0] = 2000; B[1][1] = 1000;
		//B[2][0] = 5; B[2][1] = 5;
		//B[3][0] = 5; B[3][1] = 5;
		//B[4][0] = 5; B[4][1] = 5;
		
		
		
		//for(int i=0; i<N;i++)
			//for(int j=0; j<=1;j++)
			//{
			//	A[i][j]=a.nextInt(200);
			//	B[i][j]=a.nextInt(100);
			//}
		
		for(int i=0; i<N;i++)
			for(int j=i+1; j<N;j++)
				//for(int k=0; k<N;k++)
				{
					
					X = (B[i][0]-A[i][0])*(B[j][1]-A[j][1])-(B[i][1]-A[i][1])*(B[j][0]-A[j][0]);
					if(X!=0)
					{
					Y = (A[i][1]-A[j][1])*(B[j][0]-A[j][0])-(A[i][0]-A[j][0])*(B[j][1]-A[j][1]);
					U = (A[i][1]-A[j][1])*(B[i][0]-A[i][0])-(A[i][0]-A[j][0])*(B[i][1]-A[i][1]);
					double r = Y / X;
		            double s = U / X;

		            if (r >= 0 && r <= 1 && s >= 0 && s <= 1)

					//Y = (k-A[i][0])*(B[i][1]-A[i][1])/(B[i][0]-A[i][0])+A[i][1];
					//U = (k-A[j][0])*(B[j][1]-A[j][1])/(B[j][0]-A[j][0])+A[j][1];
					//if(Y==U)
						for(int h=0; h<N;h++)
							g.drawLine(A[i][0], A[j][1], B[j][0], B[i][1]);
				
					}
				}
	}
}
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

19 дек 2010, 09:20

Код: Выделить всё

	public class Line extends Applet{

	int N = 5;
	int[][] A = new int[N][2]; 
	int[][] B = new int[N][2];
	int Y,U,X;
	
	Random a = new Random();
	Date d = new Date(4);
	
	public void paint(Graphics g)
	{
		
		//A[0][0] = 0; A[0][1] = 0;
		//A[1][0] = 0; A[1][1] = 50;
		//A[2][0] = 500; A[2][1] = 500;
		//A[3][0] = 1000; A[3][1] = 100;
		//A[4][0] = 1; A[4][1] = 1000;
		//B[0][0] = 500; B[0][1] = 500;
		//B[1][0] = 2000; B[1][1] = 1000;
		//B[2][0] = 600; B[2][1] = 600;
		//B[3][0] = 500; B[3][1] = 5000;
		//B[4][0] = 100; B[4][1] = 1000;
		
		
		
		for(int i=0; i<N;i++)
			for(int j=0; j<=1;j++)
			{
				A[i][j]=a.nextInt(200);
				B[i][j]=a.nextInt(100);
			}
		
		for(int i=0; i<N;i++)
			for(int j=i+1; j<N;j++)
				//for(int k=0; k<N;k++)
				{
					
					X = (B[i][0]-A[i][0])*(B[j][1]-A[j][1])-(B[i][1]-A[i][1])*(B[j][0]-A[j][0]);
					if(X!=0)
					{
					Y = (A[i][1]-A[j][1])*(B[j][0]-A[j][0])-(A[i][0]-A[j][0])*(B[j][1]-A[j][1]);
					U = (A[i][1]-A[j][1])*(B[i][0]-A[i][0])-(A[i][0]-A[j][0])*(B[i][1]-A[i][1]);
					double r = Y / X;
		            double s = U / X;

		            if (r >= 0 && r <= 1 && s >= 0 && s <= 1)
		            {
					//Y = (k-A[i][0])*(B[i][1]-A[i][1])/(B[i][0]-A[i][0])+A[i][1];
					//U = (k-A[j][0])*(B[j][1]-A[j][1])/(B[j][0]-A[j][0])+A[j][1];
					//if(Y==U)
							g.drawLine(A[i][0], A[i][1], B[i][0], B[i][1]);
		            		g.drawLine(A[j][0], A[j][1], B[j][0], B[j][1]);
		            }
					}
				}
	}
}
Помогите найти ошибку!!!
Ответить