根据给定半径,用*打印近似圆

import java.util.*;

/**
  *Description:以控制台起始点坐标为原点,类似于第四象限,
  *但是按照第一象限来画图,圆心(r,r),圆的方程x==Math.sqrt(r-(r*r-(r-y)**(r-y)))
  *纵横比为2
  *Date: 2018/7/21
  *@author	MechanicalDog
  *@version 1.0
  */
public class Circle
{
	public static void main(String[] args)
	{
		//从键盘读取一个整数
		Scanner radius = new Scanner(System.in);
		int r;
		r = radius.nextInt();
		//调用方法
		paintCircle(r);
	}
	/**
	  *用'*'画近似圆
	  *@param r1 圆的半径
	  */
	public static void paintCircle (int r1)
	{
		int x = 0;
		int y = 0;
		int r = 0;

		r = r1;
		
		//i+=2,这里设定y/x == 2,即纵横比为2
		for(int i = 0 ; i <= 2 * r ; i+=2 )
		{
			x = getX(r,y);
			//System.out.print(getSpace(x)+'*');简化了代码
			//输入左空格
			System.out.print(getSpace(x));
			//输入*
			System.out.print('*');
			//输入中间空格
			System.out.print(getSpace( 2 * (r - x) ));
			//输入*
			System.out.print('*');
			//换行
			System.out.print('\n');
			//近似比,x增1,y增2
			y+=2;
		}

	}
	/**
	  *get圆的横坐标x
	  *@param r 圆的半径, y 圆的纵坐标
	  *@return 返回横坐标x
	  */
	public static int getX( int r , int y)
	{
		//Math.round()是long类型,强类型转换
		return (int)Math.round( r - Math.sqrt( r * r - (r - y) * (r - y) ));
	}
	
	/**
	  *输入空格
	  *@param s 该参数控制输入多少空格
	  *@return 返回输入总空格的字符串
	  */
	public static String getSpace(int s)
	{
		 String space = "";
		 for(int i = 0 ; i < s ; i++)
		 {
			 space+=" ";
		 }
		 return space;
	}


}


 

猜你喜欢

转载自blog.csdn.net/mechanical_dog/article/details/81147156