其实这个问题并不难,但是很多年没有研究过几何了.问题卡在这里了,准确的说我根本没有学过圆的标准公式这部分内容,google了很多,重新划了坐标研究了公式..解方程...
虽然结果还不是很圆,但是方法应该是正确了.
主要是因为double取整后有一些偏差.
另外行数多少,半径大小也相互影响
import java.lang.Math; public class FirstProject { public static void main(String[] args) { paint(40); //半径40 } public static void paint(int r) { //假定圆心在坐标(r,r); int y = r * 2; //y的坐标开始 int x = 0; int c = 0; //中间空格数量 int z = 2; //每行递减量 for (int j = r * 2; j >= 0; j=j-z) { x = getX(r, y); System.out.print(getSpace(x) + "*"); c = (r-x)*2; System.out.println(getSpace(c) + "*"); y-=z; } } public static int getX(int r, int y) { //解圆标准方程的 int x = y - r; double t = Math.sqrt((r * r) - (x * x)); return (int) Math.round(r-t); } public static String getSpace(int i) { String s = ""; for (int j = 0; j < i; j++) { s += " "; } return s; } }
---------- 运行Java ----------
**
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
**