Poligon Spiral


8

masukkan deskripsi gambar di sini

Gambarlah serangkaian poligon yang terhubung seperti yang ditunjukkan di atas.

Namun, yang tidak ditunjukkan oleh gambar di atas adalah spiral yang dibentuk oleh vertex berturut-turut:

masukkan deskripsi gambar di sini

Keterbatasan ini adalah bahwa hanya ada 1 spiral yang ditandai. Anda harus menandai semua spiral. Ini dapat dilakukan dengan memutar setiap spiral yang ditunjukkan di atas sehingga ada spiral yang dimulai pada setiap titik dari poligon terbesar.

Spiral semua harus satu warna, sedangkan sisanya dari gambar lain.

Poligon terdalam harus sepenuhnya warna spiral.

Aturan

  • Anda akan menerima argumen {n, s, p, a} dalam suatu fungsi atau program
  • n = iterasi ke dalam (jumlah poligon)
  • s = sisi poligon (reguler) (Anda dapat mengasumsikan n> = 3)
  • p = (jarak linier dari titik poligon A ke titik "dalam" berlawanan arah jarum jam yang berlawanan) / (panjang total sisi A). Jadi untuk diagram, p akan menjadi sekitar 1/3 karena setiap poligon bagian dalam memenuhi sisi poligon yang lebih besar sekitar 1/3 dari jalan melalui sisi itu.
  • a = jari-jari (membatasi) poligon eksterior

Batas dari salah satu nilai n, s, p atau a didasarkan pada apa yang dapat dianggap sebagai jenis gambar oleh manusia. (mis. tidak ada lingkaran yang diarsir) serta akal sehat (s> = 3, n> = 1)

Selamat bermain golf! Kemenangan program terpendek.


1
Apakah parameter plinear dalam sudut atau jarak antara dua simpul?
TheSpanishInquisition

Maaf atas kebingungannya, semoga hasil editnya akan beres.
Stretch Maniac

Anda harus mewarnainya dengan warna yang berbeda dari garis lainnya. Jadi masing-masing pihak akan memiliki 2 warna - satu yang berjalan p melewatinya, dan sisanya warna yang berbeda.
Stretch Maniac

@ MartinBüttner Saya pikir maksudnya semua spiral (bagian searah jarum jam dari semua sisi) harus menjadi warna highlight (seperti merah) dan sisa sisi harus menjadi warna latar depan dasar (seperti hitam.) Ini akan memberikan sspiral merah berlawanan arah jarum jam . Namun, yang tersisa adalah spiral hitam s searah jarum jam ! StretchManiac, ini adalah pertanyaan yang bagus tapi kami benar-benar membutuhkan contoh gambar untuk melihat apa yang Anda maksud. Upvoting dan closevoting.
Level River St

Openvoting, meskipun akan sangat membantu untuk mengkonfirmasi jika poligon terdalam harus diisi (saya mengerti seharusnya tidak.)
Level River St

Jawaban:


13

Mathematica, 218 206 byte

{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]

Mengharapkan input sebagai array seperti yang didefinisikan dalam pertanyaan, misalnya {20, 7, 0.5, 100}:

masukkan deskripsi gambar di sini

atau {20, 5, 0.333, 100}

masukkan deskripsi gambar di sini

Gambar-gambar ini masih menggunakan merah dan abu-abu dari versi sebelumnya, tetapi versi baru menggunakan hitam untuk spiral berlawanan arah jarum jam dan merah untuk sisanya.

Saya sudah memasukkan sumbu, karena kalau tidak, aparameternya tidak ada artinya dengan grafik vektor. Saya juga telah menafsirkan psebagai interpolasi linier di posisi, bukan di sudut.

Tidak Disatukan:

{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]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.