एक बॉक्स में एक सर्पिल ड्रा


13

कुंडली

यह ज्यामितीय सर्पिल जटिल दिखता है, लेकिन इसे आकर्षित करना काफी सरल है; निम्नलिखित बॉक्स लें:

डिब्बा

बॉक्स के कोने के बीच एक सीधी रेखा खींचें और अगले कोने में कुछ दूरी तय करें।

1 पंक्ति

इस पैटर्न को अंदर की ओर जारी रखें, हमेशा उस रेखा से दूर रहें जो अगली पंक्ति के कोने से दूर हो। यहाँ कुछ और पंक्तियाँ हैं।

मोर की रेखाएँ

जैसा कि आप देख सकते हैं, जैसा कि पैटर्न जारी है, सर्पिल केंद्र के पास पहुंचता है और आपके द्वारा खींचे गए बक्से घूमना शुरू कर देते हैं। ध्यान दें कि दूरी निरंतर बनी हुई है, कोण की परवाह किए बिना।

चुनौती

प्रेरणा (और उस अद्भुत व्यक्ति का भी धन्यवाद जिसने मुझे इस अवधारणा से परिचित कराया <3)

1 से 25 तक एक संख्यात्मक (संभवतः आंशिक) इनपुट को देखते हुए, एक छवि डिस्क पर लिखें जो इस पैटर्न का उपयोग करता है या स्क्रीन पर आउटपुट प्रदर्शित करता है, जहां प्रत्येक कोने से दूरी इनपुट द्वारा विभाजित बॉक्स के एक प्रारंभिक पक्ष की दूरी है । जब तक निर्दिष्ट कोने से दूरी अगले पक्ष की लंबाई से अधिक होती है, तब तक आवक जारी रखें।

नियम

  • आप इस सर्पिल निर्माण के लिए बिल्ट-इन का उपयोग नहीं कर सकते हैं, लेकिन आप इमेज प्रोसेसिंग बिल्डिंस का उपयोग कर सकते हैं।
  • यदि आप डिस्क पर लिखते हैं, तो आपको किसी भी .jpg, .gif, .tiff, .bbm, .ppm, और .png में एक छवि का उत्पादन करना होगा।
  • प्रारंभिक पक्ष की लंबाई कम से कम 500 पिक्सेल होनी चाहिए।
  • प्रारंभिक कोने जो भी आप चुनते हैं हो सकता है।
  • हमेशा की तरह, स्टैण्डर्ड लोफॉल्स को बंद कर दिया गया है।


क्या इस सर्पिल को कितने स्तरों के लिए न्यूनतम होना चाहिए?
लीजनमोनमाल 978

@ LegionMammal978 मैं 25 से अधिक इनपुट के लिए कभी नहीं पूछूंगा, मैं इसे जोड़ूंगा।
Addison Crump

सहित .pbm या .ppm कम चित्रमय भाषाओं में से कुछ मदद कर सकता है।
ट्राइकोप्लाक्स

जवाबों:


12

जूते (रूबी) 163 बाइट्स

जूते एक रूबी-आधारित जीयूआई टूलकिट है।

Shoes.app{n=ask('').to_f
r=s=5E2
a=[0,s*i="i".to_c,s*i+s,s,0]
(q=a[-3]-a[-4]
r=q.abs/s*n
a<<a[-4]+q/r)while r>1
1.upto(a.size-1){|j|line *(a[j-1].rect+a[j].rect)}}

Ungolfed

Shoes.app{ 
  n=ask('').to_f                 #Open a dialog box with no message, get n from user
  r=s=5E2                        #Initialize s to sidelength=500. r can be initialized to any vale, we use the same one for convenience.
  a=[0,s*i="i".to_c,s*i+s,s,0]   #intialize array a with 5 points needed to draw a square, in complex number format (first point=0 is duplicated.)

  (
    q=a[-3]-a[-4]                #find the vector from point plotted 4 before to the following point (plotted 3 before)
    r=q.abs/s*n                  #r is the scale factor
    a<<a[-4]+q/r                 #add a new point derived from a[-4] by moving toward a[-3] by a distance s/n 
  )while r>1                     #break loop when length of line is less than s/n

  1.upto(a.size-1){|j|           #for all points except 1st and last one
    line *(a[j-1].rect+a[j].rect)#take the two complex numbers correspondimg to the current and previous point,
  }                              #convert to 2-element arrays (rectangular coordinates
}                                #combine to make a 4-element array, use * to splat into 4 parameters, and draw using the line method.

आउटपुट n = 4 और n = 25 है

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि आकार हमेशा एक त्रिभुज में समाप्त होता है, जो आगे एक रेखा तक ढह जाता है। के size-1साथ बदलने sizeसे आउटपुट की उपस्थिति पर कोई फर्क नहीं पड़ता है और 2 बाइट्स बचेंगे, लेकिन मैंने इसे सैद्धांतिक शुद्धता के लिए छोड़ दिया।

आउटपुट n = 300

ओपी द्वारा एक टिप्पणी से प्रेरित, उच्च संख्या बहुत अच्छी लगती है!

यहाँ छवि विवरण दर्ज करें


क्या lineनीचे पंक्ति में निम्नलिखित स्थान आवश्यक है?
Addison Crump

@CoolestVeto दुर्भाग्य से हाँ। के *लिए चार मापदंडों में जटिल संख्याओं के रूपांतरण के द्वारा गठित चार तत्व सरणी धर्मान्तरित line। मानक सिंटैक्स line(*(a[j-1].rect+a[j].rect))कोष्ठक को हटा रहा है और एक स्थान जोड़कर पहले से ही एक बाइट की बचत है। अंतरिक्ष को हटाने से रूबी lineकोष्ठक की सामग्री से गुणा करने की कोशिश करता है, जिससे कोई मतलब नहीं है और यह एक त्रुटि फेंकने का कारण बनता है। यहाँ कुछ गोल्फिंग की जानी है, बस इतना ही नहीं। मैं बाद में इस पर गौर करूंगा।
लेवल रिवर सेंट

मैं लगभग निश्चित हूँ कि आप तर्क के आसपास के परनों से छुटकारा पा सकते हैं upto। इसके अलावा, क्या आपने ('')बाद को हटाने की कोशिश की है ask? मैंने इसका परीक्षण नहीं किया है, लेकिन यह अनावश्यक हो सकता है
फंड मोनिका का मुकदमा

3
100 के लिए आउटपुट सुंदर है
एडिसन क्रम्प

1
@CoolestVeto मैं n = 100 को थोड़ा परेशान करता हूं; यह बाहर कूदता है और मुझ पर सभी 3 डी चला जाता है। मैंने n = 300 पोस्ट किया है जो समग्र रूप से गहरा है और इसलिए शांत है।
लेवल रिवर सेंट

3

जावा, 1056 1005 985 948 522 508 507 504 502 501 493 492 488 474 465 455 बाइट्स

import java.awt.*;interface G{static void main(String[]a){new Frame(){int s=499,o=s,e,i,x,y;{o/=new Float(a[0]);add(new Component(){public void paint(Graphics g){g.drawRect(0,0,s,s);int[]p={s,s,s,0,0,0,0,s};for(double d=s,t;d>o;t=o/d,i=e*2,x=(int)((1-t)*p[i]+t*p[(2+i)%8]+.5),y=(int)((1-t)*p[1+i]+t*p[(3+i)%8]+.5),g.drawLine(p[(6+i)%8],p[(7+i)%8],x,y),p[i]=x,p[1+i]=y,e=++e%4,i=e*2,x=p[(2+i)%8]-p[i],y=p[(3+i)%8]-p[1+i],d=Math.sqrt(x*x+y*y));}});show();}};}}

आकार को कम करने के अन्य तरीकों के लिए कूलस्टेवेटो और ईसीएस के लिए धन्यवाद। :-)


ठीक है, मैंने इसे थोड़ा नीचे कर दिया है, लेकिन यह सुनिश्चित करने के लिए और अधिक संभव है, मैंने चरित्र-न्यूनतर होने के लिए बहुत अधिक ऑब्जेक्ट-उन्मुख कोडित किया :-D
वैम्पायर

@AlexA। अगर मैं बाद में अपने कोड में सुधार करता हूं और इसे कम करता हूं, तो क्या मैं पोस्ट को छोटे संस्करण के साथ अपडेट कर सकता हूं?
वैम्पायर

@ BjörnKautler यूप, यह अच्छा है! :) मैं अभी कुछ जगहों पर काम कर रहा हूँ।
एडिसन क्रम्प

1
@ BjörnKautler आप निश्चित रूप से कर सकते हैं!
एलेक्स ए।

1
वाह, मैंने कभी नहीं देखा 500 से अधिक बाइट्स एक जवाब बंद chucked। : O
Addison Crump

1

ग्रोवी, 412 411 403 398 बाइट्स

import java.awt.*
new Frame(){
def s=499,o=s/(args[0]as float),e=0,i,a,b,d,t
{add new Component(){void paint(Graphics g){g.drawRect 0,0,s,s
p=[s,s,s,0,0,0,0,s]
for(d=s;d>o;d=Math.sqrt(a*a+b*b)){t=o/d
i=e*2
a=(int)((1-t)*p[i]+t*p[(2+i)%8]+0.5)
b=(int)((1-t)*p[1+i]+t*p[(3+i)%8]+0.5)
g.drawLine p[(6+i)%8],p[(7+i)%8],a,b
p[i]=a
p[1+i]=b
e=++e%4
i=e*2
a=p[(2+i)%8]-p[i]
b=p[(3+i)%8]-p[1+i]}}}
show()}}

मुझे समस्या है कि इसे ग्रूवी 2.4.4 के साथ चलाएं: Caught: groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() at s$1.<init>(s.groovy:3) at s.run(s.groovy:2)
डाइटर

2.3.9 के साथ यह मेरे लिए ठीक काम करता है।
पिशाच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.