利用Math类,JAVA输入圆半径打印相似圆

来源:互联网 发布:轮毂拉丝机编程 编辑:程序博客网 时间:2024/06/04 08:27

刚好看到这个题目,便自己动手写,发现每次打印出来的都是椭圆,网上找到了一篇文章写得很精练加以自己的理解以图的方式希望可以帮助大家理解
具体思路如下:
1.把控制台当做是一个直角坐标系,第一个点(0,0)为原点,这时控制台就相当于直角坐标系的第四象限,但我们要把它看成第一象限,因为这样不用涉及负数的问题.
2.把(r,r)看成是圆的中心,如下图,先获取所要打印的*点的横坐标x,程序中调用getX(int r,int y)方法获取(利用直角三角形的勾股定理)
里面的字母与程序的参数对应(其中l为临时量,不出现在程序中)
3.先打印左边的空格,getSpace(int s)获取空格数,接着打印
4.接着打印两个号之间的空格,最后打印号,这样一行打印完成
5.循环打印2 * r + 1次,程序完成

下面是代码

import java.util.Scanner;public class Circle{    public static void main(String[] agrs)    {        System.out.print("请输入圆半径:");        paint(new Scanner(System.in).nextInt());    }    public static void paint(int r)    {        //设圆心在(r,r)处,控制台起始点为(0,0),把由此建立的直角坐标系的第四象限看成第一象限        int x = 0;//x坐标        int y = 0;//y坐标        int c = 0;//左右两个*之间的空格数        int z = 2;//用于控制纵横比,设为2刚刚好        for(int i = 0;i <= 2*r; i += 2)        {            //先获取每一行左边*号的坐标X            x = getX(r,y);            //打印第一个*号之前的空格和*号            System.out.print(getSpace(x) + "*");            //打印两个*号之间的空格            c = 2 * (r - x);            System.out.println(getSpace(c) + "*");            y += 2;        }    }    public static int getX(int r,int y)    {        //由直角三角形勾股定理可以得到圆的边上的点的横坐标x         return (int)Math.round((r - Math.sqrt(r * r -(r - y)*(r - y))));    }    public static String getSpace(int s)    {        String space = "";        for (int j = 0;j < s;j ++)        {            space += " ";        }        return space;    }    }
0 0
原创粉丝点击