एक शासक और कम्पास के साथ n-gons का निर्माण


16

कार्य केवल एक कम्पास और एक अचिह्नित शासक का उपयोग करके n पक्षों के एक नियमित बहुभुज को आकर्षित करना है।

इनपुट (n) निम्नलिखित 10 संख्याओं में से एक है: 3, 4, 5, 6, 8, 10, 12, 15, 16, 17।

विधि : क्योंकि आपके पास केवल एक शासक और कम्पास है, आप केवल बिंदुओं, रेखाओं और हलकों को आकर्षित कर सकते हैं।

एक रेखा ही खींची जा सकती है:

  • दो मौजूदा बिंदुओं के माध्यम से।

एक वृत्त केवल खींचा जा सकता है:

  • इसके केंद्र के रूप में एक बिंदु के साथ और इसकी परिधि एक दूसरे बिंदु से होकर गुजरती है।

एक बिंदु को केवल खींचा जा सकता है:

  • दो लाइनों के चौराहे पर,

  • एक लाइन और एक सर्कल के चौराहे पर,

  • दो मंडलियों के चौराहे पर,

  • शुरुआत में, जब आप आरंभ करने के लिए 2 अंक खींच सकते हैं।

इस प्रक्रिया के माध्यम से (और केवल इस प्रक्रिया के माध्यम से) आपको उस चरण को प्राप्त करने के लिए आवश्यक किसी भी कार्य के साथ-साथ अनुरोधित n-gon की n रेखाएँ खींचनी चाहिए।

संपादित करें: चौराहों की स्थिति की गणना की जानी चाहिए, लेकिन लाइनों और मंडलियों को भाषा द्वारा प्रदान किए गए किसी भी माध्यम से खींचा जा सकता है।

आउटपुट एन-साइडेड नियमित बहुभुज की एक छवि है, जो काम कर रही है।

चित्रमय रूप से छवि के आकार, प्रारूप, रेखा की मोटाई या किसी और चीज़ का यहाँ कोई उल्लेख नहीं है। हालांकि यह अलग-अलग लाइनों, मंडलियों और उनके चौराहों को नेत्रहीन रूप से अलग करना संभव है। इसके अतिरिक्त:

  • आपके n-gon के किनारों को बनाने वाली n लाइन्स आपके 'वर्किंग' (यानी किसी भी पॉइंट, सर्कल या अन्य लाइन्स) के लिए एक अलग रंग और आपके बैकग्राउंड पर फिर से एक अलग रंग होना चाहिए।
  • कार्य ड्राइंग क्षेत्र की सीमाओं को छोड़ सकता है, अंक को छोड़कर, जो सभी छवि के दृश्य सीमा के भीतर होना चाहिए।
  • एक सर्कल एक पूर्ण सर्कल या सिर्फ एक चाप हो सकता है (जब तक यह आवश्यक चौराहों को दर्शाता है)।
  • एक लाइन अनंत है (यानी ड्राइंग क्षेत्र छोड़ देता है) या दो बिंदुओं से कट जाता है जो इसके माध्यम से जाता है।संपादित करें: किसी भी लम्बाई पर एक रेखा खींची जा सकती है। पॉइंट केवल वही बनाये जा सकते हैं जहाँ ड्रॉ लाइन नेत्रहीन चौराहों पर होती है।
  • एक बिंदु को आप अपनी इच्छानुसार तैयार कर सकते हैं, जिसमें इसे अंकित नहीं करना शामिल है।

स्कोरिंग दो गुना है, एक सबमिशन में अधिकतम 10 अंक के लिए 1 इनपुट प्रति सपोर्ट मिलता है। ड्रॉ की स्थिति में, सबसे छोटी बाइट गिनती जीत जाती है।

मान्यताएँ उन सबमिशनों को दी जाएंगी जो कम से कम चरणों में n-gons का निर्माण कर सकते हैं या दिए गए रेंज के बाहर n-gons का निर्माण करने में सक्षम हैं, लेकिन यह आपके स्कोर में मदद नहीं करेगा।

विकिपीडिया से पृष्ठभूमि की जानकारी


यदि आप लाइनों को उनके द्वारा परिभाषित किए गए बिंदुओं पर काट सकते हैं, तो इसका मतलब है कि संबंधित चौराहे खींची गई रेखा के बाहर हो सकते हैं।
मार्टिन एंडर

क्या हम सिंगल लाइन स्ट्रिप एबीसी की साजिश रचकर दो लाइन सेगमेंट AB और BC जैसे शॉर्टकट का उपयोग कर सकते हैं, अगर हमारी भाषा यह प्रदान करती है?
मार्टिन एंडर

1
क्या यह निर्माण आकर्षित करने के लिए पर्याप्त है , या क्या कार्यक्रम को इसकी गणना करना है? उदाहरण के लिए, यदि मैं बिंदु (300,400) से गुजरने वाले मूल पर एक वृत्त खींचना चाहता हूं, तो क्या मैं (त्रिज्या 500 को जानकर) कर CIRCLE 0,0,500सकता हूं या मुझे क्या करना है R=SQRT(300^2+400^2): CIRCLE 0,0,R? (बीटीडब्ल्यू चौराहों के पोस्टिंग शायद लाइनों और हलकों की तुलना में कठिन है।)
लेवल रिवर सेंट

विकीपीडिया से:Carl Friedrich Gauss in 1796 showed that a regular n-sided polygon can be constructed with straightedge and compass if the odd prime factors of n are distinct Fermat primes
डॉ। बेलिसरियस

आमतौर पर आप "अनकवर्ड शासक" को गणितीय शब्दों में "स्ट्रेट एज" के रूप में कहते हैं, जैसे कि बेलिसरिज़ द्वारा उद्धरण।
जस्टफुल

जवाबों:


10

बीबीसी बेसिक, 8 बहुभुज: ३,४,५,६,10,१०,१२,१५ पक्ष (६० पक्ष)

Http://www.bbcbasic.co.uk/bbcwin/download.html पर एमुलेटर डाउनलोड करें

मैंने 16 पक्षों को शामिल नहीं करने का फैसला किया, सिर्फ इसलिए कि मेरा पूर्व-निर्माण बल्कि अव्यवस्थित हो रहा था। 2 और मंडलियों और एक पंक्ति की आवश्यकता होगी। BTW 17 पक्ष वास्तव में बहुत जटिल है, और शायद एक अलग कार्यक्रम के रूप में सबसे अच्छा होगा।

मुझे पेंटागन बनाने के लिए अपने मूल निर्माण में 2 सर्कल जोड़ने के लिए अधिक रिटर्न मिला, क्योंकि इससे मुझे 10,15 और 60 पक्षों तक पहुंच भी मिली।

  GCOL 7                               :REM light grey
  z=999                                :REM width of display (in positive and negative direction)
  e=1                                  :REM enable automatic drawing of line through intersections of 2 circles
  DIM m(99),c(99),p(99),q(99),r(99)    :REM array dimensioning for lines and points
  REM lines have a gradient m and y-intercept c. Points have coordinates (p,q) and may be associated with a circle of radius r.

  REM PRECONSTRUCTION

  ORIGIN 500,500
  p(60)=0:q(60)=0                      :REM P60=centre of main circle
  p(15)=240:q(15)=70                   :REM P15=intersection main circle & horiz line
  t=FNr(60,15)                         :REM draw main circle, set radius, SQR(240^2+70^2)=250 units (125 pixels)
  t=FNl(1,60,15)                       :REM L1=horizontal through main circle
  t=FNc(15,45,1,60,-1)                 :REM define P45 as other intersection of main cir and horiz line. overwrite P15 with itself.

  t=FNr(15,45):t=FNr(45,15)            :REM draw 2 large circles to prepare to bisect L1
  t=FNc(61,62,2,45,15)                 :REM bisect L1, forming line L2 and two new points
  t=FNc(30,0,2,60,-1)                  :REM define points P0 and P30 on the crossings of L2 and main circle
  t=FNr(30,60):t=FNc(40,20,3,60,30)    :REM draw circles at P30, and line L3 through intersections with main circle, to define 2 more points
  t=FNr(15,60):t=FNc(25,5,4,60,15)     :REM draw circles at P15, and line L4 through intersections with main circle, to define 2 more points
  t=FNx(63,3,4):t=FNl(5,63,60)         :REM draw L5 at 45 degrees
  t=FNc(64,53,5,60,-1)                 :REM define where L5 cuts the main circle

  e=0                                  :REM disable automatic line drawing through intersections of 2 circles
  GCOL 11                              :REM change to light yellow for the 5 sided preconstruction
  t=FNx(65,1,4):t=FNr(65,0)            :REM draw a circle of radius sqrt(5) at intersection of L1 and L4
  t=FNc(66,67,1,65,-1)                 :REM find point of intersection of this circle with L1
  t=FNr(0,67)                          :REM draw a circle centred at point 0 through that intersection
  t=FNc(36,24,6,60,0)                  :REM find the intersections of this circle with the main circle


  REM USER INPUT AND POLYGON DRAWING

  INPUT d
  g=ASC(MID$("  @@XT u X @  T",d))-64  :REM sides,first point: 3,0; 4,0; 5,24; 6,20; 8,53; 10,24; 12,0; 15,20
  IF d=60 THEN g=24                    :REM bonus polygon 60, first point 24
  FORf=0TOd
    GCOL12                             :REM blue
    h=(g+60DIVd)MOD60                  :REM from array index for first point, calculate array index for second point
    t=FNr(h,g)                         :REM draw circle centred on second point through first point
    t=FNc((h+60DIVd)MOD60,99,99,60,h)  :REM calculate the position of the other intersection of circle with main circle. Assign to new point.
    GCOL9                              :REM red
    LINEp(g),q(g),p(h),q(h)            :REM draw the side
    g=h                                :REM advance through the array
  NEXT

  END

  REM FUNCTIONS

  REM line through a and b
  DEFFNl(n,a,b)
  m(n)=(q(a)-q(b))/(p(a)-p(b))
  c(n)=q(a)-m(n)*p(a)
  LINE -z,c(n)-m(n)*z,z,c(n)+m(n)*z
  =n

  REM radius of circle at point a passing through point b
  DEFFNr(a,b)
  r(a)=SQR((p(a)-p(b))^2+(q(a)-q(b))^2)
  CIRCLEp(a),q(a),r(a)
  =a

  REM intersection of 2 lines: ma*x+ca=mb*x+cb so (ma-mb)x=cb-ca
  DEFFNx(n,a,b)
  p(n)=(c(b)-c(a))/(m(a)-m(b))
  q(n)=m(a)*p(n)+c(a)
  =n

  REM intersection of 2 circles a&b (if b>-1.) The first step is calculating the line through the intersections
  REM if b < 0 the first part of the function is ignored, and the function moves directly to calculating intersection of circle and line.
  REM inspiration from http://math.stackexchange.com/a/256123/137034

  DEFFNc(i,j,n,a,b)
  IF b>-1 c(n)=((r(a)^2-r(b)^2)-(p(a)^2-p(b)^2)-(q(a)^2-q(b)^2))/2/(q(b)-q(a)):m(n)=(p(a)-p(b))/(q(b)-q(a)):IF e LINE -z,c(n)-m(n)*z,z,c(n)+m(n)*z

  REM intersection of circle and line
  REM (mx+ c-q)^2+(x-p)^2=r^2
  REM (m^2+1)x^2 + 2*(m*(c-q)-p)x + (c-q)^2+p^2-r^2=0
  REM quadratic formula for ux^2+vx+w=0 is x=-v/2u +/- SQR(v^2-4*u*w)/2u or x= v/2u +/- SQR((v/2u)^2 - w/u)

  u=m(n)^2+1
  v=-(m(n)*(c(n)-q(a))-p(a))/u               :REM here v corresponds to v/2u in the formula above
  w=SQR(v^2-((c(n)-q(a))^2+p(a)^2-r(a)^2)/u)


  s=SGN(c(n)+m(n)*v-q(a)):IF s=0 THEN s=1    :REM sign of s depends whether midpoint between 2 points to be found is above centre of circle a
  p(i)=v+s*w:q(i)=m(n)*p(i)+c(n)             :REM find point that is clockwise respect to a
  p(j)=v-s*w:q(j)=m(n)*p(j)+c(n)             :REM find point that is anticlockwise respect to a
  =n

प्रोग्राम किसी भी उपयोगकर्ता इनपुट के लिए पूछने से पहले एक पूर्व-निर्माण करता है। यह मुख्य सर्कल पर कम से कम 2 बिंदुओं को परिभाषित करने के लिए पर्याप्त है जो 3,4,5,6,8,10,12,15 या 60 पक्षीय आंकड़े के समीपवर्ती कोने के अनुरूप है। बिंदुओं को 99-तत्व सरणियों के एक सेट में संग्रहीत किया जाता है, जिसमें परिधि के चारों ओर समान दूरी वाले बिंदुओं के लिए 0-59 तत्वों को अलग रखा गया है। यह मुख्य रूप से स्पष्टता के लिए है, अष्टकोना पूरी तरह से 60 बिंदुओं में फिट नहीं होता है, इसलिए वहां कुछ लचीलेपन की आवश्यकता होती है (और 16-गॉन के लिए भी अगर इसे शामिल किया गया था।) छवि नीचे की तरह दिखती है, सफेद और ग्रे में, केवल साथ। पीले रंग में दो वृत्त 5 भुजाओं के गुणकों के साथ विशेष रूप से आकृतियों के लिए समर्पित हैं। Http://en.wikipedia.org/wiki/Pentagon#mediaviewer/File:Regular_Pentagon_Inscribed_in_a_Circle_240px.gif देखेंमेरे पसंदीदा पेंटागन ड्राइंग विधि के लिए। Jaunty कोण ऊर्ध्वाधर लाइनों से बचने के लिए है, क्योंकि प्रोग्राम अनंत ग्रेडिएंट को संभाल नहीं सकता है।

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

उपयोगकर्ता dआवश्यक पक्षों की संख्या के लिए एक नंबर इनपुट करता है। कार्यक्रम सरणी में दो बिंदुओं में से पहला का सूचकांक दिखता है (अगले एक घड़ी की दिशा में 60 / डी दूर है।)

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

मैं उनसे काफी खुश हूं। बीबीसी बेसिक गणना सही ढंग से करता है। हालांकि इसका स्पष्ट (विशेष रूप से 15 और 60 पक्षों के साथ) कि बीबीसी बेसिक की तुलना में थोड़ा छोटे त्रिज्या वाले हलकों को आकर्षित करना है।

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


1
इसके साथ एक चाल जो मुझे याद आती है वह यह है कि 45-डिग्री लाइन मुख्य सर्कल को केवल दो सर्कल के बगल में काटती है जिसका उपयोग 24-गॉन और 40-गॉन के निर्माण के लिए किया जा सकता है, दोनों 120 के कारक हैं। 60 (20 और 20) के दो कारक हैं 30) लापता, जिसे पंचकोण के दो लापता कोनों को परिभाषित करने और 1 / 5-1 / 6 = 1/30 और 1 / 5-1 / 4 = 1/20 के अंतर को परिभाषित करने के लिए पूर्वसंक्रमण में एक और सर्कल की आवश्यकता होगी। । हालाँकि मुझे नहीं लगता कि मैं इस समय अपना जवाब अपडेट कर रहा हूँ। BTW, बोनस @Martin के लिए धन्यवाद!
लेवल रिवर सेंट

16

गणितज्ञ, 2 3 4 बहुभुज, 759 बाइट्स

S=Solve;n=Norm;A=Circle;L=Line;c={#,Norm[#-#2]}&{a_,b_List}~p~{c_,d_List}:=a+l*b/.#&@@S[a+l*b==c+m*d,{l,m}]{a_,b_List}~p~{c_,r_}:=a+l*b/.S[n[c-a-l*b]==r,l]{c_,r_}~p~{d_,q_}:={l,m}/.S[n[c-{l,m}]==r&&n[d-{l,m}]==q,{l,m}]q={0,0};r={1,0};a=q~c~r;b=r~c~q;Graphics@Switch[Input[],3,{s=#&@@p[a,b];A@@@{a,b},Red,L@{q,r,s,q}},4,{k={q,r};{d,e}=a~p~b;j={d,e-d};d=k~p~j~c~q;{e,f}=j~p~d;A@@@{a,b,d},L/@Accumulate/@{k,j},Red,L@{q,e,r,f,q}},6,{d={q,r};e=#&@@d~p~a;f=e~c~q;{g,h}=a~p~f;{i,j}=a~p~b;A@@@{a,b,f},L@{#-2#2,#+2#2}&@@d,Red,L@{r,i,g,e,h,j,r}},8,{k={q,r};{d,e}=a~p~b;j={d,e-d};d=k~p~j~c~q;{e,f}=j~p~d;g=e~c~q;h=q~c~e;i=r~c~e;{o,s}=g~p~h;{t,u}=g~p~i;o={o,2s-2o};s={t,2u-2t};{t,u}=o~p~d;{v,w}=s~p~d;A@@@{a,b,d,g,h,i},L/@Accumulate/@{k,j,o,s},Red,L@{q,t,e,v,r,u,f,w,q}}]

रैंडम बुलेट पॉइंट:

  • इनपुट प्रॉम्प्ट के माध्यम से दिया गया है।
  • मैं वर्तमान में 3 , 4 , 6 , 8 इनपुट का समर्थन कर रहा हूं ।
  • आपके विकल्पों में से, मैंने निम्नलिखित प्लॉटिंग शैलियों को चुना:
    • पूर्ण चक्र।
    • एंडपॉइंट से एंडपॉइंट तक की लाइनें, जब तक कि एक प्रासंगिक चौराहा बाहर न हो, जिस स्थिति में मैं हद तक हार्डकोड करूंगा।
    • कोई अंक नहीं।
    • कामकाज काले हैं, बहुभुज लाल हैं - सौंदर्यशास्त्र के लिए नहीं बल्कि गोल्फिंग कारणों से।
  • बहुभुज के बीच कुछ गंभीर कोड दोहराव है। मुझे लगता है कि कुछ बिंदु पर मैं उन सभी के लिए एक ही निर्माण करूंगा, रास्ते में सभी लाइनों और बिंदुओं और मंडलियों को शामिल करना, और फिर Switchप्रत्येक निर्माण के लिए प्रासंगिक मंडलियों और लाइनों का चयन करना कम करें। इस तरह से मैं उन दोनों के बीच बहुत सी प्राथमिकताओं का पुन: उपयोग कर सकता था।
  • कोड में बहुत सारे बॉयलरप्लेट फ़ंक्शन हैं जो सभी प्रासंगिक चौराहों को निर्धारित करते हैं, और दो बिंदुओं से मंडलियां बनाते हैं।
  • उस जगह के साथ, मैं भविष्य में और अधिक बहुभुज जोड़ रहा हूँ।

यहाँ अ-कोडित कोड है:

S = Solve;
n = Norm;
A = Circle;
L = Line;
c = {#, Norm[# - #2]} &
{a_, b_List}~p~{c_, d_List} := 
 a + l*b /. # & @@ S[a + l*b == c + m*d, {l, m}]
{a_, b_List}~p~{c_, r_} := a + l*b /. S[n[c - a - l*b] == r, l]
{c_, r_}~p~{d_, q_} := {l, m} /. 
  S[n[c - {l, m}] == r && n[d - {l, m}] == q, {l, m}]
q = {0, 0};
r = {1, 0};
a = q~c~r;
b = r~c~q;
Graphics@Switch[Input[],
  3,
  {
   s = # & @@ p[a, b];
   A @@@ {a, b},
   Red,
   L@{q, r, s, q}
   },
  4,
  {
   k = {q, r};
   {d, e} = a~p~b;
   j = {d, e - d};
   d = k~p~j~c~q;
   {e, f} = j~p~d;
   A @@@ {a, b, d},
   L /@ Accumulate /@ {k, j},
   Red,
   L@{q, e, r, f, q}
   },
  6,
  {
   d = {q, r};
   e = # & @@ d~p~a;
   f = e~c~q;
   {g, h} = a~p~f;
   {i, j} = a~p~b;
   A @@@ {a, b, f},
   L@{# - 2 #2, # + 2 #2} & @@ d,
   Red,
   L@{r, i, g, e, h, j, r}
   },
  8,
  {
   k = {q, r};
   {d, e} = a~p~b;
   j = {d, e - d};
   d = k~p~j~c~q;
   {e, f} = j~p~d;
   g = e~c~q;
   h = q~c~e;
   i = r~c~e;
   {o, s} = g~p~h;
   {t, u} = g~p~i;
   o = {o, 2 s - 2 o};
   s = {t, 2 u - 2 t};
   {t, u} = o~p~d;
   {v, w} = s~p~d;
   A @@@ {a, b, d, g, h, i},
   L /@ Accumulate /@ {k, j, o, s},
   Red,
   L@{q, t, e, v, r, u, f, w, q}
   }
  ]

और यहाँ आउटपुट हैं:

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


बस सोच रहा था कि क्या यह प्रत्येक इनपुट प्रकार के लिए लाल और काली रेखाओं और हलकों को हार्ड कोड करने के लिए छोटा होगा और उन्हें आकर्षित करेगा।
ऑप्टिमाइज़र

@Optimizer मुझे लगता है कि बड़े n सटीक अभिव्यक्ति के लिए अंक शायद बहुत लंबे हो जाएंगे। मुझे लगता है कि जब मैं अधिक पॉलीगोन जोड़ता हूं, तो कुछ बिंदु पर यह उन सभी के लिए एक एकल निर्माण करने के लिए समझ में आएगा, और फिर बस संबंधित मंडलियों और लाइनों का चयन करें Switch। यह शायद मुझे एक बहुत अधिक हलकों लाइनों और बिंदुओं का पुन: उपयोग करने की अनुमति देगा।
मार्टिन एंडर

मेरे पास
ऑक्टागन के

@proudhaskeller क्या यह अभी भी छोटा है, यदि आप समझते हैं कि निर्माण की पहली 5 लाइनें वास्तव में खाई को वर्ग से पुन: उपयोग किया जा सकता है, और यह कि इसे बनाने के इस तरीके को संभवतः n-gon से किसी भी 2n-gon के निर्माण के लिए सामान्यीकृत किया जा सकता है ? (दोनों चीजें, मुझे इसे सुधारने के लिए ध्यान में रखना है।) यदि ऐसा है तो ... उम्म ... मैं इस तरह के नाम वाले बिंदुओं के साथ एक कठोर विवरण मानता हूं कि यह काम करेगा।
मार्टिन एंडर

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