নিয়মিত বহুভুজ আঁকুন


21

এই কোড গল্ফের লক্ষ্যটি হল নিয়মিত বহুভুজ অঙ্কন করা (সমান পাশের দৈর্ঘ্যের সাথে একটি) পার্শ্ব এবং ব্যাসার্ধের সংখ্যা (কেন্দ্র থেকে ভার্টেক্সের দূরত্ব) দিয়ে।

  • পার্শ্ব এবং ব্যাসার্ধের সংখ্যা কোনও ফাইল, এসটিডিআইএন বা কেবল একটি সরল পুরানো ভেরিয়েবলের মাধ্যমে প্রবেশ করা যেতে পারে। আপনার ভাষায় সংক্ষিপ্ততর যা ব্যবহার করুন।
  • মোট অক্ষর / বাইটের 25% যদি চিত্রটি ASCII আর্টের পরিবর্তে আঁকানো হয়।

3
বহুভুজের ব্যাসার্ধ কত? এর বৃত্তের ব্যাসার্ধ? এর বহির্মুখী?
পিটার টেলর

সেখানে। আমি এটা ঠিক করেছি. সে সম্পর্কে দুঃখিত: পি।
টাকোনট

2
@PeterTaylor একটি নিয়মিত আকারের বহুভুজ ব্যাসার্ধ কোন প্রান্তবিন্দু দূরত্ব (ব্যাসার্ধ outcircle বা circumradius )। বৃত্তের ব্যাসার্ধ (বা দিকের দূরত্ব )কে এপোথেম বলা হয় । এটি "আপনি যা জিজ্ঞাসা করছেন তা অস্পষ্ট" হওয়া উচিত নয়, কারণ এটির একটি সহজে পাওয়া যায় সংজ্ঞা (গুগলে "বহুভুজের ব্যাসার্ধের" # 1 ফলাফল)।
জিওবিটস

@ জিওবিটস আমি সম্মত, তবে আমি এখনও এটি সম্পাদনা করেছি।
ট্যাকোনট

@ পিটারটেলর আমি এটিকে উভয় হিসাবে ট্যাগ করব: আই
ট্যাকোনট

উত্তর:


20

লোগো 37 - 25% = 27.75 (ভেরিয়েবল সহ)

REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

লোগো 49 - 25% = 36.75 (একটি ফাংশন হিসাবে)

TO P:R:S REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]END

ত্রিভুজ

ভেরিয়েবলের সাথে কল করা

Make "R 100
Make "S 3
REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

একটি ফাংশন হিসাবে ব্যবহৃত P 100 3

এখানে চিত্র বর্ণনা লিখুন

বর্গক্ষেত্র

ভেরিয়েবলের সাথে কল করা

Make "R 100
Make "S 4
REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

একটি ফাংশন হিসাবে ব্যবহৃত P 100 4

এখানে চিত্র বর্ণনা লিখুন

পঁচকোণ

ভেরিয়েবলের সাথে কল করা

Make "R 100
Make "S 5
REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

একটি ফাংশন হিসাবে ব্যবহৃত P 100 5

এখানে চিত্র বর্ণনা লিখুন

ডেকাগোন্

ভেরিয়েবলের সাথে কল করা

Make "R 100
Make "S 10
REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

একটি ফাংশন হিসাবে ব্যবহৃত P 100 10

এখানে চিত্র বর্ণনা লিখুন

বৃত্ত

ভেরিয়েবলের সাথে কল করা

Make "R 100
Make "S 360
REPEAT:S[FD:R*2*sin(180/:S)RT 360/:S]

একটি ফাংশন হিসাবে ব্যবহৃত P 100 360

এখানে চিত্র বর্ণনা লিখুন


2
আপনি একটি স্ক্রিনশট পোষ্ট করতে পারেন?
গাবে

আমার চোখে বহুভুজগুলির একই দিক রয়েছে, ব্যাসার্ধ নয়।
রস মিলিকান

@ রোসমিলিকান: ছবিগুলি স্কেল করার মতো ছিল না। আমি সবেমাত্র চিত্রগুলি আপডেট করেছি
অভিজিৎ

17

গণিত, 40 - 25% = 30

ListPolarPlot[r&~Array~n]/.PointPolygon

এখানে চিত্র বর্ণনা লিখুন


গ্রেট। আমি যা চেষ্টা করেছিলাম তা সেটাই মারবে Graphics
ডেভিডসি

2
ফর্সা নেই! খুব সহজ!
রবি Wxyz

সুন্দরভাবে সম্পন্ন, এটি আমার কাছে কখনও ঘটত না।
মাইকেল স্টারন

হয় Graphics@RegularPolygonমঞ্জুরিপ্রাপ্ত নয়?
গ্রেগ মার্টিন

@ গ্রেগমার্টিন এটি অনুমোদিত, তবে এর সাথে ব্যাসার্ধ নির্দিষ্ট করা আরও শক্ত।
ASCII- কেবলমাত্র

12

জাভা 8: 533 322 - 25% = 241.5

ঠিক আছে, এটি জাভা: / শুধু লাইন আঁকুন, পয়েন্ট টু পয়েন্ট। যেকোন ইচ্ছামত আকারের বহুভুজের জন্য কাজ করা উচিত। এটি মূল আকার থেকে বেশ কিছুটা কেটে ফেলুন। গল্ফ পাঠের জন্য ভলকানকে (মন্তব্যগুলিতে) বিশাল ক্রেডিট।

import java.awt.*;class D{public static void main(String[]v){new Frame(){public void paint(Graphics g){int i=0,r=Short.valueOf(v[0]),s=Short.valueOf(v[1]),o=r+30,x[]=new int[s],y[]=x.clone();for(setSize(o*2,o*2);i<s;x[i]=(int)(Math.cos(6.28*i/s)*r+o),y[i]=(int)(Math.sin(6.28*i++/s)*r+o));g.drawPolygon(x,y,s);}}.show();}}

লাইন ব্রেক:

import java.awt.*;
class D{
    public static void main(String[]v){
        new Frame(){
            public void paint(Graphics g){
                int i=0,r=Short.valueOf(v[0]),s=Short.valueOf(v[1]),o=r+30,x[]=new int[s],y[]=x.clone();
                for(setSize(o*2,o*2);i<s;x[i]=(int)(Math.cos(6.28*i/s)*r+o),y[i]=(int)(Math.sin(6.28*i++/s)*r+o));
                g.drawPolygon(x,y,s);
            }
        }.show();
    }
}

ইনপুটটি আর্গুমেন্ট [ব্যাসার্ধ] [পক্ষগুলি]:

java D 300 7

আউটপুট:

বহুভুজ!


2
এর java.awt.image.*পরিবর্তে 12 বাইট বাদ দিনjava.awt.image.BufferedImage
এফটিহম্পসন

1
আমি কয়েকটি কৌশল ব্যবহার করে এটিকে 500 বাইটে কমিয়েছি । 1) চারটি বাইট সংরক্ষণ করার Short.valueOfপরিবর্তে ব্যবহার করুন Integer.valueOf, কারণ ইনপুটটি কখনই শর্টসের সীমা ছাড়িয়ে যায় না। 2) y[]=x.clone()এক বাইট ওভার সাশ্রয় y[]=new int[s]। 3) অতিরিক্ত নয়টি বাইট যোগ করার f.show();পরিবর্তে অবহিত ব্যবহার করুন f.setVisible(1>0);। 4) 6.28পরিবর্তে Math.PI*2তিনটি বাইট সংরক্ষণ করে, এই উদ্দেশ্যে অনুমানটি যথেষ্ট সঠিক হিসাবে, এর পরিবর্তে ব্যবহার করুন । 5) দুটি বাইট সংরক্ষণ করার জন্য গ্রাফিক্স উদাহরণ তৈরি করার Graphics gপরিবর্তে ঘোষণা করুন Graphics2D g
এফটিহম্পসন

1
@ ভ্যালকান আমি এটিকে আরও ১২০ নামিয়ে নামিয়েছি (মূলত ট্র্যাশ করে BufferedImageএবং Graphicsপুরোপুরি ট্র্যাশ করে এবং কেবল সবকিছুই ফেলে দিয়ে paint())। এটি চিত্রটির রঙ পরিবর্তন করেছে, যদিও এটি দেখতে এখনও ভাল আইএমও দেখায়। আমাকে এ সম্পর্কে আরও একবার নজর দেওয়ার জন্য ধন্যবাদ :)
জিওবিটস

1
@ জিওবিটস গ্রেট উন্নতি। আপনার হ্রাস সংস্করণের বন্ধ ওয়ার্কিং, আমি করেছি তা দমন আরও 349 বাইট কাটা নির্মূল করে Frame, একটি স্থানীয় পরিবর্তনশীল যেমন সরানোর dপূর্ণসংখ্যা, এবং ব্যবহার / জন্য-লুপ কয়েকটি অক্ষর, প্রধানত সেমিকোলন সংরক্ষণ করতে অপব্যবহারের। এখানে সাদা অংশ সহ একটি সংস্করণ
এফটিহম্পসন


11

টেক্স / টিকজেড (60 - 80.25)

ফাইল polygon.tex:

\input tikz \tikz\draw(0:\r)\foreach\!in{1,...,\n}{--(\!*360/\n:\r)}--cycle;\bye

(৮০ বাইট)

ব্যাসার্ধ এবং পক্ষের সংখ্যা ভেরিয়েবল / ম্যাক্রো \rএবং হিসাবে সরবরাহ করা হয় \n। যে কোনও টেক্স ইউনিট ব্যাসার্ধের জন্য দেওয়া যেতে পারে। ইউনিট ব্যতীত ডিফল্ট ইউনিট cmব্যবহৃত হয়। উদাহরণ:

\def\r{1}\def\n{5}    % pentagon with radius 1cm
\def\r{10mm}\def\n{8} % octagon with radius 10mm

(মান ব্যতীত 16 বাইট)

পৃষ্ঠা নম্বরটি চাপা দেওয়া উচিত, তবে এটি দ্বারা সম্পন্ন করা যেতে পারে

\footline{}

(১১ বাইট)

পিডিএফ ফাইল তৈরির উদাহরণ:

pdftex "\def\r{1}\def\n{3}\input polygon"

ত্রিভুজ

pdftex "\def\r{1}\def\n{5}\input polygon"

বহুভুজ

pdftex "\def\r{1}\def\n{8}\input polygon"

অষ্টভুজ

pdftex "\def\r{1}\def\n{12}\input polygon"

দ্বাদশভূজ

স্কোর:

এটি গণনা করার দরকার কী তা পরিষ্কার নয়। স্কোরের ব্যাপ্তিটি হ'ল:

  • বেস কোডটি 80 বাইট বিয়োগ 25% = 60

  • বা সমস্ত অন্তর্ভুক্ত (ইনপুট ভেরিয়েবল সংজ্ঞা, কোনও পৃষ্ঠা নম্বর নেই): (80 + 16 + 11) বিয়োগ 25% = 80.25

  • যদি প্রথম এবং শেষ পয়েন্টের মধ্যে সংযোগটি মসৃণ করার প্রয়োজন না হয় তবে --cycle7 বাইট সংরক্ষণ করে অপসারণ করা যায়।


8

জীয়োজেব্রা , 42 - 25% = 31.5 বাইট

আপনি যদি বাইটের পরিবর্তে অক্ষরে গণনা করেন তবে এটি 41 - 25% = 30.75 টি অক্ষর হবে।

(এটি আপনি যদি জিওজেব্রাকে একটি ভাষা হিসাবে বিবেচনা করেন ...)

ধরে নিই ব্যাসার্ধটি ব্যাসারভে এবং ভেরিয়েবেলে rসঞ্চিত পার্শ্বের সংখ্যা s

Polygon[(0,0),(sqrt(2-2cos(2π/s))r,0),s]

এটি কোসাইন উপপাদ্য সি 2 = a 2 + বি 2 - 2 আব কোস সি ব্যবহার করেপ্রদত্ত ব্যাসার্ধ থেকে পার্শ্বের দৈর্ঘ্য গণনা করতে করে।

s= 7, r= 5 এর জন্য নমুনা আউটপুট

এখানে চিত্র বর্ণনা লিখুন


6

সি: 229 180

#include<stdio.h>
#include<math.h>
main(){float n=5,r=10,s=tan(1.57*(1.-(n-2.)/n))*r*2.,i=0,j,x,c,t;int u,v;for(;i<n;i++)for(j=0;j<s;j++)x=i*6.28/n,c=cos(x),t=sin(x),x=j-s/2.,u=c*r+t*x+r*2.,v=-t*r+c*x+r*2,printf("\e[%d;%dH*",v,u);}

(r হল বৃত্তের ব্যাসার্ধ)

দয়া করে এএনএসআই টার্মিনালে চালান run

সম্পাদনা:

  • টেক্কা পরামর্শ নিন
  • ইনপুট হিসাবে পুরানো ভেরিয়েবল (বা # ডেফাইন) ব্যবহার করুন
  • সুন্নত বৃত্ত ব্যাসার্ধ এখন ব্যবহার করুন
u;main(v){float p=3.14,r=R*cos(p/n),s=tan(p/n)*r*2,i=0,j,x,c,t;for(;i++<n;)for(j=0;j<s;)x=i*p/n*2,c=cos(x),t=sin(x),x=j++-s/2,u=c*r+t*x+r*2,v=c*x-t*r+r*2,printf("\e[%d;%dH*",v,u);}

কম্পাইল:

gcc -opoly poly.c -Dn=sides -DR=radius -lm

আপনি যখন জিসিসি ব্যবহার করেন আপনি আসলে #includeগুলি বাদ দিতে পারেন । এছাড়াও, আপনি vবাইরে গ্লোবাল হিসাবে ঘোষণা করতে পারেন mainএবং এর uপরামিতি হিসাবে ঘোষণা mainকরতে পারেন তবে আপনার প্রয়োজন হবে না int(অর্থাত v;main(u){//...)) শেষ forfor(j=0;j<s;)/*...*/x=j++-s/2.,//...
অবধি

5

সি, 359 চারস

গল্ফ করার আমার প্রথম প্রচেষ্টা। অন্তত এটি জাভা সমাধান ;-)

int r,n,l,g,i,j,x,y;char* b;float a,c,u,z,p,q,s,t;main(int j,char**v){r=atoi(v[1]);b=malloc(g=(l=r*2+1)*r*2+1);memset(b,32,g);for(j=g-2;j>0;j-=l){b[j]='\n';}b[g-1]=0;a=2*3.14/(n=atoi(v[2]));for(;i<=n;i++,p=s,q=t){c=i*a;s=sin(c)*r+r;t=cos(c)*r+r;if(i>0){u=(s-p)/r,z=(t-q)/r;for(j=0;j<r;j++){x=p+u*j;y=q+z*j;if(x>=0&&y>=0&&y<r*2&&x<l-1)b[y*l+x]='#';}}}puts(b);}

ungolfed:

int r,n,l,g,i,j,x,y;
char* b;
float a,c,u,z,p,q,s,t;
main(int j,char**v){
    r=atoi(v[1]);
    b=malloc(g=(l=r*2+1)*r*2+1);
    memset(b,32,g);
    for(j=g-2;j>0;j-=l){b[j]='\n';} 
    b[g-1]=0;
    a=2*3.14/(n=atoi(v[2]));
    for(;i<=n;i++,p=s,q=t){
        c=i*a;s=sin(c)*r+r;t=cos(c)*r+r;
        if(i>0){
            u=(s-p)/r,z=(t-q)/r;
            for(j=0;j<r;j++){
                x=p+u*j;y=q+z*j;
                if(x>=0&&y>=0&&y<r*2&&x<l-1)b[y*l+x]='#';
            }
        }
    }
    puts(b);
}

এবং এটি একমাত্র প্রোগ্রাম যা বহুভুজটিকে অঙ্কন না করে ASCII এ আউটপুট করে। এটি এবং কিছু ভাসমান পয়েন্টের বৃত্তাকার সমস্যাগুলির কারণে, আউটপুটটি বিশেষ সুন্দর দেখাচ্ছে না (ASCII অক্ষর প্রশস্তের চেয়ে বেশি নয়)।

                 ######
               ###    ###
            ####        ####
          ###              ###
        ###                  ####
     ###                        ###
     #                            #
     #                            ##
    #                              #
    #                              #
   ##                              ##
   #                                #
  ##                                ##
  #                                  #
  #                                  #
 ##                                  ##
 #                                    #
##                                    ##
#                                      #
#                                      #
#                                      #
#                                      #
##                                    ##
 #                                    #
 ##                                  ##
  #                                  #
  #                                  #
  ##                                ##
   #                                #
   ##                              ##
    #                              #
    #                              #
     #                            ##
     #                            #
     ###                        ###
        ###                  ####
          ###              ###
            ###         ####
               ###    ###
                 ######

সংকলক দ্বারা intধরে নেওয়া হয় বলে প্রথমটি সরানো যেতে পারে int। এছাড়াও, গত forলুপ করতে পরিবর্তন করা যাবেfor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
user12205

এতে if(i<0)পরিবর্তন করা যেতে পারে if(i)। যা এখনও কেবলমাত্র একটি পুনরাবৃত্তিতে প্রয়োজন, তবে এটি নেওয়ার কার্যকর উপায় খুঁজে
পেল

4

গণিত, 54 * 75% = 40.5

Graphics@Polygon@Table[r{Cos@t,Sin@t},{t,0,2Pi,2Pi/n}]

আমি এমনকি ভাবিও না যে একটি অসম্পূর্ণ সংস্করণের কোনও বিন্দু আছে। এটিতে কেবল আরও সাদা স্থান থাকবে।

ভেরিয়েবলের ব্যাসার্ধ আশা করে r দিকের সংখ্যাn । অক্ষটি প্রদর্শন না করে ব্যাসার্ধটি কিছুটা অর্থহীন, কারণ ম্যাথামেটিকায় সমস্ত চিত্র মাপসই করে।

ব্যবহারের উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন


Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
চ্যানোগ

@chyaong অই, আমি ভুলে ঝোঁক Array
মার্টিন এন্ডার

4

এইচটিএমএল / জাভাস্ক্রিপ্ট: 215 - 25% = 161.25 , 212 - 25% = 159

<canvas><script>R=100;i=S=10;c=document.currentScript.parentNode;c.width=c.height=R*2;M=Math;with(c.getContext("2d")){moveTo(R*2,R);for(;i-->0;){a=M.PI*2*(i/S);lineTo(R+M.cos(a)*R,R+M.sin(a)*R)}stroke()}</script>

অবরুদ্ধ সংস্করণ:

<canvas><script>
    var RADIUS = 100;
    var SIDES_COUNT = 10;
    var canvas = document.currentScript.parentNode;
    canvas.width = canvas.height = RADIUS * 2;
    var context = canvas.getContext("2d");
    context.moveTo(RADIUS * 2, RADIUS);
    for(i = 1 ; i <= SIDES_COUNT ; i++) {
        var angle = Math.PI * 2 * (i / SIDES_COUNT);
        context.lineTo(
            RADIUS + Math.cos(angle) * RADIUS,
            RADIUS + Math.sin(angle) * RADIUS
        );
    }
    context.stroke();
</script>

দ্বারা 4 অক্ষর সংরক্ষণ i=S=5;এবং for(;i-->0;)
ম্যাট

@ ম্যাট আপনাকে ধন্যবাদ! আমি এই সিনট্যাক্সটি জানতাম না এবং এটি সম্পর্কে কোনও তথ্য খুঁজে পাই না। কীভাবে বলা হয়?
sebcap26

@ sebcap26 আপনি কি i-->0অংশটি বোঝাতে চান ? এটা যেমন হয় i-- > 0। কিছু লোক এটিকে তীর অপারেটর বা অপারেটরে যায় ;)
কমফ্রিচ

কোনও উদ্বেগ নেই :) যেমন @ সেবক্যাপ 26 বলেছেন, লুপের জন্য শর্তটি মূল্যায়ন করার সময় প্রতিবার এটি হ্রাস পাচ্ছে।
ম্যাট

আমি মনে করি আপনি চরগুলি অপসারণ c=document.currentScript.parentNode;এবং প্রতিস্থাপনের <canvas>মাধ্যমে সংরক্ষণ করতে পারবেন<canvas id="c">
Hedi

3

পোস্টস্ক্রিপ্ট 156 - 25% = 117

translate exch 1 exch dup dup scale div currentlinewidth mul setlinewidth
1 0 moveto dup{360 1 index div rotate 1 0 lineto}repeat closepath stroke showpage

ব্যাসার্ধ, পক্ষের সংখ্যা এবং কমান্ড লাইনের কেন্দ্র বিন্দুটি পাস করুন

gs -c "100 9 300 200" -- polyg.ps

বা উত্সকে প্রিপেন্ড করুন

echo 100 9 300 200 | cat - polyg.ps | gs -

কেন্দ্রে অনুবাদ করুন, ব্যাসার্ধ পর্যন্ত স্কেল করুন (1,0) এ যান; তারপরে এন বার পুনরাবৃত্তি করুন: 360 / n দ্বারা ঘোরান, লাইনটি (1,0) এ আঁকুন; চূড়ান্ত লাইন আঁকুন, স্ট্রোক করুন এবং পৃষ্ঠাটি নির্গত করুন।


3

সেজ , 44 - 25% = 33

ধরে নিই পার্শ্বের সংখ্যাটি sভেরিয়েবেলে এবং ব্যাসার্ধের মধ্যে ব্যাসার্ধ সঞ্চিত থাকে r

polytopes.regular_polygon(s).show(figsize=r)

নমুনা আউটপুট:

s= 5, r= 3

এখানে চিত্র বর্ণনা লিখুন

s= 5, r= 6

এখানে চিত্র বর্ণনা লিখুন

s= 12, r= 5

এখানে চিত্র বর্ণনা লিখুন


অক্ষগুলির স্কেলিং বিভ্রান্তিকর। এটা কি স্থিরযোগ্য? (যেমন প্রথম পয়েন্টে (0,3) যখন ব্যাসার্ধ = 3, (0,1) এর পরিবর্তে)
ডিজিটাল ট্রমা

1
@ ডিজিটালট্রামা আমার প্রোগ্রামটি মূলত "স্ট্যান্ডার্ড" নিয়মিত বহুভুজ তৈরি করে, তারপরে স্কেল ফ্যাক্টর দ্বারা চিত্রটি প্রসারিত করে। আমি যতদূর জানি regular_polygonফাংশন সর্বদা প্রথম প্রান্তি (0,1) এর সাথে বহুভুজ উত্পন্ন করে। একটি ,axes=0figsize=r
স্থিরতা

3

বিসি + ইমেজম্যাগিক + এক্সভিউ + ব্যাশ, 104.25 (139 বাইট - 25%)

এই চ্যালেঞ্জটি কোনও চিত্রম্যাগিকের উত্তর ছাড়া অসম্পূর্ণ হবে ...

convert -size $[$2*2]x$[$2*2] xc: -draw "polygon `bc -l<<Q
for(;i++<$1;){t=6.28*i/$1;print s(t)*$2+$2,",";c(t)*$2+$2}
Q`" png:-|xview stdin

উদাহরণস্বরূপ, ./polygon.sh 8 100এই চিত্রটি উত্পাদন করে:

এখানে চিত্র বর্ণনা লিখুন


2

জাভাস্ক্রিপ্ট 584 (867 অবরুদ্ধ)

এই কোডটি এন কমপ্লেক্স রুটস অফ ইউনিটি ব্যবহার করে এবং কোণগুলি এক্স, ওয়াই পয়েন্টে অনুবাদ করে। তারপরে উত্সটি ক্যানভাসের কেন্দ্রে সরানো হবে।

Golfed

function createPolygon(c,r,n){
c.width=3*r;
c.height=3*r;
var t=c.getContext("2d");
var m=c.width/2;
t.beginPath(); 
t.lineWidth="5";
t.strokeStyle="green";
var q=C(r, n);
var p=pts[0];
var a=p.X+m;
var b=p.Y+m;
t.moveTo(a,b);
for(var i=1;i<q.length;i++)
{
p=q[i];
t.lineTo(p.X+m,p.Y+m);
t.stroke();
}
t.lineTo(a,b);
t.stroke();
}
function P(x,y){
this.X=x;
this.Y=y;
}
function C(r,n){
var p=Math.PI;
var x,y,i;
var z=[];
var k=n;
var a;
for(i=0;i<k;i++)
{
a = 2*i*p/n;
x = r*Math.cos(a);
y = r*Math.sin(a);
z.push(new P(x,y));
}
return z;
}

নমুনা আউটপুট:

ক্রোমে আউটপুট

Ungolfed

function createPolygon(c,r,n) {
c.width = 3*r;
c.height = 3*r;
var ctx=c.getContext("2d");
var mid = c.width/2;
ctx.beginPath(); 
ctx.lineWidth="5";
ctx.strokeStyle="green";
var pts = ComplexRootsN(r, n);
if(null===pts || pts.length===0)
{
alert("no roots!");
return;
}
var p=pts[0];
var x0 = p.X + mid;
var y0 = p.Y + mid;
ctx.moveTo(x0,y0);
for(var i=1;i<pts.length;i++)
{
p=pts[i];
console.log(p.X +"," + p.Y);
ctx.lineTo(p.X + mid, p.Y + mid);
ctx.stroke();
}
ctx.lineTo(x0,y0);
ctx.stroke();
}

function Point(x,y){
this.X=x;
this.Y=y;
}

function ComplexRootsN(r, n){
var pi = Math.PI;
var x,y,i;
var arr = [];
var k=n;
var theta;
for(i=0;i<k;i++)
{
theta = 2*i*pi/n;
console.log('theta: ' + theta);
x = r*Math.cos(theta);
y = r*Math.sin(theta);
console.log(x+","+y);
arr.push(new Point(x,y));
}
return arr;
}

এই কোডটির জন্য এইচটিএমএল 5 ক্যানভাস উপাদান প্রয়োজন, সি হ'ল ক্যানভাস অবজেক্ট, r ব্যাসার্ধ এবং n টি # টির পাশের।


2

পিএইচপি 140 - 25% = 105

<?
for(;$i++<$p;$a[]=$r-cos($x)*$r)$a[]=$r-sin($x+=2*M_PI/$p)*$r;
imagepolygon($m=imagecreatetruecolor($r*=2,$r),$a,$p,0xFFFFFF);
imagepng($m);

দুটি পূর্বনির্ধারিত ভেরিয়েবল ধরে: $pপয়েন্টের সংখ্যা $rএবং পিক্সেলের ব্যাসার্ধ। বিকল্পভাবে, এর list(,$r,$p)=$argv;পরিবর্তে কমান্ড লাইন আর্গুমেন্টগুলি কেউ প্রিপেন্ড করতে এবং ব্যবহার করতে পারে । আউটপুট একটি পিএনজি হবে, যা কোনও ফাইলে পাইপ করা উচিত।


আউটপুট

$r=100; $p=5;

$r=100; $p=6;

$r=100; $p=7;

$r=100; $p=50;


1

টিআই -80 বেসিক, 25 বাইট - 25% = 18.75

PARAM
2π/ANS->TSTEP
"COS T->X1ᴛ
"SIN T->Y1ᴛ
DISPGRAPH

ধরে নিই সমস্ত সেটিংস ডিফল্ট মানগুলিতে সেট করা আছে। মত প্রোগ্রাম চালান5:PRGM_POLYGON (পেন্টাগনের জন্য)

এটি খুব কম সংখ্যক পদক্ষেপ সহ একটি বৃত্ত অঙ্কন করে কাজ করে। উদাহরণস্বরূপ, একটি পেন্টাগনে 2π / 5 রেডিয়ানের পদক্ষেপ থাকবে।

উইন্ডো সেটিংস ডিফল্ট ভাবে যথেষ্ট, এবং TMINএবং TMAXসেট করা হয় 0এবং , তাই পরিবর্তনের সকলের দরকার TSTEP


1

স্মাইলব্যাসিক 3, 183 159 - 25% = 119.25 বাইট

দিকগুলি থেকে ব্যাসার্ধ এবং ব্যাসার্ধ নেয় INPUT, গণনা করে এবং পয়েন্টগুলি সঞ্চয় করে এবং তারপরে ব্যবহার করে এগুলিকে আঁকায় GLINEআমি মনে করি এটি ছোট হতে পারে তবে এটি 1am এর মতো, যাই হোক না কেন। একটি পরিষ্কার এবং ডিফল্ট প্রদর্শন env ধরে, তাই ACLSএটি DIRECT থেকে চালানোর সময় আপনার প্রয়োজন হতে পারে ।

INPUT S,R
DIM P[S,2]FOR I=0TO S-1
A=RAD(I/S*360)P[I,0]=COS(A)*R+200P[I,1]=SIN(A)*R+120NEXT
FOR I=0TO S-1GLINE P[I,0],P[I,1],P[(I+1)MOD S,0],P[(I+1)MOD S,1]NEXT

স্ক্রিনশট


1
বাইট হ'ল বাইট, আপনি বলতে পারবেন না এটি কেবল অর্ধেক।
12

25% বিধি বিয়োগ করা হচ্ছে।
ম্যাথু রোহ

1

ওপেনস্ক্যাড: 31 কম 25% = 23.25

module p(n,r){circle(r,$fn=n);}

এখানে প্রথম পোস্ট! আমি জানি যে আমি পার্টিতে দেরি করেছি, তবে এটি যে কোনও হিসাবে শুরু হওয়া ভাল প্রশ্ন বলে মনে হয়েছিল। কল করে কল করুন p(n,r)


সাইটে স্বাগতম!
গম উইজার্ড

0

অ্যাকশনস্ক্রিপ্ট 1, ফ্ল্যাশ প্লেয়ার 6: 92 - 25% = 69

n=6
r=100
M=Math
P=M.PI*2
lineStyle(1)
moveTo(r,0)
while((t+=P/n)<=P)lineTo(M.cos(t)*r,M.sin(t)*r)

0

লিংকপ্যাডে সি #

গণিত অংশের ক্রেডিট জাভা উত্তরগুলির সাথে জিওবিটসকে (আমি আশা করি আপনি কিছু মনে করবেন না!) যায়। আমি হতাশ গণিতে :)

আমি লিনকপ্যাডে এটি করেছি কারণ এটি আউটপুট উইন্ডোতে একটি বিল্ট পেয়েছে। সুতরাং মূলত আপনি এটিতে নীচে টেনে আনতে পারেন এবং এটি বহুভুজ আঁকবে। কেবল এটি 'সি # প্রোগ্রাম' এ স্যুইচ করুন এবং সিস্টেমটি আমদানি করুন the

//using System.Drawing;

void Main()
{
// Usage: (sides, radius)
    DrawSomething(4, 50);
}

void DrawSomething(int sides, int radius)
{
    var points = new Point[sides];
    var bmpSize = radius*sides;
    var bmp = new Bitmap(bmpSize,bmpSize);
    using (Graphics g = Graphics.FromImage(bmp))
    {   
        var o = radius+30;
        for(var i=0; i < points.Length; i++)
        {
            // math thanks to Geobits
            double w = Math.PI*2*i/sides;
            points[i].X = (int)(Math.Cos(w)*radius+o);
            points[i].Y = (int)(Math.Sin(w)*radius+o);
        }
        g.DrawPolygon(new Pen(Color.Red), points);
    }
    Console.Write(bmp);
}

এখানে চিত্র বর্ণনা লিখুন


0

ম্যাটল্যাব 58 বাইট - 25% = 43.5

কোনও মতলব সমাধান দেখেনি, তাই এখানে একটি যা বেশ সোজা:

f=@(n,r) plot(r*cos(0:2*pi/n:2*pi),r*sin(0:2*pi/n:2*pi));

যদি r এবং n ইতিমধ্যে কর্মক্ষেত্রে থাকে তবে আপনি কিছু বাইট শেভ করতে পারেন ।

উদাহরণ কল:

f(7,8)

ব্যাসার্ধ 8 সহ 7-গন


0

পাইথন 2, 222 বাইট

from math import*
def f(s,r):
 r*=cos(pi/s)
 v,R=2*pi/s,[(2*t)/98.-1for t in range(99)]
 print"P1 99 99 "+" ".join(["0","1"][all(w*(w-x)+z*(z-y)>0for w,z in[(r*cos(a*v),r*sin(a*v))for a in range(s)])]for x in R for y in R)

বহুভুজের সমস্ত হাইপারপ্লেন (লাইন) এর অভ্যন্তরের দিকে পিক্সেল রয়েছে কিনা তা পরীক্ষা করে। ব্যাসার্ধটি স্পর্শ করা হয়েছে কারণ বাস্তবে অ্যাপোথেম ব্যবহৃত হয় used

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


0

গণিত 27 (= 36 - 25%)

Graphics[Polygon[CirclePoints[r, n]]]

আমরা যখন গাণিতিক কোডটি জমা দিই আমরা প্রায়শই প্রায় নতুন কোর ফাংশনগুলি ভুলে যাই যা ভাষার অন্তর্নিহিত হয়ে থাকে, বর্তমান ভাষার শব্দভান্ডারটি প্রায় 5000 টি মূল ফাংশন সংগ্রহ করে । কোড-গল্ফিংয়ের জন্য বৃহত্তর এবং প্রসারিত ভাষার শব্দভাণ্ডার বিটিডব্লিউ বেশ কার্যকর। সার্কেলপয়েন্টগুলি বর্তমান সংস্করণ ১১ এক্স এ প্রবর্তিত হয়েছিল। 7-তরফা ব্যাসার্ধ 5 এর একটি নির্দিষ্ট উদাহরণ হ'ল:

এখানে চিত্র বর্ণনা লিখুন

এছাড়াও আপনার বহুভুজটির ওরিয়েন্টেশন নিয়ন্ত্রণ করতে আপনাকে কেবল কোণ প্যারামিটারটি প্রবেশ করতে হবে:

Graphics[Polygon[CirclePoints[{1, 2}, 5]]]

এখানে চিত্র বর্ণনা লিখুন


0

পাইথন 2, 74 বাইট - 25% = 55.5

ইনপুট ভেরিয়েবলের মধ্যে রয়েছে r,n। যদি গণনায় অন্তর্ভুক্ত থাকে তবে এটি r,n=input()আরও 12 বাইটের জন্য হবে ।

import math,turtle as t
exec"t.fd(2*r*math.sin(180/n));t.rt(360/n);"*n

এটি অনলাইনে চেষ্টা করে দেখুন - (যেহেতু execঅনলাইন দোভাষীটিতে প্রয়োগ করা হয়নি) বিভিন্ন কোড ব্যবহার করে )


0

স্মাইলব্যাসিক, 85 75 - 25% = 56.25 বাইট

FOR I=0TO S
A=I/S*6.28N=X
M=Y
X=R+R*COS(A)Y=R+R*SIN(A)GLINE N,M,X,Y,-I
NEXT

ভেরিয়েবল এস এবং আর ইনপুট জন্য ব্যবহৃত হয়।

ব্যাখ্যা:

FOR I=0 TO Sides        'Draw n+1 sides (since 0 is skip)
 Angle=I/Sides*6.28     'Get angle in radians
 OldX=X:OldY=Y          'Store previous x/y values
 X=Radius+Radius*COS(A) 'Calculate x and y
 Y=Radius+Radius*SIN(A)
 GLINE OldX,OldY,X,Y,-I 'Draw line. Skip if I is 0 (since old x and y aren't set then)
NEXT

পক্ষগুলি -Iবর্ণটি ব্যবহার করে আঁকা হয় যা সাধারণত -1 (& HFFFFFFFF সাদা) এর কাছাকাছি থাকে (যখন I0 হয় তখনই স্বচ্ছ হয়)।

GTRI N,M,X,Y,R,R,-Iপরিবর্তে ব্যবহার করে আপনি একটি পূর্ণ বহুভুজ আঁকতে পারেনGLINE...


0

টিক্জ, 199 বাইট

\documentclass[tikz]{standalone}\usetikzlibrary{shapes.geometric}\begin{document}\tikz{\def\p{regular polygo}\typein[\n]{}\typein[\r]{}\node[draw,minimum size=\r,\p n,\p n sides=\n]{}}\end{document}

এই সমাধানটি টিক্জ লাইব্রেরি ব্যবহার করে shapes.geometric

বাহ্য 5এবং ব্যাসার্ধের সাথে বহুভুজ 8inদেখতে কেমন দেখাবে তা এখানে

বাধ্যতামূলক চিত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.