4

昨日、ロゴについて知りました。90年代に生まれた私は、これまで出会ったことがありませんでした。そこで、Joshua Bell が作成したオンラインのLogo Interpretercircleを使い始め、同心円を作成する関数を作成することにしました。これは私が書いたものです:

cs

to circle
penup forward :radius right 90
pendown repeat 360 [forward 3.14 * :radius / 180 right 1]
penup left 90 back :radius pendown
end

make "radius 30

repeat 160 [circle make "radius :radius + 30]

興味深いことに、描画キャンバスはトロイダル配列です。したがって、円は重なり合ってしまいます。30 の倍数で半径を増やして 160 個の同心円を描くと、次のようなイメージが得られました。

半径が 30 の倍数で増加する 160 個の同心円によって生成されるロゴ スターフィールド。

これは本当に驚くべきことです。一見、本物の夜空の絵のように見えて、星空を描く一般的なアルゴリズムはあるのだろうかと考えさせられました。

ところで、よく見ると、30 x 30ピクセルの正方形のグリッドが見えます。境界が黒いので少しわかりにくいです。

4

2 に答える 2

6

スターフィールドを作成する通常の方法は、次のような疑似コードで x/y 平面内のポイントをランダムに選択することです。

fill image with black
for (however many stars you want)
   x = random() * width
   y = random() * height
   plot star at position x,y 
loop 

派手にしたい場合は、ランダムな明るさの星をプロットすることもできます。また、星はわずかにちらつくので、アニメーションを実行している場合は、フレームごとに明るさを少し変えると、よりリアルに見えるようになります。

于 2013-05-12T14:01:31.957 に答える
5

ドワーフ フォートレスの熱心なプレイヤーとして、私はフラクタル式を使用して星を生成します。私の意見では、コンピューターランダムは十分ではありません。再び DF ゲームから借りて、形状、色、サイズ、グロー、クラスターをランダム化する (意図的に星の塊を追加する) など、さまざまな手順を追加してスターフィールドを強化します。

リアリズムを追求したい場合は、ガスの背景もシミュレートしてください。スペースは、黒一色の背景に白い点ではありません。

最後に、(古い友人であるハッブル望遠鏡から)宇宙の画像を入手し、できるだけ忠実にコピーすることをお勧めします。次に、パラメーターを調整して、好みに合わせます (おそらく、これを使ってゲームを作りたいと思うでしょう)。

PS: コードに関する問題 (非常に基本的なもの) ではなく、設計の問題であると考えているため、コーディング言語を指定していません。Java よりも Flash / Actionscript の方がはるかに簡単にこれを行うことができます。信頼してください

于 2013-05-14T12:03:19.387 に答える