LibGDX-绘制等边三角形



我正在尝试使用LibGDX库制作等边三角形,但我在几何/三角方面不是最好的。我离得很近,但一侧太长了,我不知道出了什么问题。

这些点相对于形状的中心。

    shapeX[0] = x + MathUtils.cos(radians) * Variables.lineLength;
    shapeY[0] = y + MathUtils.sin(radians) * Variables.lineLength;
    shapeX[1] = x + MathUtils.cos(radians - 4 * Variables.pi / (Variables.pi * 2)) * Variables.lineLength;
    shapeY[1] = y + MathUtils.sin(radians - 4 * Variables.pi / (Variables.pi * 2)) * Variables.lineLength;
    shapeX[2] = x + MathUtils.cos(radians + 4 * Variables.pi / (Variables.pi * 2)) * Variables.lineLength;
    shapeY[2] = y + MathUtils.sin(radians + 4 * Variables.pi / (Variables.pi * 2)) * Variables.lineLength;

圆中有2pi弧度。要得到一个等边n边多边形,请将2pi分成n个部分:(2/n)pi。对于i=0,1,多边形顶点将落在i(2/n)pi处,。。。(n-1)。由于n=3,因此需要0*2/3pi=0pi、1*2/3pi=2/3pi和2*2/3pi=4/3pi。但使用循环可能比硬编码这些值更容易。

此外,如果希望边具有给定的linelength,则必须按sqrt(3)/3缩放才能找到半径。为什么?由单位圆外接的等边三角形的边的长度为3/sqrt(3),因此用倒数缩放半径可以得到单位长度的边。结束这一切,

double radius = Math.sqrt(3) / 3 * Variables.lineLength;
for (int i = 0; i < 3; ++i) {
  double theta = 2 * Math.PI / 3 * i;
  shapeX[i] = x + radius * MathUtils.cos(theta);
  shapeY[i] = y + radius * MathUtils.sin(theta);
}

请注意,这会将第一个顶点放置在正x轴上。若要旋转多边形,请将所需偏移添加到theta。例如,要使第一个顶点位于正y轴上,请使用pi/2。

最新更新