Algorithm 与多边形相交并修剪直线

Algorithm 与多边形相交并修剪直线,algorithm,geometry,line,polygon,intersection,Algorithm,Geometry,Line,Polygon,Intersection,我已经定义了一个多边形。我想与此多边形的边相交并修剪一列其他线(此处为白色矩形),以便将线的端点限制在多边形的内部 目前,我正在将每条青色线与多边形的边相交,这给了我交点。但问题是我不知道如何修剪它们。我知道我需要将每条相交线(青色线)的X1、Y1、X2和Y2更改为交点。但我不知道怎么做 让我这样解释。青色线与多边形的一条边相交,现在我需要将青色线的端点移动到交点以模拟修剪,对吗我需要移动哪个端点?我在这里有点迷路了 public class Polygon { public List&

我已经定义了一个
多边形
。我想与此多边形的
相交并修剪一列其他
线
(此处为白色矩形),以便将线的端点限制在多边形的内部

目前,我正在将每条青色线与多边形的边相交,这给了我交点。但问题是我不知道如何修剪它们。我知道我需要将每条相交线(青色线)的
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 = ?
公共类多边形
{
公共列表边缘;
}
公共班级线
{
公共双X1;
公共双X2;
公共双Y1;
公共双Y2;
}
var listOfIntersectingLines=新列表(){L1,L2,…};
var LISTOFLINESMITEDTOPOLYGON=?


当两个没有交点的截面相交时,函数应返回null。例如:在第一张图片中,从底部开始的第四条线不与矩形的左边缘或上边缘相交,它只与右边缘和下边缘相交。如果拾取一条青色线,并将其与多边形的所有边相交,则始终会得到2个或0个交点。如果得到2,则这2个点是修剪青色线的端点。如果为0,则表示青色线在多边形之外

可能的问题: 1.边与青色线重叠。您必须决定是否要保留这条线,并相应地调整相交函数。
2.边穿过角。处理此问题的最简单方法是,如果直线到达边的“第一个”端点,则返回一个相交点;如果直线穿过第二个端点,则返回null。由于多边形可能是逐点定义的,因此可以确保在每个角点上只有一条边可以相交。

多边形可以是凹的吗?@Kicsi否,它始终是凸的。如何计算交点?这是语言特征吗?如果您尝试将一条直线与一个截面相交,并且交点在该截面之外,那么函数返回什么?不,我已经编写了自己的函数,我正在将每条直线与边(线)相交最后一个问题:在修剪之前,青色线的一端是否可能位于多边形内部?我的问题是,其中一条线与边相交。现在,我如何知道相交线的哪一端需要移动到交点以模拟修剪?@Vahid首先找到给定青色线的所有交点(它将是0或2)。如果你找到了2个点,那么修剪线是从A到B还是从B到A就不再重要了(换句话说:同时设置2个端点)。谢谢Kicsi,现在我明白你的意思了。非常感谢。