《疯狂Java讲义》练习题- 第三章 画近似圆

其实这个问题并不难,但是很多年没有研究过几何了.问题卡在这里了,准确的说我根本没有学过圆的标准公式这部分内容,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 ----------
                                        **
                       *                                  *
                *                                                *
           *                                                          *
        *                                                                *
     *                                                                      *
   *                                                                          *
  *                                                                            *
 *                                                                              *
*                                                                                *
*                                                                                *
*                                                                                *
 *                                                                              *
  *                                                                            *
   *                                                                          *
     *                                                                      *
        *                                                                *
           *                                                          *
                *                                                *
                       *                                  *
                                        **

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值