【问题标题】:Having trouble determining an algorithm for scaling the Standard Draw window using Java无法确定使用 Java 缩放标准绘图窗口的算法
【发布时间】:2015-01-28 18:29:07
【问题描述】:

在本周的任务中,我们的任务是编写代码来开发一个程序,该程序使用 StdDraw 库打印一系列正方形,生成埃拉托色尼筛的图形模拟,类似于此 wiki 页面上的那个:

(http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)

我正在运行的程序本身,尽管对于超过 100 的数字,方块会从屏幕上消失。我可以按原样提交代码,但我更喜欢让代码能够将程序缩放到输入的正方形数量,尽管我在划分正确缩放 Standard Draw Java 窗口的算法时遇到了麻烦。

我尝试将用户输入除以 1000 并将其添加到 X_MAX 轴并从 Y_MIN 轴中减去它以创建捏缩放类型方法,但这并不完美,我也尝试将其设为指数,尽管这样做也不行。

知道我可以使用什么算法来正确缩放窗口以适应用户输入的任意数量的正方形吗?

下面是我的代码供任何好奇的人参考

谢谢

http://pastebin.com/L381yQUZ

工作: http://i.stack.imgur.com/HGzJY.jpg 不工作: http://i.stack.imgur.com/SpVoE.jpg

【问题讨论】:

  • 可能想要张贴您的程序外观的图片,以便更好地了解可以使用的内容。
  • 好的,我现在就截屏
  • 查看 StdDraw 的 javadoc 你可以调用 setScale(...)。如果您知道每个框的大小和每个间隙的大小,您应该能够根据输入的大小计算出一个比例值。
  • 是的,这就是我试图做的,但我无法想出一个有效的算法

标签: java graphics sieve-of-eratosthenes stddraw


【解决方案1】:

看起来“比例”定义了用户坐标系,因此您需要计算筛子的尺寸,然后设置坐标系,使筛子位于中间,周围可能有一点填充。

在绘制正方形之前,您需要在 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() 的任何其他虚假调用。

【讨论】:

  • 感谢这个完美的作品,只需要重新排列放置素数文本输出的位置!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2020-08-08
  • 2012-02-19
  • 1970-01-01
相关资源
最近更新 更多