2015-10-07 167 views
0

我是新来的android和我试图在加速度计值的变化触发屏幕上绘制正弦波。我只需要在屏幕上动态绘制的纯正弦波(限于屏幕)。我可以在画布上绘制坐标并验证屏幕尺寸,但我无法考虑如何将正弦值(范围从0到1)转换为屏幕坐标。如何使用sin()函数和canvas在android中绘制正弦波曲线?

我是想这样的事情在onSensorChanged():

tvarY = sin(tvarX)*2.0; // tvarX and tvarY are double values 
tvarX= (tvarX+ 2);  // 2.0 is for magnifying 

xPosition = (float)tvarX; 
yPosition = (float)tvarY; 

但tvarx的使用这种方法的值总是从无限远的来回切换为0。任何人都可以请建议我的任何方法更改值并将其转换为屏幕坐标以绘制正确的正弦波?

感谢:-)

+0

'/ 2.0是放大'号。这只会将波向右移动。但是你已经使用X来计算Y,所以之后改变X是没有意义的。或者2.0是您的下一个X的deltaX? '使用这种方法的tvarx的值总是从无穷大到零之间来回切换'。你是决定X范围的人。然后用Y = sin(X);来计算Y. – greenapps

+0

请显示您画鼻窦的整个循环。完成初始化。 – greenapps

+0

我应该改变x线性绘制一个正弦波,我的坏。但是,我应该如何使用数值上的差值来将它们放大到屏幕大小? – 8Bit

回答

1

我认为你可以使用函数: path.rQuadTo(浮动DX1,DY1浮动,浮动DX2,浮动DY2)

同quadTo,但坐标被认为是相对的到这个轮廓上的最后一点。

我写了一句,供大家参考:

Path mpath = new Path(); 
mpath.moveTo(0, 100); 
mpath.rQuadTo(20, 5, 40, 0); 
mpath.rQuadTo(20, -5, 40, 0); 

您可以尝试一次,那么你会得到一个正弦波喜欢这幅画: sine wave

我觉得这个方法会更容易与比较将sin值转换为坐标。