虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android之2D图形(圆、直线、点)工具类 (持续更新)

Android之2D图形(圆、直线、点)工具类 (持续更新)
类别:Android编程   作者:码皇   来源:互联网   点击:

public class Circle {private PointF centerPoint;private float radius;public PointF getCenterPoint() {return centerPoint;}public void setCenterPoint(PointF centerPoint) {thi


    public class Circle {
    private PointF centerPoint;
    private float radius;
    public PointF getCenterPoint() {
    return centerPoint;
    }
    public void setCenterPoint(PointF centerPoint) {
    this.centerPoint = centerPoint;
    }
    public float getRadius() {
    return radius;
    }
    public void setRadius(float radius) {
    this.radius = radius;
    }
    }



    public class CircleUtils {
    /** * 根据圆上的三个点求圆心坐标、半径 * @param pA * @param pB * @param pC * @return */ public static Circle getCircle(PointF pA,PointF pB,PointF pC) {
    float mat1,mat2,mat3 ;
    mat1 = ((pB.x*pB.x +pB.y*pB.y)-(pA.x*pA.x +pA.y*pA.y))*(2*(pC.y-pA.y))- ((pC.x*pC.x +pC.y*pC.y)-(pA.x*pA.x +pA.y*pA.y))*(2*(pB.y-pA.y));
    mat2 = (2*(pB.x-pA.x))*((pC.x*pC.x+pC.y*pC.y)-(pA.x*pA.x +pA.y*pA.y))- (2*(pC.x-pA.x))*((pB.x*pB.x+pB.y*pB.y)-(pA.x*pA.x +pA.y*pA.y));
    mat3 = 4*((pB.x-pA.x)*(pC.y-pA.y) - (pC.x-pA.x)*(pB.y-pA.y));
    Circle circle=new Circle();
    PointF centerPoint=new PointF();
    float radius;
    centerPoint.x = mat1/mat3;
    centerPoint.y = mat2/mat3;
    radius=(float) Math.sqrt(((pA.x-centerPoint.x)*(pA.x-centerPoint.x) + (pA.y-centerPoint.y)*(pA.y-centerPoint.y)));
    circle.setCenterPoint(centerPoint);
    circle.setRadius(radius);
    return circle;
    }
    /** * 求一段圆弧两端另一点的坐标 * @param circle * @param startP 圆弧一端的点 * @param angle 圆弧对应的角度 * @return */ public PointF getEndPointOfArc(Circle circle,PointF startP,float angle) {
    PointF centerP=circle.getCenterPoint();
    PointF endPointF=new PointF();
    endPointF.x=(float) (centerP.x+(startP.x-centerP.x)*Math.cos(angle*Math.PI/180)-(startP.y-centerP.y)*Math.sin(angle*Math.PI/180));
    endPointF.y=(float) (centerP.y+(startP.x-centerP.x)*Math.sin(angle*Math.PI/180)+(startP.y-centerP.y)*Math.cos(angle*Math.PI/180));
    return endPointF;
    }
    }






相关热词搜索: 直线 图形 工具