2014-11-24 76 views
-2

對於我在Android平板電腦上開發的項目,我必須創建移動的可視正弦波光柵。下面是這樣一個例子:在Android上生成正弦波視覺光柵

Sine wave gratings

(這些當然是靜止的類似物。)

我需要能夠修改參數,例如速度,方向,對比度和空間頻率。能夠使用不同類型的光柵而不僅僅是線性光柵將是一個優點(例如,圓形波紋效應)。

有人可以提供一個關於如何在Android中實現這個功能的建議嗎?謝謝。

+0

'問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他異地資源是堆棧溢出(...)的焦點# – njzk2 2014-11-24 20:34:17

+0

@ njkz2我已經解決了問題,該標準 – Gaessaki 2014-11-24 21:09:00

回答

2

您首先需要將[-1,1]的正弦函數映射到[0,1]以匹配顏色值範圍。然後在OpenGL(OpenGL ES)中,創建一個表示正弦波的單個週期的平面。也就是說,對於這架飛機,顏色從黑色變成白色,然後變成黑色(或白色黑色白色)。請注意,您需要水平平鋪此平面(垂直於條),因此您需要相應地調整漸變的比例。

用於繪製的顏色,你有你的移動正弦函數,你可以簡單地映射[0,1]的RGB三元組(255,255,255),在那裏你用元組乘以你的正弦值i並獲得(255*i, 255*i, 255*i)爲你的顏色。當i=1您獲得純白色,而i=0獲得純黑色。

如果你想設置的對比度,這樣你得到的純白色的寬帶,你需要擴展在y軸的正弦函數,並應用[0,1]綁定功能,使得所有的正弦值大於1將被強制上限爲10也是如此。

對於空間頻率,您只需要定義該平面的寬度。

爲了加速您定義該平面的動畫速度。

除了使用Android OpenGL ES(上述建議)之外,我不認爲用Android SDK的內置功能可以獲得如此大的靈活性。另外,波紋光柵比線性光柵要困難得多。現在我能想到的簡單方法就是畫一個球,並從頂部看一個正交相機。

另一方面,如果您不介意像素化,那麼您可以簡單地製作一個Drawable並對其進行縮放和動畫。此外,新的Android棒棒糖現在支持矢量圖像Drawable s,所以你也可以檢查出來。

+0

關於速度,您定義動畫速度意味着什麼?我如何讓飛機在每一幀上移動? – Gaessaki 2015-01-13 19:00:35

+1

@Gaessaki如果您使用的是GL,那麼您可以在每個刷新循環中定義平面的位置。 – StoneBird 2015-01-13 19:15:04