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

Тема в разделе "Java", создана пользователем pastorixx, 18 дек 2010.

  1. pastorixx

    pastorixx Active Member

    Регистрация:
    7 май 2010
    Сообщения:
    26
    Симпатии:
    0
    Определить класс Line дляпрямых линий, проходящих через точки А(х1,у1) и В(х2,у2).Создать массив обьектов класса Line. Определить какие из прямых линий пересекаются а какие совпадают. Нарисовать все пересекающиеся прямые.
    Я написал алгоритм, вроде правильно, но не могу сделать правильно прорисовку линий. Рисуется только вторая(
    Вот что я написал:
    Код (Text):
        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]);

    }
    }
    }
    }
     
  2. pastorixx

    pastorixx Active Member

    Регистрация:
    7 май 2010
    Сообщения:
    26
    Симпатии:
    0
    Код (C++):
        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]);
    }
    }
    }
    }
    }
    Алгоритм косячит где то, помогите найти ошибку!!!
     
Загрузка...
Похожие Темы - Пересечение линий
  1. MicRaiS
    Ответов:
    1
    Просмотров:
    1.439
  2. DNT
    Ответов:
    11
    Просмотров:
    4.743
  3. pbnoob
    Ответов:
    2
    Просмотров:
    3.181

Поделиться этой страницей