对于本周的作业,我们的任务是编写代码来开发一个程序,该程序使用StdDraw库打印一系列正方形,这些正方形产生了Eratosthenes筛选的图形模拟,类似于此维基页面上的那个:
(http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)
程序本身我已经工作了,虽然对于超过100的数字,方块在屏幕上运行。我可以按原样提交代码,但是id更喜欢让代码能够将程序缩放到输入的方块数,尽管我在分析正确缩放Standard Draw Java窗口的算法时遇到了麻烦。
我已经尝试将用户输入划分为1000并将其添加到X_MAX轴并从Y_MIN轴中减去它以创建压缩比例类型方法,但这并不完美,我也尝试将其设为指数,尽管这样做也不行。
知道我可以用什么算法来正确缩放窗口以适应用户输入的任意数量的方块?
对于任何好奇的人来说,我的代码都在下面
由于
工作: http://i.stack.imgur.com/HGzJY.jpg 不工作: http://i.stack.imgur.com/SpVoE.jpg
答案 0 :(得分:1)
看起来“scale”定义了用户坐标系,因此您需要计算筛子的尺寸,然后设置坐标系,使筛子位于其中间,或者在其周围加一点填充物。 / p>
在绘制正方形之前,你需要在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()
的任何其他虚假来电。