你的问题并没有简单的解决方案,特别是涉及到曲线(beziers和splines)时更加复杂。除了多边形剪辑的复杂性之外,还存在重建剪切曲线的巨大挑战(假设您希望剪辑结果保持为beziers和splines而不仅仅是“平坦”的线条近似)。我最近发布了我的多边形剪辑库“Clipper”的beta更新*,它可以进行线-多边形和线-线剪辑(其中线也可以是曲线)。然而,尽管主要库是用Delphi、C++和C#编写的,但新的beta代码目前只有Delphi版本,可能对您没有帮助。不过,如果您查看代码,您会明白为什么我说没有“简单”的解决方案。编辑于2011年7月15日:这个“更新”从未超出这个beta版本,并且现在只是一个“概念验证”。它现在基于我Clipper库的旧版本,需要进行重大改写才能得以维护和扩展。(在某个阶段,我可能会重新审视它,但目前我打算进一步改进核心库。)尽管如此,这个“概念验证”的Delphi代码可以在这里下载。
第一步:找到所有交点,顺序不限。对于多边形,需求出红线和每个线段的交点。只要解决两个线性方程组的问题。如果解被约束在多边形线段范围内,则存在交点。 第二步:按照位置在红线上的顺序对已找到的点进行排序。你知道第一个和最后一个点是外部点。每个点都会改变“外部-内部-外部”的状态。在相邻的两个外部点之间,你有内部线段(绿色)。编辑:不准确...从点#0,线段#0开始,#1是内部,下一个是外部,下一个又是内部,如此类推。 如果区域不是多边形,而是由某个隐式函数给出的,则需要找到该函数等于红线的位置(具体方法取决于函数)。