通过API文档查询Math类的方法,打印出近似圆,只要给定不同半径,圆的大小随之发生改变

来源:互联网 发布:萧航网络 编辑:程序博客网 时间:2024/06/05 09:42
[java] view plain copy
 print?
  1. import java.lang.Math;    
  2.     
  3. public class MathDraw    
  4. {    
  5.     /**  
  6.      * 画图函数,输入圆半径,输出圆  
  7.      */    
  8.     public static void paint(int r)    
  9.     {    
  10.        //假定圆心在坐标(r,r)处    
  11.        int x = 0//x的坐标开始    
  12.        int y = r * 2;    //y的坐标开始    
  13.        int c = 0//中间空格数量    
  14.        int z = 2//每行递减量,步长设为2是为了调节屏幕纵横比。    
  15.     
  16.        for (int i = r * 2; i >= 0; i = i-z) {    
  17.            //获取画*点坐标的x值    
  18.             x = getX(r, y);    
  19.            //先画该y值上左边的*    
  20.             System.out.print(getSpace(x) +"*");    
  21.            c = (r-x)*2//以圆心对应输出空格    
  22.            //再画该y值上右边的*    
  23.             System.out.println(getSpace(c) +"*");    
  24.            //每次y值递减    
  25.             y-=z;    
  26.         }    
  27.     }    
  28.     
  29.      /**  
  30.      * 获取画*位置,输入圆半径和坐标y值,输出坐标x值  
  31.      */    
  32.     public static int getX(int r, int y) {    
  33.         //取直角三角形长边长    
  34.         int h = y - r;     
  35.        //求直角三角形短边长    
  36.         double l = Math.sqrt((r * r) - (h * h));    
  37.        //取x值,Math.round()返回最接近的整数    
  38.         return (int) Math.round(r-l);    
  39.     }    
  40.     
  41.     /**  
  42.      * 画空格  
  43.      */    
  44.     public static String getSpace(int i) {    
  45.         String s = "";    
  46.         for (int j = 0; j < i; j++) {    
  47.             s += " ";    
  48.         }    
  49.         return s;    
  50.     }    
  51.     
  52.     public static void main(String[] args)    
  53.     {    
  54.        //调用画图函数,参数是圆的半径    
  55.        paint(6);    
  56.     }    
  57. }    

运行程序:


另外一种:

[java] view plain copy
 print?
  1. public class CircleDraw {  
  2.   
  3.     /** 
  4.      * @param args 
  5.      * @author bigboy 
  6.      */  
  7.     public static void main(String[] args) {  
  8.         // TODO Auto-generated method stub  
  9.         // 定义半径  
  10.         int r = 6;  
  11.         // 定义y为圆的纵坐标,其中y=y+2是让设置纵坐标的步长,可以调整椭圆的“胖瘦”  
  12.         for (int y = 0; y <= 2 * r; y = y + 2) {  
  13.             long x = Math.round(r - Math.sqrt(2 * r * y - y * y));  
  14.             for (int i = 0; i <= 2 * r; i++) {  
  15.                 // i==x是指某一个纵坐标对应的一个横坐标,i==2*r-x 是指该纵坐标对应的第二个横坐标  
  16.                 if (i == x || i == 2 * r - x) {  
  17.                     System.out.print("*");  
  18.                 } else {  
  19.                     System.out.print(" ");  
  20.                 }  
  21.             }  
  22.             System.out.print("\n");  
  23.         }  
  24.     }  
  25.   
  26. }  

运行程序:

阅读全文
0 0
原创粉丝点击