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[j]=a.nextInt(200);
// B[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[0]-A[0])*(B[j][1]-A[j][1])-(B[1]-A[1])*(B[j][0]-A[j][0]);
if(X!=0)
{
Y = (A[1]-A[j][1])*(B[j][0]-A[j][0])-(A[0]-A[j][0])*(B[j][1]-A[j][1]);
U = (A[1]-A[j][1])*(B[0]-A[0])-(A[0]-A[j][0])*(B[1]-A[1]);
double r = Y / X;
double s = U / X;
if (r >= 0 && r <= 1 && s >= 0 && s <= 1)
//Y = (k-A[0])*(B[1]-A[1])/(B[0]-A[0])+A[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[0], A[j][1], B[j][0], B[1]);
}
}
}
}
Пересечение линий
Я написал алгоритм, вроде правильно, но не могу сделать правильно прорисовку линий. Рисуется только вторая(
Вот что я написал:
Код:
Код:
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[j]=a.nextInt(200);
B[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[0]-A[0])*(B[j][1]-A[j][1])-(B[1]-A[1])*(B[j][0]-A[j][0]);
if(X!=0)
{
Y = (A[1]-A[j][1])*(B[j][0]-A[j][0])-(A[0]-A[j][0])*(B[j][1]-A[j][1]);
U = (A[1]-A[j][1])*(B[0]-A[0])-(A[0]-A[j][0])*(B[1]-A[1]);
double r = Y / X;
double s = U / X;
if (r >= 0 && r <= 1 && s >= 0 && s <= 1)
{
//Y = (k-A[0])*(B[1]-A[1])/(B[0]-A[0])+A[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[0], A[1], B[0], B[1]);
g.drawLine(A[j][0], A[j][1], B[j][0], B[j][1]);
}
}
}
}
}
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[j]=a.nextInt(200);
B[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[0]-A[0])*(B[j][1]-A[j][1])-(B[1]-A[1])*(B[j][0]-A[j][0]);
if(X!=0)
{
Y = (A[1]-A[j][1])*(B[j][0]-A[j][0])-(A[0]-A[j][0])*(B[j][1]-A[j][1]);
U = (A[1]-A[j][1])*(B[0]-A[0])-(A[0]-A[j][0])*(B[1]-A[1]);
double r = Y / X;
double s = U / X;
if (r >= 0 && r <= 1 && s >= 0 && s <= 1)
{
//Y = (k-A[0])*(B[1]-A[1])/(B[0]-A[0])+A[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[0], A[1], B[0], B[1]);
g.drawLine(A[j][0], A[j][1], B[j][0], B[j][1]);
}
}
}
}
}
Помогите найти ошибку!!!