スパイラルポリゴン


8

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

上記のような一連の接続されたポリゴンを描画します。

ただし、上の図に示されていないのは、連続する頂点によって形成されるらせんです。

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

これらの制限は、1つのスパイラルしかマークされないことです。すべてのらせんをマークする必要があります。これは、上記の各スパイラルを回転させて、最大のポリゴンの各頂点から始まるスパイラルがあるようにすることで実行できます。

スパイラルはすべて1つの色である必要がありますが、残りの画像は別の色です。

最も内側のポリゴンは完全にらせんの色である必要があります。

ルール

  • 関数またはプログラムで引数{n、s、p、a}を受け取ります
  • n =内側の反復(ポリゴンの数)
  • s =(通常の)多角形の辺(n> = 3と想定する場合があります)
  • p =(ポリゴンAの頂点から対応する反時計回りの「内側」の頂点までの直線距離)/(Aの辺の全長)。したがって、図の場合、pは約1/3になります。これは、内側の各ポリゴンが、大きい方のポリゴンの辺をその辺の約1/3で満たすためです。
  • a =外部ポリゴンの半径(外接)

n、s、p、またはaの値の制限は、人間がこの種の描画として認識できるものに基づいています。(例:影付きの円なし)および常識(s> = 3、n> = 1)

幸せなゴルフ!最短のプログラムが勝ちます。


1
パラメータpは角度または2つの頂点間の距離で線形ですか?
TheSpanishInquisition 2014年

混乱してしまい申し訳ありませんが、うまくいけば編集により状況が一掃されます。
Stretch Maniac 2014年

他の線とは違う色にしてください。したがって、それぞれの側には2色があります-1つはそれを通過し、残りは異なる色です。
Stretch Maniac 2014年

MartinBüttner@私は彼がすべての螺旋(すべての辺の時計回りの部分)がハイライトカラー(赤など)と基本的な描画色であるべき側の残りの部分でなければならないことを意味だと思う(黒のように。)これが与えるs反時計回りに赤い渦巻きを。ただし、残っているのはs 時計回りの黒い螺旋です。StretchManiac、これは良い質問ですが、あなたが何を意味するのかを確認するために本当にサンプル画像が必要です。賛成投票と反対投票。
レベル川セント

最も内側のポリゴンが満たされる必要があるならば、それは確認するために参考になるものの、Openvoting(私はそれがいけない理解しています。)
レベル川セント

回答:


13

Mathematica、218206バイト

{n,s,p,a}=Input[];t=0;Graphics[(c=Array[a{Cos[u=t+2Pi#/s],Sin@u}&,s+1];m=(f=p#2+(1-p)#&)@@c;a=Norm@m;t=ArcTan@@m;k=#;{Line@{#,x=f@##},If[k<n,Red],Line@{x,#2}}&@@@Thread@{c,RotateLeft@c})&~Array~n,Axes->1>0]

質問で定義されている配列として入力を期待します。例{20, 7, 0.5, 100}

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

または {20, 5, 0.333, 100}

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

これらの画像は以前のバージョンの赤と灰色を使用していますが、新しいバージョンでは反時計回りのらせんに黒を使用し、残りの部分に赤を使用しています。

軸を含めました。それ以外の場合はa、ベクターグラフィックではパラメーターが無意味だからです。またp、角度ではなく位置の線形補間として解釈しました。

未ゴルフ:

{n, s, p, a} = Input[];
t = 0;
Graphics[
 (
    c = Array[a {Cos[u = t + 2 Pi #/s], Sin@u} &, s + 1];
    m = (f = p #2 + (1 - p) # &) @@ c;
    a = Norm@m;
    t = ArcTan @@ m;
    k = #;
    {Line@{#, x = f@##}, If[k < n, Red], Line@{x, #2}} & @@@ 
     Thread@{c, RotateLeft@c}
    ) &~Array~n
 ,
 Axes -> 1 > 0]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.