0

今週の課題では、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

4

1 に答える 1

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

于 2015-01-28T20:32:57.797 に答える