2015-01-28 1 views
0

Для нашей задачи на этой неделе нам было поручено написать код для разработки программы, которая использует библиотеку StdDraw для печати серии квадратов, которые создают графическое моделирование Решето Эратосфена, похожий на тот, на этой странице вики:Проблемы с определением алгоритма масштабирования окна стандартного рисования с использованием Java

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

программа сама я работала, хотя для чисел последних 100, квадраты смыву экрана. Я мог бы представить код как есть, но id предпочитает, чтобы код мог масштабировать программу до введенного количества квадратов, хотя у меня возникли проблемы с определением алгоритма, который правильно масштабирует окно Standard Draw Java.

Я попытался делить пользовательский ввод более 1000 и добавить его к оси X_MAX и вычесть его с оси Y_MIN, чтобы создать метод типа масштабируемого масштаба, но это было не идеально, и я также попытался сделать его экспоненциальным, хотя это не работает тоже.

Любая идея, что alogrithm я мог бы использовать, чтобы правильно масштабировать окно, чтобы соответствовать любому количеству квадратов пользовательских входов?

Мой код ниже для любого любопытного

Благодаря

http://pastebin.com/L381yQUZ

Рабочая: http://i.stack.imgur.com/HGzJY.jpg не работает: http://i.stack.imgur.com/SpVoE.jpg

+0

Возможно, вы хотите опубликовать изображение своей программы, чтобы лучше понять, с чем можно работать. – NESPowerGlove

+0

ok ill получить снимок экрана – roughosing

+0

Глядя на javadoc для StdDraw, вы можете просто вызвать setScale (...). Если вы знаете размер каждого окна и размер каждого промежутка, вы должны выяснить значение масштаба в зависимости от размера ввода. – markbernard

ответ

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().

+0

, спасибо, что это работает отлично, просто нужно перестроить, где плохо помещал вывод простых чисел! – roughosing