我正在尝试围绕不是(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)旋转并向后平移来实现此目的。因此,这是一个三步过程:


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


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

07-27 13:19