我定义了一个多边形
。我想将其他 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 = ?
最佳答案
当您将两个没有交点的部分相交时,您的函数应返回 null。例如:在你的第一张图片中,从底部开始的第 4 条线不与矩形的左边缘或上边缘相交,它只与底部和右边缘相交。如果您选择一条青色线,并将其与多边形的所有边相交,您将始终获得 2 个或 0 个交点。如果你得到 2,那么这 2 个点就是你修剪的青色线的端点。如果得到 0,则表示青色线位于多边形之外。
可能出现的问题: 1. 边缘与青线重叠。您必须决定是否要保留这条线,并相应地调整您的相交功能。 2. 一条边穿过一个角。处理它的最简单方法是,如果直线到达边缘的“第一个”端点,则返回一个交点,但如果它穿过第二个端点,则返回 null。由于您的多边形可能是点对点定义的,因此它确保在每个角都只有 1 条边可以相交。
关于algorithm - 与多边形相交并修剪线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088749/