打印出带有字符的 ASCII 圆和轴

2023-12-03

我必须打印一个圆(将其半径、圆心的坐标作为输入(cx and cy),以及绘制它所用的字符)。

我为轴和圆编写了一系列 if 块。如果我单独使用它们,它们会很好地工作,但是当我将它们放在同一个方法中时(我必须只有一种方法),它们会以不期望的方式重叠。

注意:如果字符与轴重叠,则该字符优先。

public static void drawCircle(int radius, int cx, int cy, char symbol) {
    // this method verifies that there are no negative
    // values involved (throws error/exception)
    verifyInput(radius, cx, cy);

    // set the values for extension of the axes
    // (aka how long are they)
    int xMax = cx + radius + 1;
    int yMax = cy + radius + 1;

    for (int j = yMax; j >= 0; j--) {
        for (int i = 0; i <= xMax; i++) {
            // set of if-block to print the axes
            if (i == 0 && j == 0) {
                System.out.print('+');
            } else if (i == 0) {
                if (j == yMax) {
                    System.out.print('^');
                }
                if (j != yMax) {
                    System.out.println('|');
                }
            } else if (j == 0) {
                if (i == xMax) {
                    System.out.println('>');
                }
                if (i != xMax) {
                    System.out.print('-');
                }
            }

            // if block to print the circle
            if (onCircle(radius, cx, cy, i, j) == true) {
                System.out.print('*');
            } else {
                System.out.print(' ');
            }
        }
        // I'm not sure if I need to use the print here V
        // System.out.println()
    }
}

这里是onCircle方法。它验证每个i,j如果它位于要绘制的圆的轮廓上。

public static boolean onCircle(int radius, int cx, int cy, int x, int y) {
    boolean isDrawn = false;
    if (Math.pow(radius,2)<=(Math.pow((x-cx),2)+Math.pow((y-cy),2))
            && (Math.pow((x-cx),2)+Math.pow((y-cy),2))<=(Math.pow(radius,2)+1)) {
        isDrawn = true;
    }
    return isDrawn;
}

这是我的输出(没有最后一个打印语句):

^          |
 ***  |
*   * |
*   * |
*   * + - - - - -*-*-*- >

这是我的输出(带有最后一个打印语句):

^

|
   ***
|
  *   *
|
  *   *
|
  *   *

+ - - - - -*-*-*- >

这是我应该得到的:

enter image description here


一般圆的方程:

Equation of a circle

In Java它可以这样实现:

(x-a)*(x-a) + (y-b)*(y-b) == r*r

如果是整数坐标系, 有可能rounded像这样:

(int) Math.sqrt((x-a)*(x-a) + (y-b)*(y-b)) == r

如果半径r=12和圆的中心a=5,b=1,那么圆和轴看起来像这样:

r=12,a=5,b=1
                    ^y                                        
                    |                                         
                    |                                         
                    | * * * * * * * * *                       
                  * *                   * *                   
              * *   |                       * *               
            * *     |                         * *             
          * *       |                           * *           
          *         |                             *           
        *           |                               *         
        *           |                               *         
      *             |                                 *       
      *             |                                 *       
      *             |                                 *       
      *             |                                 *       
      *             |         *                       *       
------* ------------+---------------------------------* ---->x
      *             |                                 *       
      *             |                                 *       
      *             |                                 *       
        *           |                               *         
        *           |                               *         
          *         |                             *           
          * *       |                           * *           
            * *     |                         * *             
              * *   |                       * *               
                  * *                   * *                   
                    | * * * * * * * * *                       
                    |                                         
                    |                                         
                    |                                         

在线尝试一下!

// radius
int r = 12;
// center of the circle
int a = 5, b = 1;
// whitespace
int s = 3;
// print area
int xMin = a-r-s, xMax = a+r+s;
int yMin = b-r-s, yMax = b+r+s;
// output an ASCII circle and axes
System.out.println("r="+r+",a="+a+",b="+b);
for (int y = yMax; y >= yMin; y--) {
    for (int x = xMin; x <= xMax; x++) {
        if ((int) Math.sqrt((x-a)*(x-a) + (y-b)*(y-b)) == r) {
            // circle
            System.out.print("* ");
        } else if (x == a && y == b) {
            // center of the circle
            System.out.print("* ");
        } else if (x == 0 && y == 0) {
            // origin of coordinates
            System.out.print("+-");
        } else if (x == 0) {
            // ordinate axis - y
            System.out.print(y == yMax ? "^y" : "| ");
        } else if (y == 0) {
            // abscissa axis - x
            System.out.print(x == xMax ? ">x" : "--");
        } else {
            // whitespace
            System.out.print("  ");
        }
    }
    // new line
    System.out.println();
}

See also:
Print out an ASCII circle and axes
Print out an ASCII circle of the specified width

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打印出带有字符的 ASCII 圆和轴 的相关文章

  • 抽象超类的默认接口方法

    可以说我有以下结构 abstract class A abstract boolean foo interface B default boolean foo return doBlah class C extends A implemen
  • 如何将 .cer 证书导入 java 密钥库?

    在开发 Java Web 服务客户端期间 我遇到了一个问题 Web 服务的身份验证使用客户端证书 用户名和密码 我从网络服务背后的公司收到的客户端证书位于 cer格式 当我使用文本编辑器检查该文件时 它具有以下内容 BEGIN CERTIF
  • 在 MongoDB Java 驱动程序中如何使用 $filter

    我有一个适用于 MQL 的查询 我需要将其翻译成Java MQL 中的查询如下所示 db
  • 按下按钮时清除编辑文本焦点并隐藏键盘

    我正在制作一个带有编辑文本和按钮的应用程序 当我在 edittext 中输入内容然后单击按钮时 我希望键盘和焦点在 edittext 上消失 但我似乎无法做到这一点 我在 XML 中插入了这两行代码 android focusable tr
  • 从 Bitmap 类创建 .bmp 图像文件

    我创建了一个使用套接字的应用程序 客户端在其中接收图像并将图像数据存储在 Bitmap 类中 谁能告诉我如何创建一个名为我的图像 png or 我的图像 bmp来自此 Bitmap 对象 String base64Code dataInpu
  • 警告:跳过条目,因为它不是绝对 URI。 NetBeans 中的 GlassFish

    我成功安装了 GlassFish 但是 当我启动服务器时 我收到两条警告消息 警告 跳过条目 因为它不是绝对 URI 那是关于什么的 Launching GlassFish on Felix platform Aug 09 2014 10
  • 为什么我的圈子值为零?

    这是我的 Circle 类代码 class Circle private double radius private double area public Circle double radius this radius radius pu
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • 确定代码是否在 App Engine 运行时 (Java) 上运行

    如何确定某些代码 Serv let 或简单的类 是否正在 Google App Engine 运行时 Java 上运行 以便决定是否使用 App Engine 的特定库 是否有一些可靠的运行时环境 ID 您可以检查com google ap
  • 将 EditText 聚焦在设备上运行的 PopupWindow 中时出现异常

    我正在为 Android 开发一个弹出窗口 它正在工作 我在上面添加了一个 EditText 和一个按钮 当在 ADV 上运行时 它可以正常工作 而在设备上运行时 当我专注于 EditText 时 这会抛出一个奇怪的异常 android v
  • 使用 CrudRepository 进行自定义查询

    我想使用 CrudRepository 自定义查询 这是我的代码 Repository public interface CustomerRepository extends CrudRepository
  • java 1.8下无法启动eclipse

    java 1 8 升级后我无法启动 eclipse 附上错误截图 这是我的 eclipse 配置设置 我该如何解决 startup plugins org eclipse equinox launcher 1 3 0 v20120522 1
  • 设置 JAVA_HOME 变量时出现问题

    所以我刚刚下载了 Android Studio 并尝试设置 JAVA HOME 变量以便我可以运行它 我使用的是 Windows 8 并按照我找到的所有说明进行操作 但无济于事 转到高级系统设置 gt 环境变量 然后使用包含我的 jre7
  • 链表中的虚拟节点

    问 什么时候使用它们 作业问题 列表中的第一个和最后一个节点 有时用作列表中的第一个和最后一个节点 从未用作列表中的第一个和最后一个节点 维基百科说 哨兵节点是与链接一起使用的专门指定的节点 列表和树作为遍历路径终止符 哨兵节点的作用是 不
  • Microsoft JDBC 中的 JTDS 属性相当于什么?

    我正在将 JTDS 连接更改为 Microsoft JDBC 并且我看到存在于http jtds sourceforge net faq html http jtds sourceforge net faq htmlMicrosoft JD
  • 如何配置嵌入式 MongoDB 以在 Spring Boot 应用程序中进行集成测试?

    我有一个相当简单的 Spring Boot 应用程序 它公开一个小型 REST API 并从 MongoDB 实例检索数据 对 MongoDB 实例的查询通过基于 Spring Data 的存储库 下面的一些关键代码 Main applic
  • 如何使用 Nimbus LookAndFeel 更改 JToolTip 的背景颜色?

    在使用 Nimbus LookAndFeel 的基于 Swing 的 Java 应用程序中 我尝试设置工具提示的背景颜色 因此 我创建了 JToolTip 的子类 并通过重写 createToolTip 在我的组件中使用它 到目前为止一切正
  • spring data jpa 过滤 @OneToMany 中的子项

    我有一个员工测试实体是父实体并且FunGroup信息子实体 这两个实体都是通过employeeId映射 我需要一种方法来过滤掉与搜索条件匹配的子实体 以便结果仅包含父实体和子实体 满足要求 员工测试类 Entity name Employe
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐

  • 在 Struts 2 中动态生成名称和值属性

    我正在将代码从 Struts1 迁移到 Struts2 Struts1代码
  • fork之后,全局变量是否共享?

    考虑这个简单的代码 int myvar 0 int main if fork gt 0 myvar else father do nothing 当子进程增加 myvar 时 该值是否与父进程共享 如 pthread 不 又是 不 它们不会
  • WPF 图像:.Source = Clipboard.GetImage() 未显示

    这个简单的程序不起作用 图像没有出现在窗口中 namespace ClipBoardTest public partial class MainWindow Window public MainWindow InitializeCompon
  • 如何创建带有数据字段的 Java 类

    我正在上一门编程课 该课为我提供了一个项目 但我不知道从哪里开始 希望有人能把我推向正确的方向 我只发布该项目的一部分 以便有人可以向我展示一些代码 以了解它是如何完成的 因为我之前参加过编程课程 但我缺乏实践 创建一个名为 Registr
  • 如何通过javascript设置没有id的textarea的值?

    通常我们运行 javascript 代码来设置任何值 document getElementById id name value 但我有一个这样的页面 div div class class name div div
  • 是否可以在多选下拉列表中设置限制?

    我在我的网站中使用了多项选择下拉列表 这工作正常 我们可以从该列表中选择多个选项 但我只想从该列表中选择 3 个选项 是否可以为此设置限制 我正在使用来自的代码http www aleixcortadellas com main 2009
  • Git 命令显示 .gitignore 忽略了哪些特定文件

    我正在接触 Git 并遇到以下问题 我的项目源树 src refs vendor 我的供应商分支中有代码 当前为 MEF 我将在那里进行编译 然后将引用移至 src refs这就是项目从中获取它们的地方 我的问题是我有我的 gitignor
  • 如何使用jquery获取输入是否具有焦点[重复]

    这个问题在这里已经有答案了 如何使用jquery获取html的输入标签是否具有焦点 如果输入 图像等标签具有焦点 则 keydown 事件将适用于表单 但它不会工作 它的重点是形式 而不是任何标签 如输入 图像等 我该如何解决这个问题 请帮
  • 将 BCD 转换为二进制的最有效方法

    我有下面的代码将 32 位 BCD 值 以两个 uint 半部分提供 转换为 uint 二进制值 提供的值最大可达 0x9999 形成最大值 0x99999999 有没有更好 即更快 的方法来实现这一目标
  • for line in File 是否读取整个文件

    以下代码是为每个循环读取一行 还是在开始迭代之前先将整个文件读入内存 for line in f print line 我的目的是从文件中读取一行 你无法确定 你所能知道的就是它会return一次一行 这Python 标准库文档 says
  • 将多行连接成一行

    我现在正在学习SQL on SQL Server 我需要将多行连接成一列 我已经寻找过示例 但没有找到可以用来满足我的需求的示例 Country ProjectTA Complexity TID Sites Inits Name Unite
  • 主机和 GPU 上 CUDA 添加的不同结果

    我有一个函数可以获取彩色图片并返回其灰色版本 如果我在主机上运行顺序代码 一切都会完美运行 如果我在设备上运行它 结果会略有不同 与正确值相比 1000 个像素中的一个像素不是 1 就是 1 我认为这与转换有关 但我不确定 这是我使用的代码
  • html5 视频标签在 Android PhoneGap 中不起作用

    我已经在 android PhoneGap 中创建了应用程序 我想使用 html5 视频播放器播放视频 我的代码是
  • 追加时返回 null 的字符串

    我的任务是创建一个猜词游戏 您只有 5 次尝试猜测该单词的机会 用户一次输入一个字母 试图找出我的秘密单词 果汁 但您应该使用提示单词构造 每次猜测都会用正确的字母替换星号 如果正确 输出应该是这样的 欢迎来到猜词游戏 您有 5 次机会尝试
  • SQL Server 2008 中从数据库到数据集的位数据类型到枚举类型的映射

    我有一个表 其中有一列Xyz它有bitSQL Server 2008 中的数据类型 我通过数据适配器从表中获取值 并将其存储在DataSet and a DataGridView将显示来自的内容DataSet 在网格视图中 对于列Xyz 显
  • 鼠标光标位图

    我试图从鼠标光标获取位图 但在下一个代码中 我无法获取颜色 CURSORINFO cursorInfo 0 cursorInfo cbSize sizeof cursorInfo if GetCursorInfo cursorInfo IC
  • 如何在resilience4j中配置retryOnResultPredicate?

    我想将failAfterMaxAttempts设置为true以在最大重试结束时获得MaxRetriesExceededException 根据文档 我们需要使用failAfterMaxAttempts设置retryOnResultPredi
  • iOS7 itms-services 方案不起作用?

    我有一个内部应用程序 通过本地 WiFi 分发 在发布页面有一个像这样的链接 itms services action download manifest url http 192 168 1 231 app plist houseApp
  • Python OpenCV 从相机流式传输 - 多线程、时间戳

    我在 Raspberry Pi 3 上运行了简单的 python 脚本 该脚本负责打开视频设备并使用 MJPEG 将数据 800x600 流式传输到 HTTP 端点 当我收到此流时 我的 Raspberry Pi 核心之一可以 100 工作
  • 打印出带有字符的 ASCII 圆和轴

    我必须打印一个圆 将其半径 圆心的坐标作为输入 cx and cy 以及绘制它所用的字符 我为轴和圆编写了一系列 if 块 如果我单独使用它们 它们会很好地工作 但是当我将它们放在同一个方法中时 我必须只有一种方法 它们会以不期望的方式重叠