我有一个相当复杂的几何问题我需要解决,我想知道是否有人能指出我的资源来解决它。
我有一个由垂直和水平喜欢组成的不规则形状。它由一系列x,y点顺时针方向描述以形成路径。最后一个点连接到第一个点以形成形状的边界。没有一条线相互交叉。当我在屏幕上绘制形状时,我沿着Y轴使用经典扫描线算法将形状转换为我填写的一系列矩形。
但是现在我希望用户能够通过使用水平或垂直线再次绘制从边界上的一个点到边界上的另一个点的路径将形状切成两部分。在图中,用户从1开始绘制,最后在2处进行切片。
所以这里有几个我要削减的事情的例子。使用用户绘制的红色显示的切割路径将原始形状切割成A部分和B部分。请注意,不能保证用户将按照我的区域顺时针方向切割(即下面的1和2可以反转),所以我必须处理它。
该线条将完全包含在边界形状内,并且不会越过自身。也就是说,当我用路径切割形状时,它将产生恰好2个新形状。
大声思考我认为伪代码可能是这样的:
我认为这可能有用,但显然如果有实际的代码已经这样做会更容易!
答案 0 :(得分:1)
我不知道那里的代码已经完成了工作。
你实际上需要为两个新形状中的一个反转切割路径,而不是另一个形状反转。 (如果你所说的所有顺时针方向的形状都是正确的话。)我认为最简单的方法是看看你想要为每个形状采用哪条路径:(1)从UI交互中你会知道在哪里切割路径的形状; (2a)从切割路径的一端开始,顺时针走动形状直到你撞到另一端,然后沿着切割路径回到第一端,给你一个形状; (2b)现在从原始端开始,沿着另一个方向的切割路径,顺时针绕着形状走,直到你回到原始的切割路径端点,给你另一个形状。
除此之外,你的伪代码看起来还不错。