如何在Corona SDK中精确地定位多边形?(相对于已知顶点 - 问题是它会创建自己的中心点)

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

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

例如:将特定形状放置在地图上,将其制作成多边形,然后想要在地图上定位它,但是如果不知道其 Corona 引擎创建的中心在哪里,无法精确进行定位。从 API 提取:“本地原点位于多边形的中心,锚点初始化为此本地原点。”

PS 实际上我在想是否应该使用线条并添加点来创建多边形,但也许在这种情况下无法添加背景色(?)

点赞
用户5016444
用户5016444

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)添加此偏移量到 coronapolygon 以将其放置在与原始多边形相同的位置。

应该可以工作,但我还没有测试它。让我知道。

2015-06-16 17:13:31
用户1523466
用户1523466

我在上面的解决方案上使用了一种变体,因为我无法让它起作用。本质上,我找到了每个维度中的最小顶点坐标,并将它们添加到多边形位置中。通过将它们与 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-23 10:15:13