2015-10-07 178 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值轉換爲座標。