我想將用戶在android屏幕上手繪的「sample」線條變成一個數組。 x座標是等距的,很可能是1D數組的索引。爲了舉例說明我的意思,如果用戶繪製近似正弦波,我想創建一個數組,可以將近似正弦波轉換爲另一個圖形,或者用於音頻合成。將繪製線條抽樣成陣列
我有一個基本的想法,做法,開始使用數組:
float samples[] = new float[100] // or some other arbitrary number
然後,一個ontouch方法:
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE){
// assume we translate x into relative index from 0-99 at this point
if(!xHasPoint(x, samples)){
drawNewPoint();
samples[x] = y;
}
invalidate();
return true;
}
else{
invalidate();
return false;
}
}
private static boolean xHasPoint(float x, float[] a){
if(a[x] == !null){
return true;
}
else{
return false;
}
}
所以我的問題是,你能不能提出一個更好的方法這個問題?我預見不得不外推大量數據......在最後循環遍歷數組,並從最接近的非空值中分配空索引平均值,這種事情。
另一方面,如果這看起來沒有錯,我是否缺少重要的重要考慮因素?
好點。這個數組的接收器(libpd,Android的Pure Data)需要一個固定大小的數組,所以我想捕獲一個數組。可能我可以捕獲一個任意樣本,然後對其進行採樣?就xHasPoint而言,我認爲我只希望用戶每x座標繪製一個點。 – anthropomo
用更多的點數更新了我的答案。 –
我還有很多事要解決。例如,如果我能夠獲得足夠大的初始樣本,也許我可以使用線性插值。這對於正方形和三角形音頻波甚至可能是一個優點。提前,並將其標記爲答案。 – anthropomo