通常のポリグラム


16

頂点の数n ≥ 3と「ステップサイズ」1 ≤ m < n/2 (2つの接続された頂点間の距離を示す)を指定して、対応する通常のポリグラムのグラフィカル表現を出力します。ポリグラムが複数の閉じたループで構成されている場合、各ループは異なる線色でレンダリングする必要があります。(これが分かりにくいように思える場合は、以下の例で問題を解決してください。)

ルール

問題の合理的な解決策は、これらのルールを自動的に満たす可能性があります-「この黒いブロックは完全にポリグラムですが、あなたはそれを見ることができないので線幅を9000以上に設定しました。」

  • ポリグラムをファイル(ディスクまたは標準出力ストリームに書き込まれる場合があります)にレンダリングするか、画面に表示できます。
  • ベクターグラフィックまたはラスターグラフィックを使用できます。出力をラスタライズする場合、画像のサイズは400x400ピクセル以上である必要があり、ポリグラムの半径(中心から各頂点までの距離)は辺の長さの35%〜50%でなければなりません。
  • ポリグラムの縦横比は1でなければなりません(そのため、頂点は適切な円上にあります)-画像のキャンバスは長方形になります。
  • ポリグラムの線は、半径の5%より太くてはなりません(そしてもちろん、見えるようにゼロ以外の太さでなければなりません)。
  • ポリグラムに加えて軸またはフレームをレンダリングできますが、それ以外は何もレンダリングできません。
  • 任意の(単色の)背景色を選択できます。
  • 複数の閉ループで構成されるポリグラムの場合、少なくとも6つの視覚的に異なる色をサポートする必要があります。これらはすべて背景とは異なる必要があります。(グレースケールは、シェードがスペクトル全体に十分に広がっている場合は問題ありません。)コードは6つ以上のループで機能する必要がありますが、追加のループで色を区別する必要はありません(つまり、再利用することもできます)その時点での以前のループの色)。

これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。

以下は、n = 16(列がに対応しn、行がに対応する)までのすべての出力mです。

ここに画像の説明を入力してください クリックして拡大版をご覧ください。

largeの例として、以下n(n, m) = (29, 11)あり(30, 12)ます:

ここに画像の説明を入力してくださいここに画像の説明を入力してください


アンチエイリアシングなどについてはどうですか?(斜めの線を扱っているため)
オプティマイザー

1
@Optimizerアンチエイリアスアルゴリズムを処方するつもりはありません。線がはっきり見える限り、線はエイリアスまたはアンチエイリアスされます。あなたの最善の判断を使用してください。
マーティンエンダー

回答:


5

MATLAB、85 81

この関数は、画面にプロットを表示します。

function f(n,m)
hold all
axis equal
for k=1:gcd(m,n)
plot(i.^(4*(k:m:n^2)/n))
end

n = 30、m = 12の結果: f(30,12)


この作品は不確かです。私はそれを正しくやった場合、それが出力するであろう、この画像 30のため、12項目:bit.ly/1GFZni7
durron597

@ durron597それは実際にMatlabで動作しますが、関数はすぐに再利用できません。なぜならhold all、次のプロットが最初のプロットの上に描画されるためです...正直。
マーティンエンダー

@MartinBüttner hold onとにかくバイトを保存する必要があります。4バイトを追加すると、再利用可能になります(clf\n
-durron597

私たちはコンセンサスを持っていることが判明し、私は質問を投稿し、数ヶ月前に自分自身に答えました。oOそのメタ投稿によって、これは、リリースするものがなければ無効になりますhold
マーティンエンダー

@MartinBüttnerを変更した場合hold allclf\nhold onその修正にない問題が?
durron597

3

CJam、114

"P2"N400:ASAN6N0aA*aA*q~:M;:K{:CK,f{M*+K%P*2*K/_[mc)\ms)]199f*}_+2ew{~1$.-Af/A,\ff*\f.+{:mo~_3$=@C6%)tt}/}/}/Sf*N*

ASCII PGM形式で画像を出力します。

オンライン試すことができますが、出力はかなり長くなります。あなたは、変更することができます400し、199小さい数字に画像サイズを縮小します。

CJamには画像、描画、線、または形状の概念がないため、ピクセルごとに正方行列で画像を生成しました(1つの数字は各ピクセルのグレーシェードを表します)。

これは結果がどのように見えるかです30 12

ポリグラム


1

Mathematica、70バイト

ListPolarPlot[Table[{2Pi(i+j#2)/#,1},{i,GCD@##},{j,#+1}],Joined->1>0]&

まあ...これは、これまでの両方の提出を打ち負かす私の参照実装です。私は自分の挑戦に勝つつもりはないので、誰かがこれに勝つことを望んでいます。

出力はチャレンジ自体のプロットに似ていますが、ここでは軸を削除していません。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.