कॉर्टू सर्पिल को प्लॉट करना


33

कोर्नू सर्पिल प्रकाश प्रचार की राह अभिन्न के लिए फेनमैन पद्धति का उपयोग करके गणना की जा सकती। हम निम्नलिखित विवेक का उपयोग करते हुए इस अभिन्न को अनुमानित करेंगे।

इस छवि के रूप में एक दर्पण पर विचार करें, जहां Sप्रकाश स्रोत है और Pवह बिंदु जहां हम प्रकाश एकत्र करते हैं। हम प्रकाश किरण Sको दर्पण में प्रत्येक बिंदु से एक सीधी किरण में और फिर बिंदु तक मान लेते हैं P। हम दर्पण को Nखंडों में विभाजित करते हैं, इस उदाहरण में 13, पर लेबल किया Aगया है M, ताकि प्रकाश की पथ लंबाई हो R=SN+NP, जहां दर्पण खंड SNसे दूरी है , और इसी तरह के लिए । ( नोट छवि में अंक की दूरी है कि और दर्पण के लिए दृश्य प्रयोजनों के लिए एक बहुत छोटा किया गया है,। ब्लॉक बल्कि अप्रासंगिक है, और विशुद्ध रूप से रखा दर्पण के माध्यम से प्रतिबिंब सुनिश्चित करने, और से प्रत्यक्ष प्रकाश से बचने के लिए करने के लिएSNPSPQSP)

प्रतिबिंबित दर्पण

किसी दी गई तरंग संख्या के kलिए प्रकाश की किरण के चरण की गणना इस प्रकार की जा सकती है exp(i k R), जहां iकाल्पनिक इकाई है। इन सभी फ़ासरों को बाएं मिरर सेगमेंट से दाएं तरफ प्लॉट करने से कॉर्नू सर्पिल की ओर जाता है। 13 तत्वों और इसके लिए नीचे दिए गए मान दिए गए हैं:

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

बड़े N, यानी बहुत सारे दर्पण खंडों के लिए, सर्पिल "सच" कॉर्नू सर्पिल के पास पहुंचता है। इस छवि को विभिन्न मूल्यों का उपयोग करके देखें N:

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

चुनौती

किसी दिए गए के लिए Nआज्ञा देना x(n)हो एक्स के -coordinate केंद्र n वें दर्पण खंड ( n = 0,1,2,...,N):

x(n) := n/N-0.5

आइए n-th दर्पण खंड SN(n)की दूरी तय करें S = (-1/2, 1000):

SN(n) := sqrt((x(n)-(-1/2))^2 + 1000^2) 

और इसी तरह

NP(n) := sqrt((x(n)-1/2)^2 + 1000^2) 

तो n -th प्रकाश किरण द्वारा की गई कुल दूरी है

R(n) := SN(n) + NP(n) 

फिर हम n -th मिरर सेगमेंट के माध्यम से जाने वाली प्रकाश किरण के चरण (एक जटिल संख्या) को परिभाषित करते हैं

P(n) = exp(i * 1e6 * R(n)) 

अब हम संचयी रकम पर विचार करते हैं (एक अभिन्न अंग के रूप में)

C(n) = P(0)+P(1)+...+P(n)

लक्ष्य अब बिंदुओं के माध्यम से एक टुकड़े-टुकड़े रैखिक वक्र की साजिश रच रहा है (C(0), C(1), ..., C(n)), जहां काल्पनिक भाग को C(n)उसके वास्तविक हिस्से के खिलाफ साजिश रची जानी चाहिए।

इनपुट तत्वों की संख्या होना चाहिए N, जो 100 की एक न्यूनतम और कम से कम 1 लाख तत्वों की एक अधिकतम (अधिक पाठ्यक्रम की अनुमति की है) है।

उत्पादन एक साजिश या कम से कम 400 × 400 पिक्सेल, या वेक्टर ग्राफिक्स का उपयोग कर के किसी भी प्रारूप में छवि होना चाहिए। रेखा का रंग, कुल्हाड़ी के पैमाने आदि महत्वहीन हैं, जब तक कि आकार दिखाई नहीं देता।

चूंकि यह कोड-गोल्फ है, बाइट्स में सबसे छोटा कोड जीतता है।

कृपया ध्यान दें कि यह एक वास्तविक कॉर्नू सर्पिल नहीं है, लेकिन इसके लिए एक अनुमान है। Fresnel सन्निकटन का उपयोग करके प्रारंभिक पथ इंटीग्रल का अनुमान लगाया गया है, और दर्पण दोनों अनंत लंबाई का नहीं है और इसमें अनंत संख्या में सेगमेंट नहीं हैं, साथ ही उल्लेख किया गया है कि यह व्यक्तिगत किरणों के आयाम द्वारा सामान्यीकृत नहीं है।


5
मैं के मूल्यों था nसे लेकर 1, लेकिन लुइस और flawr, जो परिवर्तन के समय में केवल answerers थे के साथ समझौते में, मैं से यह हो करने के लिए सही 0है, जो दर्पण सममित बनाता है और चुनौती के बाकी के साथ समझौते में है। क्षमा याचना।
एड्रियन

जवाबों:


20

MATL , 29 26 25 बाइट्स

3 बाइट्स के लिए @ एड्रियन को धन्यवाद!

Q:qG/q1e3YytP+1e6j*ZeYsXG

यहाँ इनपुट के साथ एक उदाहरण है ... क्योंकि आज MATL का पहला जन्मदिन है! (और 2016 एक लीप वर्ष है; सुधार के लिए @MadPhysicist का धन्यवाद)।365 366

या इसे MATL ऑनलाइन में आज़माएं! (प्रयोगात्मक संकलक; पृष्ठ को ताज़ा करें यदि यह काम नहीं करता है)।

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

व्याख्या

Q:q    % Input N implicitly. Push range [0 1 ... N] (row vector)
G/     % Divide by N, element-wise
q      % Subtract 1. This gives NP projected onto the x axis for each mirror element
1e3    % Push 1000. This is NP projected onto the y axis
Yy     % Hypotenuse function: computes distance NP
tP     % Duplicate, reverse. By symmetry, this is the distance SN
+      % Add. This is distance SNP for each mirror element (row vector)
1e6j   % Push 1e6*1i
*      % Multiply
Ze     % Exponential
Ys     % Cumulative sum
XG     % Plot in the complex plane

8
निकटतम तौलिया पकड़कर फेंकता है ...
मैजिक ऑक्टोपस Urn

10
जन्मदिन मुबारक हो MATL!
स्वेअर

1
क्या 2016 एक लीप वर्ष नहीं है?
मैड फिजिसिस्ट

14

MATLAB, 88 84 81 79 बाइट्स

g=@(x)hypot(1e3,x);h=@(x)plot(cumsum(exp(1e6i*(g(x)+g(1-x)))));f=@(N)h(0:1/N:1)

धन्यवाद @LuisMendo -3 बाइट्स के लिए, और -2 बाइट्स के लिए @ Adriaan!

समारोह gसुदूर क्रिया हम में उपयोग है SNऔर NP, और hगणना के साथ साथ साजिश के बाकी है। fवास्तविक कार्य जो हम चाहते हैं और यह उस वेक्टर का निर्माण करता है जिसकी हमें आवश्यकता है।

इसके लिए आउटपुट है N=1111

एन = 1111 के लिए आउटपुट


12

डाउनलोड , 107 बाइट्स

1
1E6
InputBox[a]
Polyline[Sequence[Sum[Sequence[e^(i*b(((k/a)^2+b)^.5+((k/a-1)^2+b)^.5)),k,0,a],l],l,1,a]]

प्रत्येक पंक्ति को इनपुट बार में अलग से दर्ज किया जाता है। इनपुट बॉक्स से इनपुट लिया जाता है।

यहाँ निष्पादन की एक झलक है:

कॉर्नू सर्पिल

यह काम किस प्रकार करता है

में प्रवेश कर 1और 1E6परोक्ष रूप से मान प्रदान करती है aऔर bक्रमशः। अगला, InputBox[a]कमांड एक इनपुट बॉक्स बनाता है और इसे साथ जोड़ता है a

भीतरी Sequenceआदेश के मूल्यों पूर्णांक से अधिक iterates kसे 0करने के लिए aसमावेशी। के प्रत्येक मूल्य के लिए k, अभिव्यक्ति का उपयोग करके आवश्यक दूरी की गणना की जाती है ((k/a)^2+b)^.5+((k/a-1)^2+b)^.5)। यह तब गुणा किया जाता है i*b, जहां iकाल्पनिक इकाई होती है, और eपरिणाम के लिए उठाया जाता है। इससे जटिल संख्याओं की सूची तैयार होती है।

इसके बाद, बाहरी समावेशी Sequenceमानों को समावेशी lसे अधिक मानकर पुनरावृत्ति करता है। के प्रत्येक मूल्य के लिए , सूची के पहले तत्वों को कमांड का उपयोग करके अभिव्यक्त किया जाता है , फिर से जटिल संख्याओं की सूची तैयार की जाती है।1allSum

जप जटिल संख्या a + biको बिंदु के रूप में मानता है (a, b)। इसलिए, Polylineकमांड का उपयोग करके जटिल संख्याओं को प्लॉट किया जा सकता है , जो सीधी रेखा सेगमेंट के साथ जटिल संख्या सूची में सभी बिंदुओं को जोड़ता है।


5

आर, 102 82 80 बाइट्स

संपादित करें: दूरी की गणना के लिए फ़ंक्शन को स्क्रैप किया गया

Edit2: @Plannapus (ओह अच्छी तरह से) द्वारा लगभग समान जवाब दिया गया

Edit3: @Plannapus के साथ-साथ 2 बाइट्स सहेजे गए

N=scan();x=1:N/N;plot(cumsum(exp((sqrt(x^2+1e6)+sqrt((x-1)^2+1e6))*1e6i)),t="l")

हमारे N=1000लिए:

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


वास्तव में आप 80 बाइट्स के रूप में कम जा सकते हैं क्योंकि आपको xअब चारों ओर कोष्ठकों की आवश्यकता नहीं है:N=scan();x=1:N/N;plot(cumsum(exp((sqrt(x^2+1e6)+sqrt((x-1)^2+1e6))*1e6i)),t="l")
प्लेनैपस

4

आर, 86 83 81 बाइट्स

plot(cumsum(exp(1e6i*((1e6+(0:(N<-scan())/N)^2)^.5+(1e6+(0:N/N-1)^2)^.5))),t="l")

अतिरिक्त 3 बाइट्स के लिए @JarkoDubbeldam को धन्यवाद।

एन = 1000 के लिए:

एन = 1e3


वाह, 2 मिनट के भीतर 2 आर जवाब। यह अजीब है, मैंने वही कोशिश की और मैं इसे काम करने के लिए नहीं मिला, लेकिन यह मेरे लिए ठीक काम करता है: एस वैसे भी, अच्छा काम!
JAD

इसके अलावा, स्कैन का उपयोग plot(cumsum(exp(1e6i*(sqrt(1e6+(0:(N<-scan())/N)^2)+sqrt(1e6+(0:N/N-1)^2)))),t="l")करना कुछ बाइट्स को बचाता है
JAD

1

गणितज्ञ 89 बाइट्स (87 वर्ण)

Graphics[Line[ReIm/@Tr/@Table[E^(I*10^6*Tr[√(10^6+(-{0,1}+j/#)^2)]),{i,0,#},{j,0,i}]]]&

उपयोग:

%@100

पैदावार

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

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