在 Corona SDK 中准确定位多边形? (相对于已知顶点 - 问题是它创建了自己的中心
position polygon accurately in Corona SDK? (relative to known vertices - issue is it creates it own centre
问题:如何相对于已知顶点之一定位多边形?
换句话说,我如何计算自动生成的多边形中心相对于已知顶点之一(即在路径中使用)的位置?
例如图像在您制作多边形的地图上放置一个特定的形状,然后您想要将其定位在地图上,但是如果不知道 Corona 引擎创建的中心在哪里,您将无法准确地做到这一点。摘自 API:"The local origin is at the center of the polygon and the anchor point is initialized to this local origin."
PS 其实想知道我是否应该使用一条线并附加点来有效地创建一个多边形,但是在这种情况下也许你不能添加背景颜色(?)
corona计算的中心就是多边形边界框的中心。
我假设你有一个 table,你的多边形的所有点都是这样存储的:
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) 将此偏移量添加到电晕多边形以将其放置在与原始多边形相同的位置。
机器人应该可以工作我还没有测试过。让我知道。
我在上面的解决方案中使用了一个变体,因为我无法让它工作。基本上我找到了每个维度中的最小顶点坐标并将它们添加到多边形位置。通过将它们与 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)
问题:如何相对于已知顶点之一定位多边形?
换句话说,我如何计算自动生成的多边形中心相对于已知顶点之一(即在路径中使用)的位置?
例如图像在您制作多边形的地图上放置一个特定的形状,然后您想要将其定位在地图上,但是如果不知道 Corona 引擎创建的中心在哪里,您将无法准确地做到这一点。摘自 API:"The local origin is at the center of the polygon and the anchor point is initialized to this local origin."
PS 其实想知道我是否应该使用一条线并附加点来有效地创建一个多边形,但是在这种情况下也许你不能添加背景颜色(?)
corona计算的中心就是多边形边界框的中心。
我假设你有一个 table,你的多边形的所有点都是这样存储的:
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) 将此偏移量添加到电晕多边形以将其放置在与原始多边形相同的位置。
机器人应该可以工作我还没有测试过。让我知道。
我在上面的解决方案中使用了一个变体,因为我无法让它工作。基本上我找到了每个维度中的最小顶点坐标并将它们添加到多边形位置。通过将它们与 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)