0
我正在製作一個看起來像下面的圖片的應用程序,底部的諧波不會改變,但最上面的諧波會通過設置幅度,歐米加,歐米茄逆和phi。繪畫諧波Android
我有X和Y線,但我似乎無法弄清楚如何,甚至畫的底波,Y = SIN(X)。我已經搜索並嘗試去做,但都失敗了。任何人都可以幫助或指導一個有用的資源嗎?
我正在製作一個看起來像下面的圖片的應用程序,底部的諧波不會改變,但最上面的諧波會通過設置幅度,歐米加,歐米茄逆和phi。繪畫諧波Android
我有X和Y線,但我似乎無法弄清楚如何,甚至畫的底波,Y = SIN(X)。我已經搜索並嘗試去做,但都失敗了。任何人都可以幫助或指導一個有用的資源嗎?
這是一個繪製兩個正弦波的簡單示例,考慮了視圖尺寸變化,一些軸縮放和模擬步進。
<com.pixdart.view.HarmonicCustomView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#DDD"/>
public class HarmonicCustomView extends View {
private Paint mPaint = new Paint();
private RectF mRectF = new RectF();
private float scaleY, scaleX;
public static final float STEP_X = 0.1f;
public static final int PERIODS_TO_SHOW = 5;
public HarmonicCustomView(Context context) {
super(context);
initialize();
}
public HarmonicCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public HarmonicCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initialize();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mRectF.set(0, 0, w, h);
mRectF.inset(mRectF.width() * 0.1f, mRectF.height() * 0.1f);
scaleX = (float) (2 * Math.PI * PERIODS_TO_SHOW/mRectF.width());
scaleY = mRectF.height()/6;
}
public void initialize() {
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(2f);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(0xFFFF0000);
for (float x = 0; x < mRectF.width(); x += STEP_X) {
float y = (float) (Math.sin(x * scaleX)) * scaleY;
canvas.drawPoint(x + mRectF.left, y + mRectF.top + scaleY, mPaint);
}
mPaint.setColor(0xFF0000FF);
for (float x = 0; x < mRectF.width(); x += STEP_X) {
float y = (float) (Math.sin(x * scaleX)) * scaleY;
canvas.drawPoint(x + mRectF.left, y + mRectF.top + scaleY * 5, mPaint);
}
}
}
你是怎麼畫的頂部嗎?應該是一樣的,但是有一個y偏移量。 – 2014-10-31 01:00:03
我沒有畫出波浪,這就是我想要做的 – user1314413 2014-10-31 01:01:22
看看傳統sdk示例中的傳感器/加速度計的東西,以獲得一個想法。 – 2014-10-31 01:04:55