我目前正在尝试在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/