我目前正在尝试在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 x1 = xShift;
int y1 = getHeight() / 2;
int x2 = xShift;
int y2;
int yScale = getHeight() / 2;
int sinInput = 0;
while (sinInput <= 360){
x2 += (getWidth() / 360);
y2 = (yScale - ((int)(Math.sin(sinInput) * yScale)));
sinInput += 1;
g.drawLine(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
}
}
}
是的我知道有很多东西我可以整理或简化,这只是一个粗略的草案本身,一旦我有一切工作我会清理。 我已经尝试了多种方法来获得正确设置的y值,最接近我画出的是直线对角线,它没有像预期的那样弯曲。如何正确设置y值以便正确绘制[0,2pi]的sin图?
试图澄清问题: 问题在于更改drawLine函数的y值。基本上,我工作的东西不能正确地绘制sin函数,因为我只能想象它会逐渐增加它。它看起来像这样:
/\
/ \ /
\/
我的最终问题是:我怎样才能使我的y坐标与sin(x)图的正确y坐标一起缩放?换句话说,我怎样才能做到&#34; not-straight&#34;并且像sin(x)图一样适当弯曲。 感谢您的时间,感谢您的帮助。
我一直在玩的最新事物有点像这样:y坐标的值是通过缩放程度罪的价值并用某些因素操纵它来计算的。获得正确的像素坐标。我认为这是正确的方法,任何想法?
在此页面的底部,您可以看到最终结果应如何: http://nameless.cis.udel.edu/class_wiki/index.php/CISC181_S2015_Lab3
答案 0 :(得分:0)
尝试y = Math.sin(x)* 100; 并采取规模 1 = 100格 这样你可以采用小数。
答案 1 :(得分:0)
就像immibis指出的那样,Math.sin在弧度中占据一个角度。只需将度数转换为弧度,同时将其传递给Math.sin,这样可以解决您的问题。
Math.sin((sinInput * 2 * Math.PI) / 360)