我目前正在尝试在Java中绘制sin(x)图。作业指示要求我仅使用drawLine()作为绘制图形的方法。我似乎无法弄清楚如何正确设置y值。现在,我使用的是while循环,以便逐像素绘制线条,但无法设法使y值正确。到目前为止,这就是我所拥有的。

public class GraphJComponent extends JComponent {
public void paintComponent (Graphics g){
    Color axis = new Color(128, 128, 128);
    g.setColor(axis);

    int xShift = getWidth() / 50;
    int xShift2 = getWidth() / 100;
    int yShift = getHeight() / 10;
    int yShift2 = getHeight() / 17;

    g.drawLine(xShift,yShift,xShift,getHeight() - yShift);
    g.drawLine(xShift, getHeight() / 2, getWidth() - xShift, getHeight() / 2);

    g.drawString("0", xShift + xShift2, getHeight() / 2 + yShift2);
    g.drawString("1", xShift + xShift2, yShift - (yShift2 / 4));
    g.drawString("-1", xShift + xShift2, getHeight() - yShift + yShift2);
    g.drawString("\u03c0", getWidth() / 2, getHeight() / 2 + yShift2);
    g.drawString("2" + "\u03c0", getWidth() - (2 * xShift), getHeight() / 2 + yShift2);

    Color line = new Color (255, 0, 0);
    g.setColor(line);

    int x = xShift;
    int y = getHeight() / 2;




    while (x < getWidth() - xShift){
        x += 1;

        y = ??;


        g.drawLine(x, y, x, y);
    }










}


}

是的,我知道我可以整理或简化很多事情,就其本身而言,这只是一个粗略的草稿,一旦我完成所有工作,便会清理。
我尝试了多种方法来正确设置y值,最接近的结果是我画了一条对角线,它没有像应该的那样弯曲。如何正确设置y值,以便正确绘制[0,2pi]中的正弦图?

要尝试澄清问题:
问题在于更改我的drawLine函数的y值。基本上,我所做的工作不会正确地绘制sin函数,因为我只能想办法线性地增加它。它看起来像这样:

 /\
/  \  /
    \/


我有一个最终的问题:如何使它的y坐标与sin(x)图的正确y坐标成比例?换句话说,如何使它“不直”并像sin(x)图那样适当弯曲。

解决问题的另一种方法是如何用JFrame的像素适当地“缩放” sin(x)的y值?
谢谢您的宝贵时间,感谢您的帮助。

最佳答案

好吧,大卫·华莱士(David Wallace)在评论中提到您需要减少x增量,但是我认为您正在尝试在整个2*PI间隔内获得width

使用y = Math.sin(x*Math.PI*2/getWidth());可以缩放x值,然后再将它们插入sin函数。

关于java - 在Java中绘制sin(x)图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28757480/

10-09 06:15
查看更多