好的,所以我正在尝试为作业绘制一个几何图形,我完成了95%。我唯一的问题是,无论我多么努力“平滑”它,我仍然得到一些不起作用的东西。 (我试过添加.5)。我想重新创建的数字是椭圆形的。 主方法使用四个整数:x = 14,y = 8,radiusA = 5,radiusB = 1
输出应该是什么样的。
public static void DrawingFigures(int x, int y, int radiusA, int radiusB) {
for (int i = 0; i <= 20; i++) {
for (int j = 0; j <= 20; j++) {
double dx = Math.pow(((j - x) / radiusA), 2);
double dy = Math.pow(((i - y) / radiusB), 2);
if (dx + dy == 1 && dx + dy == 1) {
System.out.print("#");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
现在这就是我之前显示的前一种方法。
答案 0 :(得分:0)
你正在进行整数除法。在每次除法之前尝试将(j-x)
和(i-y)
投射到double
,否则每个除法的结果将四舍五入到下面的整数。
答案 1 :(得分:0)
你遇到的两个问题是:
尝试使用x = 27,y = 7,radiusA = 25,radiusB = 5并查看结果。改为double将提高精度。
以下是使用上述值修改的代码版本(使用java Test 25 5
运行):
public class Test {
public static void main(String[] arg) {
Test.DrawingFigures(Double.parseDouble(arg[0]), Double.parseDouble(arg[1]));
}
public static void DrawingFigures(double radiusA,
double radiusB) {
DrawingFigures(radiusA, radiusB, radiusA, radiusB);
}
public static void DrawingFigures(double x, double y, double radiusA,
double radiusB) {
for (double i = 0; i <= 2 * radiusB; i++) {
for (double j = 0; j <= 2 * radiusA; j++) {
if (Math.pow(((j - x) / radiusA), 2) + Math.pow(
((i - y) / radiusB), 2) == 1.0d) {
System.out.print("#");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
请注意,在代码中我使用半径值来计算x和y,因此它更好地缩放而不是硬编码i<=20
,j<=20