gpt4 book ai didi

java - 在 OpenGL 中绕点旋转一条线

转载 作者:行者123 更新时间:2023-12-01 08:59:49 27 4
gpt4 key购买 nike

我正在尝试围绕非 (0,0) 的点旋转一条线。

对于这个程序,我尝试不使用glRotatef()并尝试使用三角学。然而,线的长度总是会改变。

有什么建议吗?

这是我的代码:

public class World implements GLEventListener, KeyListener
{
double xOne = 0.1;
double yOne = 0.1;
double xTwo = 0;
double yTwo = 0.01;

double i = 220.987;

public World()
{

}

public void init(GLAutoDrawable gld)
{
Animator theAnimator = new Animator(gld);
theAnimator.start();
}

public void display(GLAutoDrawable gld)
{
GL gl = gld.getGL();
gl.glEnable(gl.GL_BLEND);
gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

gl.glBegin(gl.GL_LINES);
gl.glColor3d(1,0,0);
gl.glVertex2d(xOne ,yOne);
gl.glColor3d(0,0,1);
gl.glVertex2d(xTwo, yTwo);
gl.glEnd();

gl.glFlush();
//UPDATE
}

public void reshape(GLAutoDrawable gLAutoDrawable, int _int, int _int2, int _int3, int _int4)
{

}

public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean _boolean, boolean _boolean2)
{

}

public void keyTyped(KeyEvent ke)
{

}

public void keyPressed(KeyEvent ke)
{
if(ke.getKeyCode() == KeyEvent.VK_SPACE)
{
xTwo = (Math.cos(Math.toRadians(i))+xOne);
yTwo = (Math.sin(Math.toRadians(i))+yOne);
i++;
}
}

public void keyReleased(KeyEvent ke)
{

}
}

顺便说一下,(xOne, yOne) 是驻点

最佳答案

通常,您可以通过平移到 (0,0)、围绕 (0,0) 旋转,然后平移回来来完成此操作。所以这是一个 3 步过程:

  1. 从您的分数中减去 (xOne,yOne)。
  2. 使用三角函数绕 (0,0) 旋转。 (我假设您已经知道如何执行此操作,或者您可以查找它。)
  3. 再次将 (xOne,yOne) 添加回您的积分。

就您而言,我认为您的代码已经几乎是正确的。您缺少的是乘以线的长度。使用距离公式计算 (xOne,yOne) 和 (xTwo,yTwo) 之间的距离,并将该距离乘以正弦和余弦值,然后再添加 xOne 和 yOne。

关于java - 在 OpenGL 中绕点旋转一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com