Swift 计算锚点SKSpriteNode的质心

Swift 计算锚点SKSpriteNode的质心,swift,sprite-kit,skspritenode,centroid,anchorpoint,Swift,Sprite Kit,Skspritenode,Centroid,Anchorpoint,我有一个SKSpriteNode,它是一个等边三角形的图像,我想把它的固定点设置在三角形的质心上,这样我就可以使它平稳地旋转并保持在中心。我已经用下面的代码计算了质心,但是这些位置是相对于场景的,所以我不确定如何将其转换为锚定点的精确小数(0到1之间) 我不确定我是否走在正确的轨道上,或者从这里走到哪里,也许我需要用另一种方式?任何帮助都将不胜感激,谢谢。如果我理解正确,这就是您现在看到的: 黄点表示三角形边界框的质心。透明的白色矩形表示三角形的边框。黑点是等边三角形的实际质心。现在,三角形的

我有一个SKSpriteNode,它是一个等边三角形的图像,我想把它的固定点设置在三角形的质心上,这样我就可以使它平稳地旋转并保持在中心。我已经用下面的代码计算了质心,但是这些位置是相对于场景的,所以我不确定如何将其转换为锚定点的精确小数(0到1之间)


我不确定我是否走在正确的轨道上,或者从这里走到哪里,也许我需要用另一种方式?任何帮助都将不胜感激,谢谢。

如果我理解正确,这就是您现在看到的:

黄点表示三角形边界框的质心。透明的白色矩形表示三角形的边框。黑点是等边三角形的实际质心。现在,三角形的纹理正在围绕黄点旋转?对吧?

但是你想要这样的东西:

let xa = -triangle.size.width / 2.0
let xb = triangle.size.width /  2.0
let xc = CGFloat(0.0)

let ya = -triangle.size.height / 2.0
let yb = -triangle.size.height / 2.0
let yc = triangle.size.height / 2.0

您想将纹理向上移动一点,使其看起来像三角形正在围绕其质心旋转

如果是这样,我通过计算三角形坐标空间中三角形的A点、B点和C点来实现,如下所示:

let xa = -triangle.size.width / 2.0
let xb = triangle.size.width /  2.0
let xc = CGFloat(0.0)

let ya = -triangle.size.height / 2.0
let yb = -triangle.size.height / 2.0
let yc = triangle.size.height / 2.0
然后,根据计算等边三角形质心的公式,我计算了三角形的质心:

let centroidX = (xa + xb + xc ) / 3.0
let centroidY = (ya + yb + yc) / 3.0     
let centroid = CGPoint(x: centroidX, y: centroidY)
并根据质心位置计算出新的锚点:

let anchorX =  centroidX / triangle.size.width
let anchorY = centroidY / triangle.size.height
let anchor = CGPoint(x: anchorX + triangle.anchorPoint.x, y: anchorY + triangle.anchorPoint.y)
这是我使用的图像: