zoukankan      html  css  js  c++  java
  • Android之2D图形(圆、直线、点)工具类 (持续更新)


    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;
    		
    	}
    }






  • 相关阅读:
    javascript中数据属性的一些小结
    求教BFC的一些疑惑
    snowinmay.net学习运用
    4月份总结(二)
    瀑布流布局浅析(转)
    JS函数的参数(arguments)的使用(形参和实参)
    网页布局什么时候用图片背景,什么时候用img标签?
    chrome,ff浏览器默认行高
    盒模型中的内容讨论
    Cow Pedigrees(△)
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6756031.html
Copyright © 2011-2022 走看看