2013-07-15 52 views
0

我正在寻找一波。我有这个至今:绘制波浪java

private void drawWave(int yPos, int xPos, int colour, int length, int amplitude, int alpha) { 
    int pixelY, pixelX; 

    for(int i = 0; i < length; i++) { 
     pixelX = xPos + i; 
     pixelY = (int) (yPos - Math.sin(Math.toRadians(i)) * amplitude); 
     Rasterizer2D.drawAlphaPixel(colour, pixelY, 1, 1, alpha, pixelX); 
    } 
} 

这吸引了一波,但我不能指定的波长来使用,就没有那么肯定,我怎么能做到这一点。非常感谢大家。

回答

0

要修改波长短,可以使用此公式

F(X)=α* SIN((1/B)* X)

凡是振幅,b为波长。

看着你的代码,你有振幅。你只需要一个新的参数来指定b。

+0

不完全。 'b'将与频率成正比,而不是波长。 – John

+0

pixelY =(int)(yPos - (amplitude * Math.sin(Math.toRadians(i))* waveLength));改成这个,没有奏效。 – user1009569

+0

这是真的。幸运的是,波长与频率成反比,所以我足够接近。我编辑它。 –

0

添加参数一样float wavelength和改变

pixelY = (int) (yPos - Math.sin(2.0 * Math.pi * Math.toRadians(i)/wavelength) * amplitude); 

你有

y(i) = y0 - A sin(i) 

我的公式给你

y = y0 - A sin (2 pi i/L) 

其中L是波长。

现在,这仍然可能不会做你想要的。这取决于你想要什么xPosyPos来表示。你想xPos给你一个阶段转变?如果是这样,那么你需要将它包含在pixelY的表达式中。

+0

XPos正是Wave开始的地方。它不起作用,波长和振幅都起振幅的作用,有点... – user1009569

+0

对不起,更好的解释是,xPos和yPos只是波形位置的屏幕坐标,例如如果我有10,10那么波将开始在(10,10)(x,y) – user1009569