public static double[] circle_circle_p(double cx0, double cy0, double r0, double cx1, double cy1, double r1){
		double[] result = NONE;
		double dx = cx1 - cx0;
		double dy = cy1 - cy0;
		double distSQ = dx*dx + dy*dy;

		if(distSQ > ACCY){
			double r0SQ = r0 * r0;
			double r1SQ = r1 * r1;
			double diffRSQ = (r1SQ - r0SQ);
			double root = 2 * (r1SQ + r0SQ) * distSQ - distSQ * distSQ - diffRSQ * diffRSQ;
			if(root > -ACCY){
				double distINV = 0.5f/ distSQ;
				double scl = 0.5f - diffRSQ * distINV;
				double x = dx * scl + cx0;
				double y = dy * scl + cy0;
				if(root < ACCY){
					result = new double[] { x, y };
				}
				else {
					root = distINV * Math.sqrt(root);
					double xfac = dx * root;
					double yfac = dy * root;
					result = new double[] { x-yfac, y+xfac,  x+yfac, y-xfac };
				}
			}
		}
		return result;
	}