Android中使用Bezier曲线

import android.graphics.Point;  
/** 
 *  
 * @author http://blog.csdn.net/arui319 
 * 
 */  
public class Bezier {  
    private static final float AP = 0.5f;  
    private Point[] bPoints;  
    /** 
     * Creates a new Bezier curve. 
     *  
     * @param points 
     */  
    public Bezier(Point[] points) {  
        int n = points.length;  
        if (n < 3) {  
            // Cannot create bezier with less than 3 points  
            return;  
        }  
        bPoints = new Point[2 * (n - 2)];  
        double paX, paY;  
        double pbX = points[0].x;  
        double pbY = points[0].y;  
        double pcX = points[1].x;  
        double pcY = points[1].y;  
        for (int i = 0; i < n - 2; i++) {  
            paX = pbX;  
            paY = pbY;  
            pbX = pcX;  
            pbY = pcY;  
            pcX = points[i + 2].x;  
            pcY = points[i + 2].y;  
            double abX = pbX - paX;  
            double abY = pbY - paY;  
            double acX = pcX - paX;  
            double acY = pcY - paY;  
            double lac = Math.sqrt(acX * acX + acY * acY);  
            acX = acX / lac;  
            acY = acY / lac;  
            double proj = abX * acX + abY * acY;  
            proj = proj < 0 ? -proj : proj;  
            double apX = proj * acX;  
            double apY = proj * acY;  
            double p1X = pbX - AP * apX;  
            double p1Y = pbY - AP * apY;  
            bPoints[2 * i] = new Point((int) p1X, (int) p1Y);  
            acX = -acX;  
            acY = -acY;  
            double cbX = pbX - pcX;  
            double cbY = pbY - pcY;  
            proj = cbX * acX + cbY * acY;  
            proj = proj < 0 ? -proj : proj;  
            apX = proj * acX;  
            apY = proj * acY;  
            double p2X = pbX - AP * apX;  
            double p2Y = pbY - AP * apY;  
            bPoints[2 * i + 1] = new Point((int) p2X, (int) p2Y);  
        }  
    }  
    /** 
     * Returns the calculated bezier points. 
     *  
     * @return the calculated bezier points 
     */  
    public Point[] getPoints() {  
        return bPoints;  
    }  
    /** 
     * Returns the number of bezier points. 
     *  
     * @return number of bezier points 
     */  
    public int getPointCount() {  
        return bPoints.length;  
    }  
    /** 
     * Returns the bezier points at position i. 
     *  
     * @param i 
     * @return the bezier point at position i 
     */  
    public Point getPoint(int i) {  
        return bPoints[i];  
    }  
}  

你可能感兴趣的:(android,.net,Blog)