0

问题:如何相对于其中一个已知顶点定位多边形?

换句话说,我如何计算自动生成的多边形中心相对于已知顶点之一(即在路径中使用)的位置?

例如,在您制作多边形的地图上放置特定形状的图像,然后您希望将其定位在地图上,但是如果不知道 Corona 引擎创建的中心在哪里,您就无法准确地做到这一点。从 API 中提取:“本地原点位于多边形的中心,并且锚点初始化为该本地原点。”

PS实际上想知道我是否应该使用一条线和附加点来有效地创建一个多边形,但是在这种情况下你可能不能添加背景颜色(?)

4

2 回答 2

4

corona计算的中心是多边形边界框的中心。

我假设您有一个表格,其中存储了多边形的所有点:

local polygon = {x1,y1,x2,y2,...,xn,yn}

1)找到原始点的边界框,遍历所有点;最小的 x 和最小的 y 值将为您提供左上角的坐标;最大的 x 和 y 值用于右下角;

local minX = -math.huge
local minY = -math.huge
local maxX = math.huge
local maxY = math.huge

for i=1, #polygon, 2 do
    local px = polygon[i]
    local py = polygon[i+1]
    if px > maxX then maxX = px end
    if py > maxY then maxY = py end
    if px < minX then minX = py end
    if py < minY then minY = py end
end

2)找到这个边界框的中心:

local centerX = (maxX - minX)/2
local centerY = (maxY - minY)/2

3)将中心点添加到左上角

local offsetX = centerX + minX
local offsetY = centerY + minY    

4)将此偏移量添加到电晕多边形以将其放置在与原始多边形相同的位置。

应该工作机器人我没有测试过。让我知道。

于 2015-06-16T17:13:31.833 回答
0

我在上面的解决方案中使用了一个变体,因为我无法让它工作。基本上我找到了每个维度中的最小顶点坐标并将它们添加到多边形位置。通过将它们与 contentBounds 位置进行比较,我可以计算出我认为的最小值与它们所在位置之间的差异。

local min_x = math.huge
local min_y = math.huge
for v = 1, #vertices, 2 do
    min_x = math.min(min_x, vertices[v])
    min_y = math.min(min_y, vertices[v + 1])
end

local poly = display.newPolygon(x, y, vertices)
local offset_x = (x + min_x) - poly.contentBounds.xMin
local offset_y = (x + min_y) - poly.contentBounds.yMin
poly:translate(offset_x, offset_y)
于 2019-05-23T10:15:13.597 回答