我玩过Area.intersect(),并且想知道是否有一种方法可以使用Path2D创建类似此方法的方法,因为我注意到将Path2D用作形状时性能会有所提高。换句话说,取大Path2D的一部分,然后从该部分创建一个较小的Path2D。

地图图

游戏中视图


注意:使用下面的哈希图,我根据每个“对象”将平铺的形状渲染到查看区域,在这种情况下,图像将是不同的图像类型:海洋,草丛,黑曜石,岩石,沙滩和泥土...

LinkedHashMap<Point, LinkedHashMap<Object, Path2D.Double>>


编辑:每种图像类型都有其自己的整个地图区域,这是10000px x 100000px我相交的图块是100px x 100px,将其作为给定类型按Path2D.Double的方式推入链接的哈希地图中,并呈现到屏幕上按当前查看区域中的点。

最佳答案

目前尚不清楚您使用的是哪个SDK提供Area.intersect()。但是,在打算与您的路径相交的地方分离,这可能是一个复杂的问题-请注意,与多边形相交的path2D可能会变成多条路径!

但是,存在一些用于将路径与多边形相交的算法,例如Cyrus-BeckSutherland-Cohen

我在Java中找到了Cohen-Sutherland的这段代码:

http://worldofenggcodes.blogspot.co.il/2013/10/cohen-sutherland-line-clipping-algorithm.html

尽管您可能需要将代码提取到更可用的函数中,但这似乎还可以。尽管我只能找到伪代码,但Cyrus-Beck可能是一个更好的选择:

http://www.moreprocess.com/computer-graphics/cyrus-beck-line-clipping-algorithm

一旦实现了两者之一,就需要将其应用于路径中的每一行,以获取与正方形相交的新线列表。

08-28 19:01