使用多边形相交和修剪线条

时间:2014-06-06 18:49:46

标签: algorithm geometry line polygon intersection

我已经定义了Polygon。我想要交叉并修剪其他Lines的列表与此多边形的Edges(此处为白色矩形),以便行的端点仅限于多边形的内部。

目前,我正在将每条青色线与多边形的边缘相交,这为我提供了交点。但问题是我不知道如何修剪它们。我知道我需要将每条相交线(青色线)的X1Y1X2Y2更改为交叉点。但我不知道该怎么做。

让我以这种方式解释。青色线与多边形的一个边相交,现在我需要将青色线的端点移动到交点以模拟右边的边缘? 我需要移动哪个端点?我在这里有点迷失。

public class Polygon
{
    public List<Line>() Edges;
}

public class Line
{
    public double X1;
    public double X2;
    public double Y1;
    public double Y2;
}

var listOfIntersectingLines = new List<Line>() {L1, L2, ... };

var ListOfLinesLimitedToPolygon = ?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

当你交叉两个没有交点的部分时,你的函数应该返回null。例如:在第一张图片中,从底部开始的第4行不与矩形的左边缘或顶边缘相交,它只与底边和右边相交。如果选择青色线,并将其与多边形的所有边相交,则始终会得到2个或0个交叉点。如果你得到2,那么这2个点就是修剪青色线的终点。如果得到0,则表示青色线在多边形之外。

可能出现的问题: 1.边缘与青色线重叠。您必须决定是否要保留此行,并相应地调整交叉点功能。 边缘经过一个角落。处理它的最简单方法是返回一个交叉点,如果该行转到&#34;第一个&#34;边缘的端点,但如果它越过第二个端点则返回null。由于您的多边形可能是从点到点定义的,因此它确保在每个角落只有一条边可以相交。