public class PrintCircle {
public static void printCricle(int r) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= 2 * r; i++) {
int[] ys = getY(i, r);
// System.out.println(i + "\t" + ys[0] + "\t" + ys[1]);
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);
}
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);
}
} |