Algorithm 在一组线段中查找所有交点?

Algorithm 在一组线段中查找所有交点?,algorithm,geometry,big-o,Algorithm,Geometry,Big O,我有一个对象数组(线)和一个返回真/假的二进制操作(交集)。 蛮力是在嵌套的for循环上复制数组 for (Line line : linesArray) { for (int j = 0; j < linesArray.length; j++) { if (line.isIntersecting(linesArray[j])) { Point intersection = line.inter

我有一个对象数组(线)和一个返回真/假的二进制操作(交集)。 蛮力是在嵌套的for循环上复制数组

for (Line line : linesArray) {
            for (int j = 0; j < linesArray.length; j++) {
                if (line.isIntersecting(linesArray[j])) {
                    Point intersection = line.intersectionWith(linesArray[j]);
                    d.drawCircle(intersection.getXInt(), intersection.getYInt(), 3);
                    d.fillCircle(intersection.getXInt(), intersection.getYInt(), 3);
                }
            }
        }
for(行:linesArray){
对于(int j=0;j
但是,顺序并不重要,所以我考虑生成一个大小为2的子集,并检查每个子集,但从复杂的角度来看,它似乎并没有更好的效果


是否有一个有效的(运行时间)来执行此操作

枚举大小为2的所有子集并检查每个子集并不是对现有算法的改进,这是正确的。事实上,这本质上只是对你的算法的一种重述

有更快的算法来解决在线段集合中查找所有交点的问题。其中最著名的是,它的工作原理是根据线段的x坐标对线段进行排序,并从左到右在点上扫掠一条直线。它在时间O((n+k)log n)中工作,其中n是线段数,k是交点数

还有一些更现代的算法可以更快地解决这个问题,但这可能是一个很好的起点


希望这有帮助

枚举大小为2的所有子集并检查每个子集并不是对现有算法的改进,这是正确的。事实上,这本质上只是对你的算法的一种重述

有更快的算法来解决在线段集合中查找所有交点的问题。其中最著名的是,它的工作原理是根据线段的x坐标对线段进行排序,并从左到右在点上扫掠一条直线。它在时间O((n+k)log n)中工作,其中n是线段数,k是交点数

还有一些更现代的算法可以更快地解决这个问题,但这可能是一个很好的起点


希望这有帮助

你的输入和输出是什么?你的输入和输出是什么?