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

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起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中"使用圆弧绘制正弦波"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百一十五回:使用圆弧绘制正弦波)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第五百一十五回:绘制向外扩散的水波纹)

一起Talk Android吧(第四百一十回:绘制曲线)

一起Talk Android吧(第四百一十八回:制作时钟)

一起Talk Android吧(第四百一十一回:绘制文字)

一起Talk Android吧(第四百一十六回:绘制正弦波总结)

一起Talk Android吧(第四百一十九回:让时钟走起来)