java - LibGDX - 绘制等边三角形

标签 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;

最佳答案

一个圆有 2pi 弧度。要得到等边n边多边形,请将2pi分成n block :(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。但使用循环可能比对这些值进行硬编码更容易。

此外,如果您希望边缘具有给定的线长,则必须按 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。

关于java - LibGDX - 绘制等边三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199458/

相关文章:

java - 如何从 WEB-INF 文件夹之外的文件夹中读取文件?

iphone - 在与中心点成给定角度的直线相交的 UIView 矩形上找到 CGPoint

快速准确计算double的小数指数

java - 当相机平移时, Sprite 不会跟随 box2d 主体,但如果相机在 libgdx 中是静态的,则效果良好

java - 有ehcache jsp标签吗?

java - 如何使用来自 php 服务器的十六进制公钥在 Android 中使用 RSA 加密

java - 智能和自动按钮放置

java - Libgdx、碰撞、2 个矩形、旋转、菜鸟

java - 如果关闭资源失败,java 会做什么?

objective-c - 如何将数字范围从 0-200 转换为 1-5 范围