LibGDX - Рисование равностороннего треугольника

1

Я пытаюсь сделать равносторонний треугольник, используя библиотеки 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;
  • 0
    Я исправил проблему, добавив 4.25 к радианам вместо 4, но я не уверен, почему это сработало.
Теги:
math
libgdx
geometry
trigonometry

1 ответ

1

В круге есть 2pi радианов. Чтобы получить равносторонний n-сторонний многоугольник, разделите 2pi на n частей: (2/n) pi. Вершины многоугольника будут падать на я (2/n) pi для я = 0,1,... (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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню