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

[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. }  

运行程序:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值