algorithm - 与多边形相交并修剪线

标签 algorithm geometry line polygon intersection

我定义了一个多边形。我想将其他 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

最佳答案

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

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

关于algorithm - 与多边形相交并修剪线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088749/

相关文章:

c++ - 求 1 的总数

algorithm - 如何在不改变其路径或斜率的情况下重新缩放已知矢量

javascript - 如何在 Canvas 中绘制圆的下半部分

python - 如何在 Python 3 中使用 Turtle 绘制圆

colors - 用于调整 hline 属性(颜色、虚线)和/或表格中垂直线属性的 Latex 代码

python - 求解 Dijkstra 算法 - 通过两条边传递成本/双亲

java - A* 算法完成但返回次优路径

c++ - 如何在 C++ 程序中获取错误行号

algorithm - 在忽略背景的情况下生成对象的直方图

css - 如何获得用于导航的交替底部边框颜色