根据用户输入的半径绘制圆形

代码如下:

public class circular {
//定义绘图区域大小
private static int BOARD_SIZE = 30;
//定义二维数组来充当绘图区域
private String[][] board;
public void initBoard() {
//初始化绘图区域数组
board = new String[BOARD_SIZE][BOARD_SIZE];
//把每个元素赋值为点,用于描绘出绘图区域
for(int i=0;i<BOARD_SIZE;i++) {
for(int j=0;j<BOARD_SIZE;j++) {
board[i][j]=".";
}
}
}
//在控制台输出绘图区域的方法
public void printBoard() {
for(int i=0;i<BOARD_SIZE;i++) {
for(int j=0;j<BOARD_SIZE;j++) {
System.out.print(board[i][j]+" “);
}
System.out.print(”\n");
}
}
public static void main(String[] args)throws IOException {
circular gb = new circular();
gb.initBoard();
System.out.println(“Please enter the radius of the circle!”);
//从控制台获取r
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
//半径r 圆心坐标origin
double r = Double.parseDouble(str);
int origin = 15;
int y = 0;
gb.board[origin][origin] = “O”;
//将绘制区域边界大小传递过来
int size = gb.BOARD_SIZE;
//先计算四分之一圆的坐标。根据x坐标计算y点坐标
for(int x=origin;x<origin+r;x++)
{
if(x==origin) {
y=(int)(origin+r);
//先绘制出圆的最上、最下、最左、最右四个点。
gb.board[size-y][x] = “";
gb.board[y][x] = "
”;
gb.board[x][y] = “";
gb.board[x][size-y] = "
”;
continue;
}
double cosa = (x-origin)/r;
double radian = Math.acos(cosa);
double yy = Math.sin(radian)r+15;
y = (int)yy;
//计算出四分之一的坐标点
gb.board[size-y][x] = "
";
//利用对称性对称其他坐标点
gb.board[size-y][size-x] = “";
gb.board[x][y] = "
”;
gb.board[x][size-y] = “*”;
}
//调用方法绘制圆
gb.printBoard();
}
}

运行结果:

在这里插入图片描述

心得体会:
1.利用圆的对称性去绘制能够事半功倍。
2.math.sin()等方法中传入的参数应该是弧度而非角度。
3.将电脑中的坐标系转化为数学中的坐标系的方法为:输出数组时交换x,y的位置并且使用size减去其中的一个坐标分量,例如gb.board[size-y][x] = “*”;。

猜你喜欢

转载自blog.csdn.net/qq_38893760/article/details/85071829