java - 从几何组合的矩形创建直线多边形

标签 java geometry slick2d polygons

我到处搜索,但我似乎无法弄明白。我找到了很多关于直线/正交多边形分解的文章,但没有关于如何构造一个的文章。

我正在使用 Slick2D,并且我有一张瓦片 map 。我想通过用任何接触的矩形制作单个多边形(即并排组合瓷砖)来最大限度地减少我必须计算的碰撞量。

示例:https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png

我正在使用的是一个二维矩形数组。我可以遍历并弄清楚哪些是感人的等等,但出于某种原因我无法弄清楚为什么 .union() 不起作用(或者我可能不完全理解它?)。在 slick2D 中,它返回一个 Shape[],而在 awt 中,似乎有一个方法 .createUnion(),我在我的程序之外尝试过,但无论出于何种原因,它都不起作用。不过,出于明显的兼容性原因,我宁愿坚持使用 slick2D 类。

Slick2D 矩形类 - http://www.slick2d.org/javadoc/org/newdawn/slick/geom/Rectangle.html

我现在的方法很简单。只需使用两个方 block 进行测试,一旦我通过循环遍历它们使其正常工作,就会完全展开。

Polygon p = new Polygon();

//Calculate polygons
public void calcPoly(){
    //The blocking array is all rectangles, [0,0] and [1,0] are known to be touching.
    p = RectangleToPolygon(blocking[0][0]);
    p.union(RectangleToPolygon(blocking[1][0]));
}

我还有一个矩形到多边形的方法,以确保我一直在处理多边形。

public Polygon RectangleToPolygon(Rectangle rect) {
    Polygon result = new Polygon();
    result.addPoint(rect.getX(), rect.getY());
    result.addPoint(rect.getX() + rect.getWidth(), rect.getY());
    result.addPoint(rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight());
    result.addPoint(rect.getX(), rect.getY() + rect.getHeight());
    return result;
}

并不是我遇到了错误。这是事实,我没有得到任何改变。没有输出,没有错误,没有统一。这是看似简单的事情,但它不想让步。

最佳答案

我发现了我试图完成的事情的答案(部分地;我仍然得到一些奇怪的结果,但总的来说,它返回了我在一般意义上想要的东西)。

Slick2D 库中有一个类 Geom Utility,它也有一个 .union() 方法。如果并集有效,则返回一个 Shape 数组,大小为 1,如果形状保持分离,则返回 2。这与 Rectangle 和 Shape 类中的 .union() 不同(出于某些奇怪的原因......)

关于java - 从几何组合的矩形创建直线多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818451/

相关文章:

java - 如何获取txt到数组的特定长度

dynamic - 三个js顶点不更新

c++ - 确定圆弧中点的算法

java - 放大 Slick2D

java - log4j gradle配置-无法找到实现错误

java - 如何在 Slick2D 中的随机位置接触后重生矩形?

java - 如何退出 javafx 中的时间线?

java - 基于 spring mvc 的 REST API 的 Junit 代码生成工具/框架

java - 是否可以将 spring-mvc 中的嵌套映射映射到全局路径?

c# - 将一条线缩短若干像素