एक Reuleaux त्रिभुज ड्रा करें!


27

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

वोल्फ्राम मैथवर्ल्ड से

चित्र: वोल्फ्राम मैथवर्ल्ड

एक प्रोग्राम लिखें जो rइनपुट के रूप में एक चौड़ाई लेता है और उस चौड़ाई (पिक्सल में) के एक रुलोको त्रिकोण को प्रदर्शित करता है।

आपको अलग-थलग आकार में प्रदर्शित करना चाहिए, अर्थात ठोस-भरे हुए, बिना-स्ट्रोक वाले, और ठोस-भरे पृष्ठभूमि पर।

- बाइट्स जीत में सबसे छोटा कार्यक्रम।


1
क्या त्रिज्या rपिक्सेल या केवल कुछ स्केलिंग कारक में होना चाहिए ?
कार्ल नेप

@ कार्ल नेपफ पिक्सल।
darrylyeo

क्या हम STDOUT को कुछ भी आउटपुट कर सकते हैं, जब तक कि हम रेउलू त्रिकोण को ठीक से नहीं खींच लेते हैं?
आउटगोल्फर

@EriktheOutgolfer यह ठीक है।
darrylyeo

जवाबों:


21

JavaScript + HTML, 164 158 + 13 = 171 बाइट्स

w=+prompt(f=(x,y)=>x*x+y*y<w*w);C.width=C.height=w*2;for(y=-w;++y<w;)for(x=-w;++x<w;)f(x,y)&f(w-x,y)&f(w/2-x,y-w*.866)&&C.getContext`2d`.fillRect(x+w,y+w,1,1)
<canvas id=C>

मुझे नहीं पता कि मुझे इन मैथी ड्राइंग चुनौतियों का जवाब देने में <canvas>कितना मजा आता है ...


13

लव 2 डी, 320 बाइट्स।

j=math.rad(60)i="increment"m=math s=m.sin C=m.cos g=love.graphics f="fill"S=g.stencil function love.draw()r=arg[2]c=function(x,y)return function()g.circle(f,x,y,r,r*4)end end X=r/2 Y=0 S(c(X,Y),i,1)S(c(X+C(j)*r,Y+s(j)*r),i,1,true)S(c(X-C(j)*r,Y+s(j)*r),i,1,true)g.setStencilTest("greater",2)g.rectangle(f,0,0,2*r,2*r)end

शायद इष्टतम समाधान नहीं है, यह लव 2 डी के स्टेंसिल का उपयोग करता है, 3 सर्कल स्थापित करता है, और जहां वे अंतर करते हैं, वहां पर भरते हैं।

कमांड लाइन के माध्यम से कॉल करें, जैसे love tri.love 256

उदाहरण आउटपुट


5
यह काफी प्यारा है
ATaco


9

गणितज्ञ 101 100 98 बाइट्स

@MichaelSeifert की तुलना में एक अलग दृष्टिकोण ले रहा है, और शायद यह पिक्सेल क्लच के संबंध में थोड़ा अधिक शाब्दिक रूप से व्याख्या कर रहा है:

Image@Boole@Table[And@@(({x,y}∈#~Disk~2)&/@{{0,c=√3},d={1,0},-d}),{x,-1,1,2/#},{y,c-2,c,2/#}]&

उपयोग उदाहरण:

%@10

10 पिक्सेल 10 पिक्सेल छवि

50 पिक्सेल 50 पिक्सेल छवि

100 पिक्सेल 100 पिक्सेल छवि

@MartinEnder (infix संकेतन) और एक और 2 बाइट्स d को परिभाषित करके एक बाइट धन्यवाद दिया।


6

PHP + SVG, 165 बाइट्स

<?$h=3/8*$w=2*$d=2*$r=$_GET[0];$q=$r+sqrt($r**2-($r/2)**2);echo"<svg width=$w height=$w><path d='M$r,$r A$r,$r 0 0 1 $d,$r A$r,$r 0 0 1 $h,$q A$r,$r 0 0 1 $r,$r'/>";

इनपुट 128 के लिए उदाहरण आउटपुट

<svg width=512 height=512><path d='M128,128 A128,128 0 0 1 256,128 A128,128 0 0 1 192,238.85125168441 A128,128 0 0 1 128,128'/>


6

पोस्टस्क्रिप्ट, 96 86 85 75 73 72 बाइट्स

dup(^@^^Z<^@Z<){sin mul exch dup}forall
0 1 2{newpath 369 arc clip}for fill

स्टैक पर मूल्य के रूप में इनपुट लेता है। ^^और ^@शाब्दिक नियंत्रण वर्णों का प्रतिनिधित्व करते हैं। (^@^^Z<^@Z<)क्रमशः कोड अंक 0, 30, 90, 60, 0, 90 और 60 के साथ वर्णों की स्ट्रिंग है। फिर उन्हें डिग्री में कोण के रूप में व्याख्या की जाती है, क्योंकि जाहिर है कि कोड बिंदु क्या हैं।

10 बाइट्स सहेजे गए क्योंकि closepathआवश्यक नहीं है (दोनों clipऔर fillस्पष्ट रूप से पथ को बंद करें)।

repeatएक फ़ंक्शन को परिभाषित करने के बजाय उपयोग करके 1 बाइट को बचाया ।

पूरी तरह से अलग दृष्टिकोण पर स्विच करके 10 बाइट्स सहेजे गए।

स्टैक के साथ ट्रिक करके 2 बाइट्स बचाए।

के 0 1 2{}forबजाय का उपयोग करके 1 बाइट को बचाया 3{}repeat


5

गणितज्ञ, 134 131 बाइट्स

NB यह समाधान अब मान्य नहीं है, क्योंकि बाद में प्रश्न को पिक्सेल में मापा जाने के लिए r की आवश्यकता होती है । मार्टिन एंडर के लिए धन्यवाद मुझे टिप्पणी में कुछ बाइट्स से दाढ़ी बनाने में मदद करने के लिए।

r=Input[];RegionPlot[And@@((Abs[y+I x-#]^2<3r^2)&/@Table[Exp[2n I/3Pi]r,{n,3}]),{x,-1,1},{y,-1,1},Frame->False,BoundaryStyle->None]

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

इस कोड को काम करने के लिए इनपुट मान 0 और 1 के बीच बढ़ाया जाना चाहिए। ध्यान दें कि इस कोड के लगभग एक चौथाई हिस्से को "अलगाव में" प्रदर्शित करने की आवश्यकता है, क्योंकि यह गणितज्ञ का डिफ़ॉल्ट नहीं है।


3
PPCG में आपका स्वागत है! कुछ स्थानों को बचाने के लिए r Exp[2 I Pi n/3]किया जा सकता Exp[2I n/3Pi]rहै। और यह आम तौर पर एक अनाम फ़ंक्शन लिखने के लिए छोटा होता है, अर्थात, ड्रॉप करें r=Input[];, के rसाथ बदलें #और जोड़ें &
मार्टिन एंडर

मुझे लगता है कि इनपुट को पिक्सेल होना चाहिए, स्केलिंग कारक नहीं।
internet_user

1
@ साइकोडर: हां, जब मैंने अपना समाधान पोस्ट किया तो उस बाधा को संपादित किया गया।
माइकल सेफर्ट

4

बीबीसी बेसिक, 58 बाइट्स

I.r:L.r,r,r,r:F.i=0TO9S.PI/1.5PLOT177,r*COS(i),r*SIN(i)N.

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

Ungolfed

INPUTr                       :REM input a radius
LINEr,r,r,r                  :REM draw a line of length 0 from r,r to r,r to establish a cursor history away from the corner of the screen
FORi=0 TO 9 STEP PI/1.5      :REM in steps of 120 degrees (going round and round the three sides of an equilateral triangle)
  PLOT177,r*COS(i),r*SIN(i)  :REM move relative by r*COS(i),r*SIN(i) and draw a sector with arc between new and last graphics cursor positions,
NEXT                         :REM with the centre of the arc at the penultimate graphics cursor position.

वाह, यह व्यावहारिक रूप से एक अंतर्निहित है!
नील

4

TeX / TikZ, 128 121 112 बाइट्स

\input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~ in{1,2,3}{[rotate=~*120]arc(0:60:\r pt)};\bye

कोड TeX.se पर इस उत्तर पर आधारित है

TeX वेक्टर-आधारित है, इसलिए पिक्सेल नहीं करता है। त्रिज्या पृष्ठ के किनारे पर हिट होने से पहले लगभग 15 के साथ एक फ्लोट है। यह वास्तव में कमांडलाइन इनपुट के लिए नहीं बनाया गया है, इसलिए इसे चलाने की आवश्यकता है

pdftex  "\def\r{2} \input rt.tex"

जहां ऊपर कोड में सहेजा गया है rt.tex


इसे कम करने के लिए कुछ सुझाव: आपको किसी भी नई सीमा की आवश्यकता नहीं है; आपको ज़रूरत नहीं है .tex; \footline{}बस के रूप में अच्छा है \nopagenumbers; ~इसके बजाय एक चर नाम के रूप में उपयोग करें \i। "पिक्सेल" आवश्यकता को पूरा करने के लिए, आप उपयोग कर सकते हैं \r sp; 1sp, TeX के लिए पिक्सेल के बराबर की तरह है क्योंकि यह सबसे अच्छा स्थान है TeX प्रबंधित कर सकता है (मुझे नहीं पता कि यह tikz पर लागू होता है)।
गिल्स एसओ- बुराई को रोकें '

@ मुझे कुछ भी नहीं मिल सकता है spलेकिन मुझे लगता ptहै कि यह एक अच्छा विचार है। आपके अन्य सभी विचारों ने काम किया (कुछ मेरे परीक्षणों में नहीं लगे थे)। धन्यवाद
क्रिस एच

आप ~एक और बाइट को बचाने के बाद अंतरिक्ष को हटा सकते हैं । \input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~in{1,2,3}{[rotate=~*120]arc(0:60:\r sp)};\byeमेरे लिये कार्य करता है। कोशिश करें pdftex "\def\r{2000000} \input rt.tex"- 2sp पर नेत्रहीन रूप से यह पता लगाना मुश्किल होगा कि यह कितना छोटा है।
गिल्स एसओ-

@ मुझे लगता है मैं केवल 20000 सपा तक गया था स्वीकार करना चाहिए।
क्रिस एच

1
1pt = 65536sp तो 20000sp अभी भी छोटा है।
गिल्स एसओ- बुराई को रोकना

3

जीएलएसएल, 298 229 अक्षर

precision lowp float;
uniform vec2 resolution;float r=100.;void main(){vec2 p=gl_FragCoord.xy-resolution.xy/2.;float h=sqrt(3.)/4.*r;gl_FragColor=vec4(length(p+vec2(r/2.,h))<r&&length(p+vec2(-r/2.,h))<r&&length(p-vec2(0.,h))<r);}

इसे यहाँ आज़माएँ

बोनस

  • परिवर्तनशील rचर द्वारा त्रिज्या को सेट किया जा सकता है
  • अनुरोध के अनुसार त्रिभुज की चौड़ाई पिक्सेल में है (आपको ज़ूम करना होगा GLL सैंडबॉक्स में 1x पर सेट किया गया है)।

क्या GLSL में एक मानक इनपुट विधि है जिसका आप उपयोग कर सकते हैं?
darrylyeo

Glslsandbox में, माउस कर्सर की स्थिति प्राप्त करना संभव है। इसका उपयोग त्रिकोण त्रिज्या को नियंत्रित करने के लिए किया जा सकता है (उदाहरण: त्रिज्या केंद्र से माउस दूरी होगी)।
टाइगरो

2

जावास्क्रिप्ट (ES6) + HTML, 196 + 13 = 209 बाइट्स

पिक्सेल-भरने वाले दृष्टिकोण के बजाय पथ-आधारित दृष्टिकोण का उपयोग करता है।

r=>{c.width=c.height=r*2
with(Math)with(c.getContext`2d`)scale(e=r*.578,e),beginPath(a=s=>s*PI/3),moveTo(2,1),[2,4,6].map(s=>arcTo(cos(i=a(s-1))+1,sin(i)+1,cos(j=a(s))+1,sin(j)+1,sqrt(3))),fill()}

<canvas id=c>


2

लोगो, 53 बाइट्स

to t :r filled 0[repeat 3[arc 60 :r fd :r rt 120]]end

filledरंग 0 में आकार को भरने के लिए कमांड का उपयोग करता है।

लोगो, 64 61 बाइट्स

to t :r repeat 3[pd arc 60 :r pu fd :r rt 120]fd 9 fill end

पेन डाउन, केंद्र में कछुए के साथ 60 डिग्री चाप खींचना, पेन अप, चाप की शुरुआत के लिए पेन को स्थानांतरित करना, 120 डिग्री पर मुड़ना।

3 बार दोहराएं, फिर आकार के अंदर ले जाएं और इसे भरें।

Http://turtleacademy.com/playground/en पर कोशिश करें

जैसे कॉल करें cs ht t 100(स्पष्ट स्क्रीन, कछुए को छुपायें tr = 100 के साथ।)


2

MATL , 35 बाइट्स

9Bo&ZQ*3X^/G_G&:t!J*+8L&!-|G<A&e0YG

यह नामक एक फ़ाइल का उत्पादन करता है image.png। इनपुट के लिए r, छवि का आकार है 2*r+1, और त्रिकोण की चौड़ाई rआवश्यक है।

MATL ऑनलाइन पर यह कोशिश करो ! ऑनलाइन दुभाषिया स्वचालित रूप से बनाई गई फ़ाइल को खोलता है और छवि को मनमानी स्केलिंग के साथ प्रदर्शित करता है; वास्तविक आकार संस्करण प्राप्त करने के लिए उस पर क्लिक करें।

वैकल्पिक रूप से, यहां मैटलैब पर चल रहे ऑफ़लाइन कंपाइलर से इनपुट्स के साथ 50और दो उदाहरण आउटपुट हैं 100। कोड के अंतिम भाग 0YGको बदल दिया गया है IYGताकि फ़ाइल में लिखे जाने के बजाय आंकड़ा सीधे (सही आकार के साथ) प्रदर्शित हो।

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

व्याख्या

9B      % Push 9 in binary: [1 0 0 1] with logical values
o       % Convert to double
&ZQ     % Roots of polynomial with coefficients [1 0 0 1], as a 3×1 column vector
*       % Multiply by implicit input r
3X^/    % Divide by sqrt(3). This gives a 3×1 vector with the circle centers
G_G&:   % Push row vector [-r -r+1 ... r-1 r], with size 1×(2*r+1)
t!J*    % Duplicate, transpose, multiply by 1j
+       % Add with broadcast. This gives a (2*r+1)×(2*r+1) 2D-array of complex
        % numbers, which defines the pixel grid
8L      % Push [3 1 2]
&!      % Permute dimensions as indicated. This gives a 1×(2*r+1)×(2*r+1) 3D-array
-|      % Subtract with broadcast. Absolute value. This gives a 3×(2*r+1)×(2*r+1)
        % 3D-array with the distance from each circle center to each grid point
G<      % Less than r? Gives a 3×(2*r+1)×(2*r+1) 3D-array containing true or false
A       % All: this gives a 1×(2*r+1)×(2*r+1) array containing true for
        % columns of the original 3D-array that contained all true values
&e      % Squeeze the first singleton dimension to give a (2*r+1)×(2*r+1) 2D-array
0YG     % Save as image file with default file name

2

जावास्क्रिप्ट (ईएस 6) + एसवीजी (एचटीएमएल 5), 28 + 102 = 130 बाइट्स

f=
n=>s.setAttribute('width',n)
<input type=number value=82 oninput=f(this.value)><br>
<svg id=s width=82 viewbox=0,0,82,82><path d=M0,71a82,82,0,0,0,82,0A82,82,0,0,0,41,0A82,82,0,0,0,0,71>

बाईट काउंट वांछित आकार के सुविधाजनक उपयोगकर्ता इनपुट के लिए आवश्यक कोड को बाहर करता है।


चतुर! n=>s.style.width=nकाम भी करेगा।
darrylyeo

मुझे यह पता नहीं लग सकता है कि आप 112 बाइट्स में कैसे आए।
darrylyeo

@darrylyeo यह सुझाव मेरे लिए काम नहीं किया, क्षमा करें, लेकिन मैं बाइट की गिनती के बारे में सहमत हूं, मैं यह पता नहीं लगा सकता कि मैं इसके लिए कैसे आया।
नील

हम्म, शायद केवल क्रोम में काम करता है।
डेरीलीयो

1

मेटापोस्ट ( 242 226 बाइट्स)

outputtemplate:="%j-%c.ps";
prologues:=1
beginfig(1);
 len:=1cm;
 path p[];
 p[1]:=len * dir -30 {dir 90} .. len * dir  90;
 p[2]:=p[1] rotated 120;
 p[3]:=p[1] rotated 240;
 fill p[1] -- p[2] -- p[3] -- cycle;
endfig;
end.

यह कुछ हद तक कम करने के लिए संभव हो सकता है, मैं रूपक के लिए नया हूँ।


मैं थोड़ा आलसी था और टेक्स्ट एडिटर्स बाइट काउंट का इस्तेमाल करता था। मुझे नहीं पता था कि आप कॉलोन को हटा सकते हैं, धन्यवाद। मेरे पास अब बेल्ट के नीचे मेटाटॉप का एक घंटा है ^ _ ^
कैरेल

1
मैं अभी भी 223 की गिनती करता हूं, 226 की नहीं। इसके अलावा, क्या आप len * dirअंत में रिक्त स्थान और डॉट को हटा सकते हैं ?
R

1

k, 141 100 98 बाइट्स

s:*/2#;l:2*r:.:0:`
`0:(,"P1")," "/'$(,l,l),&/{(s'n+x)</:(s r)-s'y+n:r-!l}./:r*%(0 0;4 0;1 3)%4
\\

इनपुट से लिया गया है stdin, आउटपुट प्रारूप में stderr(या stdinदुभाषिया के आधार पर) है pgm। उदाहरण के लिए:

काम कर रहे कार्यक्रम का उदाहरण।

स्पष्टीकरण:

s:*/2#               /set s to a squaring function
r:.:0:`              /get user input, set to r
l:2*                 /width/height is 2 times r
r*%(0 0;4 0;1 3)%4   /the coordinates of circle centers
{ }./:               /for each coordinate pair (x, y) get a circle
                     /function to get a circle:
n:r-!l               /  set n to {r, r-1, ..., -(r-1)}
(s'n+x)</:(s r)-s'y+ /  use b^2<r^2-a^2 on all points to get a circle
                     /  where x and y shift the circle right and down
&/                   /get intersections of circles (fold binary and)
(,l,l),              /prepend height and width for PGM format
" "/'$               /convert to string, add spaces
(,"P1"),             /prepend PGM header
`0:                  /output to stderr
\\                   /exit

0

05AB1E , 66 बाइट्स

’)
¨€(ÿ,60)
lt(60’Ð’€š éà £Ø*
ht()
ï…_œã(ÿÿÿ)
„–_œã()
„ˆ 1:ht()’.e

TIO का उपयोग नहीं किया जा सकता है, क्योंकि यह एक खिड़की खोलता है और वहां Reuleaux त्रिकोण खींचता है।

इनपुट के लिए पूछता है, और फिर त्रिकोण ड्राइंग एक पायथन कछुए खिड़की खोलता है।

जोनाथन एलन के जवाब ने मुझे ऐसा करने की प्रेरणा दी, हालांकि मैंने उनके कोड को थोड़ा बदल दिया।

अनिवार्य रूप से, यह 05AB1E की संपीड़ित क्षमताओं और कछुए ग्राफिक्स की पायथन की सहजता का एक संयोजन है।


0

OpenSCAD , 91 बाइट्स

module t(r){intersection_for(t=[0,120,240]){rotate(t)translate([r/sqrt(3),0,0])circle(r);}}

मुझे यकीन नहीं है कि यह कैसे कोषेर है, क्योंकि पिक्सेल वास्तव में किसी भी जाली ग्रिड स्वरूपों में एक अच्छी तरह से परिभाषित इकाई नहीं हैं, जो मुझे पता है। इसके tबजाय , मॉड्यूल rजो कुछ भी मूल इकाइयों के उपयोग में है , दी गई त्रिज्या के एक पुनर्निर्मित त्रिभुज को खींचता है ।

के लिए नमूना पूर्वावलोकन उत्पादन t(100): टी (100)


0

स्माइलबासिक, 87 86 85 83 82 81 79 78 77 76 75 बाइट्स

INPUT R
C.5Y=R*.87C 1C.GPAINT.,0DEF C X
A=X*240GCIRCLE R*X,Y+2,R,A-60,A
END

Ungolfed:

INPUT RADIUS
CIRCLE 0.5
Y=RADIUS*(SQR(3)/2)
CIRCLE 1
CIRCLE 0
GPAINT 0,0
DEF CIRCLE X
 ANGLE=X*240
 GCIRCLE RADIUS*X,Y+2,RADIUS,ANGLE-60,ANGLE
END
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.