无法确定使用 Java 缩放标准绘图 window 的算法
Having trouble determining an algorithm for scaling the Standard Draw window using Java
对于我们本周的作业,我们的任务是编写代码来开发一个程序,该程序使用 StdDraw 库打印一系列正方形,这些正方形产生埃拉托色尼筛法的图形模拟,类似于这个维基页面:
(http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)
我正在运行的程序本身,尽管对于超过 100 的数字,方块 运行 不在屏幕上。我可以按原样提交代码,但我更喜欢让代码能够将程序缩放到输入的方块数量,尽管我在划分正确缩放标准绘图的算法时遇到了麻烦 Java window。
我尝试将用户输入除以 1000 并将其添加到 X_MAX 轴并从 Y_MIN 轴中减去它以创建捏缩放类型方法,但这并不完美我也试着让它呈指数增长,尽管这也不起作用。
知道我可以使用什么算法来正确缩放 window 以适应用户输入的任意数量的方块吗?
我的代码在下面供任何好奇的人使用
谢谢
工作:
http://i.stack.imgur.com/HGzJY.jpg
不工作:
http://i.stack.imgur.com/SpVoE.jpg
看起来 "scale" 定义了用户坐标系,因此您需要计算筛子的尺寸,然后设置坐标系,使筛子位于其中间,可能需要一些填充周围。
在绘制正方形之前,在 main()
方法中需要这样的东西:
double columnWidth = 0.105;
double columnCount = Math.sqrt(input);
double sieveWidth = columnCount * columnWidth;
double sieveHeight = sieveWidth;
double sieveTop = 0.95;
double sieveLeft = 0.045;
double padding = 0.15;
StdDraw.setXscale(sieveLeft - padding, sieveLeft + sieveWidth + padding);
StdDraw.setYscale(sieveTop - sieveHeight - padding, sieveTop + padding);
确保删除对 setXScale()
和 setYScale()
的任何其他虚假调用。
对于我们本周的作业,我们的任务是编写代码来开发一个程序,该程序使用 StdDraw 库打印一系列正方形,这些正方形产生埃拉托色尼筛法的图形模拟,类似于这个维基页面:
(http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)
我正在运行的程序本身,尽管对于超过 100 的数字,方块 运行 不在屏幕上。我可以按原样提交代码,但我更喜欢让代码能够将程序缩放到输入的方块数量,尽管我在划分正确缩放标准绘图的算法时遇到了麻烦 Java window。
我尝试将用户输入除以 1000 并将其添加到 X_MAX 轴并从 Y_MIN 轴中减去它以创建捏缩放类型方法,但这并不完美我也试着让它呈指数增长,尽管这也不起作用。
知道我可以使用什么算法来正确缩放 window 以适应用户输入的任意数量的方块吗?
我的代码在下面供任何好奇的人使用
谢谢
工作: http://i.stack.imgur.com/HGzJY.jpg 不工作: http://i.stack.imgur.com/SpVoE.jpg
看起来 "scale" 定义了用户坐标系,因此您需要计算筛子的尺寸,然后设置坐标系,使筛子位于其中间,可能需要一些填充周围。
在绘制正方形之前,在 main()
方法中需要这样的东西:
double columnWidth = 0.105;
double columnCount = Math.sqrt(input);
double sieveWidth = columnCount * columnWidth;
double sieveHeight = sieveWidth;
double sieveTop = 0.95;
double sieveLeft = 0.045;
double padding = 0.15;
StdDraw.setXscale(sieveLeft - padding, sieveLeft + sieveWidth + padding);
StdDraw.setYscale(sieveTop - sieveHeight - padding, sieveTop + padding);
确保删除对 setXScale()
和 setYScale()
的任何其他虚假调用。