我已经定义了Polygon
。我想要交叉并修剪其他Lines
的列表与此多边形的Edges
(此处为白色矩形),以便行的端点仅限于多边形的内部。
目前,我正在将每条青色线与多边形的边缘相交,这为我提供了交点。但问题是我不知道如何修剪它们。我知道我需要将每条相交线(青色线)的X1
,Y1
,X2
和Y2
更改为交叉点。但我不知道该怎么做。
让我以这种方式解释。青色线与多边形的一个边相交,现在我需要将青色线的端点移动到交点以模拟右边的边缘? 我需要移动哪个端点?我在这里有点迷失。
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 = ?
答案 0 :(得分:1)
当你交叉两个没有交点的部分时,你的函数应该返回null。例如:在第一张图片中,从底部开始的第4行不与矩形的左边缘或顶边缘相交,它只与底边和右边相交。如果选择青色线,并将其与多边形的所有边相交,则始终会得到2个或0个交叉点。如果你得到2,那么这2个点就是修剪青色线的终点。如果得到0,则表示青色线在多边形之外。
可能出现的问题: 1.边缘与青色线重叠。您必须决定是否要保留此行,并相应地调整交叉点功能。 边缘经过一个角落。处理它的最简单方法是返回一个交叉点,如果该行转到&#34;第一个&#34;边缘的端点,但如果它越过第二个端点则返回null。由于您的多边形可能是从点到点定义的,因此它确保在每个角落只有一条边可以相交。