0

嗨 stackoverflow 社区,

这是我 6 个月提出的关于计算动态形成的矩形的面积和位置的问题的延续。为此提供的解决方案很有效,但现在我想更进一步。

一些背景 - 我正在使用 Cocos2D/Box2D 开发一款益智游戏,玩家在屏幕上画线。根据玩家绘制的情况,我想计算出由于绘制线而出现的多边形的区域和位置。

在下图中,黑色边框代表一个游戏区域,这将始终是相同的形状。灰线是玩家绘制的,并且总是笔直的。绿色方块是障碍物。障碍物将是凸形。形成的多边形(在本例中为 3 个)是蓝色区域,并且是我试图获取其坐标和区域的形状。

显示多边形游戏的游戏区域的图像

我想我可以用行列式计算出多边形的面积,但在此之前,我需要计算出蓝色多边形的坐标,我不知道该怎么做。

我有两端的线(x,y)坐标,障碍物的坐标和黑色边框的角坐标。使用这些,是否可以计算出蓝色多边形的坐标,还是我以错误的方式接近这个?

更新 - 对 duffymo 的回应

感谢您的回答。为了进一步解释,提到的每个对象都定义并封装在一个类中,即我有一个 Line/Obstacle/PlayingArea 对象。我的多边形对象被封装在一个“矩形”对象中。这些对象中的每一个都有它自己的属性与之相关联,例如它的坐标/区域/ID/状态等......

为了跟踪所有对象,我有一个监督单例对象,它将所有 Line 对象 / Obstacle 对象等保存在它们各自的数组中。这样,我可以遍历所有线条,并知道每条线条是否已被玩家绘制。

这个游戏有点像经典的 JezzBall,所以当用户画一条线时,我需要能够创建这些多边形,因为多边形将用作我检测特定区域是否包含球的方法。如果不是,则需要填充该区域。

4

1 回答 1

0

由于您已经拥有多边形的节点和边,我建议您使用等高线积分计算质心、周长和面积 您可以使用格林定理将质心和面积表示为等高线积分。

您可以使用高斯求积沿每条边进行分段积分。

它将快速而准确;它适用于任意复杂的多边形。

更新:Objective-C 是一种面向对象的语言。我自己不知道,但我相信它是基于 C 和 C++ 的想法。既然是这样,我建议您开始更多地根据对象编写内容。坐标数组?它们需要封装在一起。我建议将点(id,x,y)封装在一起的点抽象。制作一个包含点列表的网格。

听起来用户提供点之间的关系以形成多边形。从您的描述中不清楚,因此您在实施它时遇到困难也就不足为奇了。

于 2013-03-24T13:17:11.660 回答