/**
*此程序功能是根据给定不同半径,圆的大小会随着变化。并打印如下图的近似圆
* * *
* * *
* * *
* * *
* * *
*@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;
}
}
用java中的Math函数编写一个近似圆
最新推荐文章于 2023-02-17 10:34:18 发布