一起Talk Android吧(第四百一十五回:使用圆弧绘制正弦波)


各位看官们,大家好,上一回中咱们说的例子是"使用三角函数绘制正弦波的优化",这一回咱们介绍的例子是" 使用圆弧绘制正弦波"。闲话休提,言归正转,让我们一起Talk Android吧!

思路来源

我们在前面章回中介绍了如何使用三角函数绘制正弦波,经过不断的绘制后就会发现:所有的关键点最后都组成了圆弧,于是思路来了:直接使用圆弧画正弦波。本章回中将介绍如何使用圆弧来画正弦波。

整体思路

使用路径来绘制正弦波,在路径中添加0-180度角对应的圆弧,然画出路径中的圆弧,此圆弧就是与当前角度匹配的正弦波。然后把画布旋转180度再向路径中添加180-360度角对应的圆弧,并且画出路径中的圆弧。

注意:画布旋转后要清除原来路径中的圆弧,画圆弧依赖于矩形,需要提前计算好矩形的坐标。下面是示例程序:

    private void drawSin180(Canvas canvas) {
        //200,300为圆心,半径为100
        int oX = 500;
        int oY = 800;
        //半径,正弦跨越了两个半径
        int r = 200;
        //右侧起点
        int ax = oX + 2*r;
        int ay = oY;

        canvas.save();

        //先画圆心左侧的圆弧,其中使用了矩形的坐标,注意其计算方法
        mPath.addArc(oX-2*r,oY-r,oX,oY+r,0,180);
        canvas.drawPath(mPath,mArcPaint);
        canvas.restore();

        canvas.save();
        //旋转画布180度,注意旋转时的圆心坐标
        canvas.rotate(180,oX+r,oY);
        //需要去掉上一次使用过的路径,不然会将其包含到新的路径中
        mPath.reset();
        //画圆心右侧的圆弧,其中使用了矩形的坐标,注意其计算方法
        mPath.addArc(oX,oY-r,oX+2*r,oY+r,0,180);
        canvas.drawPath(mPath,mArcPaint);
        canvas.restore();
    }

我们在代码中添加了详细的注释,这样方便大家理解代码,代码运行的效果是一个正弦波形,我在这里就不演示了,建议大家动手去实践。

概括总结

使用圆弧代替关键点去画正弦波是更换了一种绘图方式,整体上提高了绘图效率,也可以看作是一种对程序的优化。这种优化从编程思想的角度看就是从面向过程的编程进化到了面向对象的编程。用日常生活的例子做个比喻:出行时使用汽车代替了步行,进而提高了出行速度,节省了出行时间。

最后我强调一下,不是所有正弦波形都可以用圆弧来绘制。我们在例子中绘制的正弦波比较特殊,它正好是两个半圆,这与我们在示例中使用了r乘以正弦值和余弦值计算点的坐标有关。这只是正弦波的一个特殊示例,不能以点概全。

看官们,关于Android中"使用圆弧绘制正弦波"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值