有啊,代码如下:
public class PrintCircle {
/**
* 参数为半径
*
* @param r
*/
public static void printCricle(int r) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= 2 * r; i++) {
int[] ys = getY(i, r);
for (int y = 0; y <= ys[1]; y++) {
if (y == ys[1]) {
// 如果为最后一个星号,则换行
sb.append("*\r\n");
} else if (y == ys[0]) {
// 第一个星号
sb.append('*');
} else {
// 空格
sb.append(' ');
}
}
}
System.out.println(sb);
}
/**
*
* 公式:(x-r)^2 +(y-r)^2 = r^2
* 根据行数,算出列向的两个坐标 y = r +(-) 根号(2xr-x^2)
* 其中是radix是行距和列距的比例,可以调一下
*
* @param x
* @return
*/
private static int[] getY(int x, int r) {
double radix = 2.2;
int[] ys = new int[2];
double sqrt = Math.sqrt(2 * x * r - x * x);
ys[0] = (int) ((r - sqrt) * radix);
ys[1] = (int) ((r + sqrt) * radix);
return ys;
}
public static void main(String[] args) {
printCricle(20);
}
}
看看行不
|