LibGDX - 绘制一个等边三角形

时间:2015-03-22 20:27:11

标签: java math libgdx geometry trigonometry

我正在尝试使用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;

1 个答案:

答案 0 :(得分:1)

圆圈中有2pi弧度。要获得等边n面多边形,将2pi分成n个部分:(2 / n)pi。对于i = 0,1,...(n-1),多边形顶点将落在i(2 / n)pi处。由于你有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。