4

我需要使用 java 编写一个程序来进行分配。程序需要在给定坐标输出一个给定半径的圆。到目前为止,我已经创建了一个嵌套在另一个 for 循环中的 for 循环,用于扫描所有坐标并在坐标满足圆方程时打印一个“#”,即:(x−a)^2 +(y− b)^2 =r^2

但是,我的圈子出来时缺少某些坐标。

我相信这是因为我没有考虑到问题中包含的提示之一。

提示是:我们必须处理的离散世界使得很难在等式 1 中表达严格的等式(等式 1 是圆的等式)。你能放宽这种平等以画出更好的圆圈吗?

如果有人能给我关于如何“放松”圆的方程以输出更完整的圆的任何想法,我将不胜感激。

在此处输入图像描述

谢谢!

4

2 回答 2

1

问题是整数算术的舍入会影响您的结果。

整数舍入并不是真正的舍入,而是截断(所有小数部分都丢失,即 (int).9 = 0),因此您可以先尝试在每个结果中添加 0.5(如果数字为负数,则为 -.5)发生截断。

如果这没有帮助,请尝试通过重复该过程但使用 r +/- .5 在同一网格上绘制多个圆圈,以“填充”锯齿状间隙。

如果这还不够,我会在虚拟网格上以更大的比例(可能是 4 倍)和更粗的线(绘制 3 个 r +/- 1 的圆圈)“绘制”一个圆圈,然后将其缩小以适应真实的网格。

于 2013-10-15T02:11:29.300 回答
0

这就是当我将坐标转换为 int 并添加 0.5 时发生的情况,它看起来好多了,但我不确定为什么左侧被遗漏了。

在此处输入图像描述

它不需要那么好,“目标”是这样的:

在此处输入图像描述

于 2013-10-15T02:19:56.823 回答