貝塞爾曲線及Path類詳解(1)

貝塞爾曲線

貝塞爾曲線是計(jì)算機(jī)圖形圖像造型的基本工具,是圖形造型運(yùn)用得最多的基本線條之一。它通過控制曲線上的四個(gè)點(diǎn)(起始點(diǎn)、終止點(diǎn)以及兩個(gè)相互分離的中間點(diǎn))來創(chuàng)造、編輯圖形。其中起重要作用的是位于曲線中央的控制線。這條線是虛擬的,中間與貝塞爾曲線交叉,兩端是控制端點(diǎn)。移動兩端的端點(diǎn)時(shí)貝塞爾曲線改變曲線的曲率(彎曲的程度);移動中間點(diǎn)(也就是移動虛擬的控制線)時(shí),貝塞爾曲線在起始點(diǎn)和終止點(diǎn)鎖定的情況下做均勻移動。

注意,貝塞爾曲線上的所有控制點(diǎn)、節(jié)點(diǎn)均可編輯。這種“智能化”的矢量線條為藝術(shù)家提供了一種理想的圖形編輯與創(chuàng)造的工具。
Android中的Path類中提供了若干方法繪制想要的圖形。

public class MyView extends View {
    private Paint paint;
    private Path path;


    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLUE);
        paint.setStrokeWidth(10);
        path = new Path();
        drawLine();
    }

    /**
     * 1.默認(rèn)從屏幕原點(diǎn)(0,0)開始繪制
     */
    private void drawLine() {
        path.lineTo(300, 300);
        move();
    }

    /**
     * 2.move方法主要用于移動畫筆
     */
    private void move() {
        path.moveTo(500, 300);
        path.lineTo(800, 300);
        quadTo();
    }

    /**
     * 3.path方法中quadTo()方法提供了兩點(diǎn)間的貝塞爾曲線
     * (x1,y1) 為控制點(diǎn),(x2,y2)為結(jié)束點(diǎn)。
     */
    private void quadTo() {
        path.quadTo(500, 400, 200, 800);
        cubicTo();

    }

    /**
     * 4.cubicTo 同樣是用來實(shí)現(xiàn)貝塞爾曲線的。
     * cubicTo(float x1, float y1, float x2, float y2,float x3, float y3)
     * 相較于quadTo()多了一個(gè)控制點(diǎn)
     * 如果第一個(gè)起始點(diǎn)就和控制點(diǎn)一樣,則相當(dāng)于使用quaTo方法
     */
    private void cubicTo() {
        path.moveTo(100, 800);
        path.cubicTo(100, 800, 300, 400, 600, 800);
        cubicTo2();
    }

    /**
     * 使用兩個(gè)控制點(diǎn)繪制貝塞爾曲線
     */
    private void cubicTo2() {
        path.moveTo(0, 0);
        path.cubicTo(100, 800, 300, 400, 600, 800);
        drawArcTo();
    }

    /**
     * arcTo 用于繪制圓形或者橢圓,繪制好矩形后,選取需要到的角度
     */
    private void drawArcTo() {
        RectF rectF = new RectF(10, 10, 600, 600);
        path.arcTo(rectF, 0, 90);
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path, paint);
    }
}
繪制drawArcTo

為了方便把矩形區(qū)域也截取出來了,繪制的弧線是矩形區(qū)域的中心點(diǎn)的角度。

貝塞爾曲線兩個(gè)控制點(diǎn)的曲線

貝塞爾曲線一個(gè)控制點(diǎn)的曲線
使用lineTo和moveTo方法移動畫筆
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在做項(xiàng)目的時(shí)候,需要用到一個(gè)動畫,非常簡單的動畫,簡單到就是直接對一個(gè)View做平移... 然而雖然動畫簡單,...
    IAMDAEMON閱讀 4,406評論 12 69
  • 談?wù)勜惾麪柷€ 最近在做項(xiàng)目的時(shí)候,需要用到一個(gè)動畫,非常簡單的動畫,簡單到就是直接對一個(gè)View做平移… 然而雖...
    雨潤聽潮閱讀 6,281評論 1 16
  • 貝塞爾曲線開發(fā)的藝術(shù) 一句話概括貝塞爾曲線:將任意一條曲線轉(zhuǎn)化為精確的數(shù)學(xué)公式。 很多繪圖工具中的鋼筆工具,就是典...
    eclipse_xu閱讀 27,992評論 38 370
  • 一、Path常用方法表 二.Path詳解 上一次除了一些常用函數(shù)之外,講解的基本上都是直線,本次需要了解其中的曲線...
    呂侯爺閱讀 1,750評論 1 6
  • 有人問我,從事這類職業(yè)是不是很危險(xiǎn)? 你從事什么職業(yè)都很危險(xiǎn),想象你周圍充斥著性變態(tài)者,一周144個(gè)小時(shí)坐...
    ohmymom閱讀 284評論 4 7

友情鏈接更多精彩內(nèi)容