用java中的Math函数编写一个近似圆

/**
*此程序功能是根据给定不同半径,圆的大小会随着变化。并打印如下图的近似圆
*           * *
*        *       *
*       *         *
*        *       *
*           * *
*@author 沙雪
*@version V1.0
*/
/*需求分析:
	1.圆上的点的求法:可根据勾股定理求出圆上点的横坐标,x=r-sqrt(r^2-(r-y)^2)。
	2.先打印圆左边的空格,然后再打印*号。
	3.再打印两个*号中间的空格,再打印*号。
	4.圆的半径采用键盘录入方式。
*/
import java.util.Scanner;
class Circle{
	public static void main (String [] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入圆的半径:");
		int i = sc.nextInt();
		print(i);
	}
    /**
	*@param r:参数是键盘录入的半径;
	*print方法说明:用于打印需求中的圆。
	*/
	public static void print(int r){
		int x1 = 0; 									// 圆上*的横坐标
		int y = 0; 										// 圆上*的纵坐标
		int x =0; 										//用于接收获取的X点横坐标;
		/*for循环每走一步,在坐标系中*字排列就多上一层。
		如果在圆的最顶层或者圆的最底层,则每行中两个*中间空一格。
		在圆中其他行,同一行中的两个横坐标相差 c=2*sqrt(r^2-(r-y)^2)个空格;
		*/
		for(y=0;y<=2*r;y+=2){
			if(y==2*r||y==0){  							//当是圆的最顶层或者是圆的最底层时,
				x = getX(r,y);							//用于接收获取的X点横坐标;
				System.out.print(getSpace(x)+"*"+" "+"*");//只需在*横坐标前打空格+*+“ ”+* 即可。
			}else{            							//在圆的其他行时,
				x = getX(r,y);  						//用于接收获取的X点坐标;
				System.out.print(getSpace(x)+"*"); 		//在*横坐标前打空格+*;
				int c=2*(r-x); //获取两个*中间的空格长度;
				System.out.print(getSpace(c)+"*");		//输出两个*中间的空格数+*;
			}
		   System.out.println(""); 						//换行。
		}
	}
	/**
	*@param r:参数是键盘录入的半径;
	*@param y:参数是圆上*的纵坐标;
	*@return x1:返回圆上*的横坐标;
	*方法说明:此方法是为了获取x1的横坐标值
	*/

	public static int getX(int r,int y){
		int x1 =(int)Math.round( r-Math.sqrt(r*r-(r-y)*(r-y)));  //获取的X点横坐标;
		return x1;
	}
	/**
	*@param x1:参数是圆上*的横坐标;
	*@return space:返回是空格字符串;
	*方法说明:此方法是为了获取*前的空格长度。
	*/
	
	public static String getSpace(long x1){
		String space=" ";
		for(int i=0;i<x1;i++){   //获取空格长度。
			space+=" ";
		}
			return space;
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值