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