Lua 将多边形准确地定位在网格中?(相对于已知顶点-问题是它会创建自己的中心。)

Lua 将多边形准确地定位在网格中?(相对于已知顶点-问题是它会创建自己的中心。),lua,polygon,coronasdk,anchorpoint,Lua,Polygon,Coronasdk,Anchorpoint,问题:如何相对于多边形的一个已知垂直点定位多边形 换句话说,我如何计算自动生成的多边形中心相对于已知顶点之一的位置(即在路径中使用) e、 g.将一个特定形状放置在一张你制作多边形的地图上,然后你想将其定位在地图上,但是如果你不知道它的中心在哪里,你就无法准确地进行定位。从API摘录:“局部原点位于多边形的中心,锚定点被初始化为该局部原点。” PS实际上想知道我是否应该使用一条线和附加点来有效地创建一个多边形,但是在这种情况下,您可能无法添加背景色(?)由corona计算的中心是多边形边界框的中

问题:如何相对于多边形的一个已知垂直点定位多边形

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

e、 g.将一个特定形状放置在一张你制作多边形的地图上,然后你想将其定位在地图上,但是如果你不知道它的中心在哪里,你就无法准确地进行定位。从API摘录:“局部原点位于多边形的中心,锚定点被初始化为该局部原点。”


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

由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
3) 将中心点添加到左上角点

local offsetX = centerX + minX
local offsetY = centerY + minY    
4) 将此偏移添加到corona多边形,以将其放置在与原始多边形相同的位置


我还没有测试过它。让我知道。

由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
3) 将中心点添加到左上角点

local offsetX = centerX + minX
local offsetY = centerY + minY    
4) 将此偏移添加到corona多边形,以将其放置在与原始多边形相同的位置


我还没有测试过它。让我知道。

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

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

谢谢,我试试看。我不认为你可以在事后给多边形添加点,对吗?所以位置/中心不应该再改变了?谢谢-我会试试的。我不认为你可以在事后给多边形添加点,对吗?那么位置/中心不应该再改变了?