您好stackoverflow社区,
这是我问过calculating the area and position of dynamically formed rectangles 6个月的问题的延续。为此提供的解决方案很有效,但现在我想更进一步。
一些背景 - 我正在使用Cocos2D / Box2D进行益智游戏,玩家在屏幕上绘制线条。根据玩家的绘制,我想要计算出由于绘制线条而出现的多边形的区域和位置。
在下图中,黑色边框代表一个游戏区域,这将始终是相同的形状。灰线是玩家绘制的,并且总是笔直的。绿色广场是一个障碍。障碍物将是凸形。形成的多边形(在这种情况下为3)是蓝色区域,是我试图获得坐标和面积的形状。
我想我可以使用决定因素来计算多边形区域,但在此之前,我需要计算蓝色多边形的坐标,我不知道如何做到这一点。
我有两端的线(x,y)坐标,障碍物的坐标和黑色边框的角坐标。使用它们,是否可以计算出蓝色多边形的坐标,或者我是否采用了错误的方法?
更新 - 对duffymo的回应
感谢您的回答。为了进一步解释,提到的每个对象都被定义并封装在一个类中,即我有一个Line / Obstacle / PlayingArea对象。我的多边形对象封装在“Rectangle”对象中。这些对象中的每一个都有自己与之关联的属性,例如坐标/区域/ ID /状态等......
为了跟踪所有对象,我有一个过度看见的单例对象,它将所有的Line对象/ Obstacle对象保存在各自的数组中。通过这种方式,我可以循环说出所有的线条并且知道每个线路都是由玩家绘制的。
游戏有点像classic JezzBall所以我需要能够在用户绘制线条时创建这些多边形形状,因为多边形形状将用作检测特定区域是否包含球的方式。如果不是,则需要填补该区域。
答案 0 :(得分:0)
由于您已经拥有多边形的节点和边,我建议您使用contour integration计算质心,周长和面积。您可以使用格林定理将质心和面积表示为轮廓积分。
您可以使用Gaussian quadrature沿每条边进行分段整合。
快速准确;它将适用于任意复杂的多边形。
更新:Objective-C是一种面向对象的语言。我自己不知道,但我相信它是基于C和C ++的想法。既然如此,我建议你开始用对象来写更多内容。坐标数组?他们需要封装在一起。我建议使用Point抽象将点(id,x,y)封装在一起。创建一个包含点列表的网格。
听起来用户提供了Point之间的关系以形成多边形。从你的描述中不清楚,所以你在实施它时遇到麻烦并不奇怪。