Java线的交点,并找到其坐标及其在右边或下面的最近邻居

时间:2018-08-17 13:56:37

标签: java intersection nearest-neighbor

我正在努力寻找一种方法来获取坐标x和坐标Y的最接近点的右侧和下方(如果存在),否则将什么也不会打印。

public class CheckForIntersection {

    double x1, x2, x3, x4, y1, y2, y3, y4, a, b, c, d, e, f, checkLinear, x, y;

    CheckForIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
        this.x3 = x3;
        this.y3 = y3;
        this.x4 = x4;
        this.y4 = y4;

        checkintersection();
    }

    public double getx() {
        return x;
    }

    public double gety() {
        return y;
    }

    public void checkintersection() {
        a = y1 - y2;
        b = -(x1 - x2);
        c = y3 - y4;
        d = -(x3 - x4);
        e = (y1 - y2) * x1 - (x1 - x2) * y1;
        f = (y3 - y4) * x3 - (x3 - x4) * y3;

        checkLinear = (a * d) - (b * c);

        x = ((e * d) - (b * f)) / checkLinear;
        y = ((a * f) - (e * c)) / checkLinear;

        System.out.println(a + " " + b + " " + c + " " + d + " " + e + " " + f);
        checknearestNeighbour(x, y);

        if (checkLinear == 0) {
            System.out.println("the intersection is parallel");
        } else {
            System.out.println("X coordinate:" + x + " X coordinate:" + y);
        }
    }
}

以下参数的结果应为2.88889、1.1111。

1 个答案:

答案 0 :(得分:2)

我认为“网格”是指这样的结构:

x - x - x
|   |   |   
x - o - o
|   |   |     
o - x - x                                                                                                                  

其中x =节点&o =无节点 (假设所有交叉点之间的距离相等)

  1. 要确定所有音符的坐标,您需要一个起点(坐标原点)。 可以在网格的左上方或左下方,由您决定。

  2. 然后,您可以逐行循环(一个循环为水平线,一个循环为每行中的元素),在每个相交处检查是否有节点(此ofc需要一种确定相交的方法) 。由于它是一个网格(相同的距离),因此您可以为步骤运行一个简单的计数器,并确定一行中每个交叉点的坐标。如果找到节点,请存储这些信息

  3. 您现在可以在遍历网格以提高效率时回答问题,也可以在收集信息后分步进行。