Düzenli Çokgenler


16

Köşelerin sayısı n ≥ 3ve "adım boyutu" 1 ≤ m < n/2 (bağlı iki köşe arasındaki mesafeyi gösteren) göz önüne alındığında, karşılık gelen düzenli çokgenin grafiksel bir gösterimini çıkarın . Çokgen birden fazla kapalı döngüden oluşuyorsa, her döngü farklı bir çizgi renginde işlenmelidir. (Bu kafa karıştırıcı geliyorsa, aşağıdaki örnekler umarım bazı şeyleri temizlemelidir.)

kurallar

Soruna makul bir çözüm muhtemelen bu kuralları otomatik olarak karşılayacaktır - "Bu siyah blok tamamen bir poligramdır, ancak göremezsiniz çünkü Çizgi genişliğini 9000'in üzerine ayarladım. "

  • Çokgeni bir dosyaya (diske veya standart çıktı akışına yazılabilir) oluşturabilir veya ekranda görüntüleyebilirsiniz.
  • Vektör veya raster grafiklerini kullanabilirsiniz. Çıktınız rasterleştirilirse, görüntünüzün 400x400 piksel veya daha fazla boyutu olmalıdır ve çokgenin yarıçapı (merkezden her tepe noktasına kadar olan mesafe) yan uzunluğun% 35 ila% 50'si arasında olmalıdır.
  • Polygramın en boy oranı 1 olmalıdır (böylece köşeleri uygun bir daire üzerinde olmalıdır) - görüntünün tuvali dikdörtgen olabilir.
  • Polygram çizgileri, yarıçapın% 5'inden daha kalın olmamalıdır (ve elbette, görünür olması için sıfır olmayan kalınlığa sahip olmalıdır).
  • Polygrama ek olarak eksenler veya bir çerçeve oluşturabilirsiniz, ancak başka bir şey yapamazsınız.
  • Herhangi bir (düz) arka plan rengi seçebilirsiniz.
  • Birden fazla kapalı döngüden oluşan çokgenler için , hepsi arka plandan farklı olması gereken, görsel olarak farklı en az 6 rengi desteklemelisiniz . (Gölgeler spektrumdan yeterince yayılmışsa gri tonlama iyidir.) Kodunuz hala 6'dan fazla döngüde çalışmalıdır, ancak renklerin ek döngüler için ayırt edilebilir olması gerekmez (yani, önceki döngülerdeki renkler).

Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır.

Örnekler

İşte tüm çıkışlar n = 16(sütunun karşılık geldiği nve satırın bulunduğu yer m):

resim açıklamasını buraya girin Büyütmek için tıklayınız.

Daha büyük örnek olarak n, (n, m) = (29, 11)ve (30, 12):

resim açıklamasını buraya girinresim açıklamasını buraya girin


Kenar yumuşatma ve diğer şeylere ne dersiniz? (Açılı çizgilerle uğraştığımızdan beri)
Optimizer

1
@Optimizer Bir kenar yumuşatma algoritması reçete etmeyeceğim. Çizgiler açıkça görülebildikleri sürece takma veya kenar yumuşatılmış olabilir. En iyi kararınızı kullanın.
Martin Ender

Yanıtlar:


5

MATLAB, 85 81

Fonksiyon ekranda bir çizim gösterir.

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 için sonuç: f (30,12)


Bunun işe yaradığından emin değilim; eğer doğru bir şekilde yapmışsam , bu görüntüyü 30, 12 için çıktılar . Bakınız: bit.ly/1GFZni7
durron597

@ durron597 Aslında Matlab'da çalışıyor, ancak fonksiyon hemen tekrar kullanılamıyor, çünkü bir hold allsonraki arsaya ilkinin üstüne çiziliyor ... dürüst.
Martin Ender

@ MartinBüttner Yine de hold onbir bayt kaydetmek olmalı ; dört bayt eklerseniz tekrar kullanılabilir hale gelir ( clf\n)
durron597

Dışarı Dönüşler biz fikir birliğine sahip ve hatta soru haberi ve bir kaç ay önce kendim cevap. Yani bu meta yazı ile, bu yayınlanacak bir şey olmadan geçersiz olacaktır hold.
Martin Ender

@ MartinBüttner Eğer değiştirirseniz hold alliçin clf\nhold ono çözer mi sorunu?
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*

Görüntüyü ASCII PGM formatında çıktılar.

Şunları yapabilirsiniz çevrimiçi denemek , ama çıkış oldukça uzun. Görüntü boyutunu azaltmak için 400ve 199daha küçük sayıları değiştirebilirsiniz .

CJam, görüntü, çizim, çizgi veya şekil kavramına sahip değildir, bu yüzden görüntüyü kare matriste, piksel piksel (her piksel için gri gölgeyi temsil eden bir sayı) oluşturdum.

Sonuç şöyle görünür 30 12:

Polygram


1

Mathematica, 70 bayt

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

...Ey ... bu benim baţvurumu, her iki sunumu da yendi. Kendi mücadelemi kazanma niyetim yok, bu yüzden birinin bunu yeneceğini umuyorum.

Buradaki eksenleri kaldırmıyorum dışında çıktı, meydan okumadaki araziler gibidir:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.