정다각형 그리기


21

이 코드 골프의 목표는 변의 개수와 반경 (중심에서 정점까지의 거리)을 고려하여 규칙적인 다각형 (한 변의 길이를 가진 것)을 그리는 것입니다.

  • 변의 개수와 반지름은 파일, STDIN 또는 일반 오래된 변수를 통해 입력 할 수 있습니다. 당신의 언어로 더 짧은 것을 사용하십시오.
  • ASCII 아트 대신 이미지가 실제로 그려지는 경우 총 문자 / 바이트의 -25 %

3
다각형의 반지름은 얼마입니까? 그 원의 반경은? 외곽?
피터 테일러

그곳에. 나는 그것을 고쳤다. 그것에 대해 죄송합니다 : P.
Taconut

2
@PeterTaylor 정다각형의 반경은이며 모든 정점까지의 거리 (반경 outcircle 또는 circumradius ). 원의 반경 (또는 측면까지의 거리)을 대변 이라고 합니다 . 쉽게 찾을 수있는 정의 (구글의 "다각형 반경"에 대한 1 위)를 가지고 있기 때문에 "무엇을 원하는지 불분명"해서는 안됩니다.
Geobits

@Geobits 동의하지만 여전히 편집했습니다.
Taconut

@PeterTaylor 나는 그것을 둘 다로 태그합니다 : I
Taconut

답변:


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

enter image description here

광장

변수와 함께 호출

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

함수로 사용 P 100 4

enter image description here

오각형

변수와 함께 호출

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

함수로 사용 P 100 5

enter image description here

데카 곤

변수와 함께 호출

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

함수로 사용 P 100 10

enter image description here

변수와 함께 호출

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

함수로 사용 P 100 360

enter image description here


2
스크린 샷을 게시 할 수 있습니까?
Gabe

내 눈에 다각형은 반지름이 아닌 같은면을가집니다.
Ross Millikan

@RossMillikan : 이미지가 확장되지 않았습니다. 방금 이미지를 업데이트했습니다
Abhijit

17

수학, 40-25 % = 30

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

enter image description here


큰. 내가 시도한 것을 이겼다 Graphics.
DavidC

2
불공평합니다! 너무 쉽다!
로비 Wxyz

다행스럽게도이 일은 결코 일어나지 않았을 것입니다.
Michael Stern

되어 Graphics@RegularPolygon허용되지?
Greg Martin

@GregMartin 허용되지만 반경을 지정하는 것은 훨씬 어렵습니다.
ASCII 전용

12

자바 8 : 533 322~25% = 241.5

글쎄, 그것은 Java입니다 : / 그냥 선을 그립니다. 임의 크기의 다각형에 적합합니다. 원래 크기에서 약간 줄입니다. 골프 레슨에 대한 벌칸 (의견)에 큰 신용.

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();
    }
}

입력은 인수 [radius] [sides]입니다.

java D 300 7

산출:

a polygon!


2
가져 12 바이트를 제거 java.awt.image.*대신java.awt.image.BufferedImage
FThompson

1
나는 한 500 바이트로 감소 몇 가지 트릭을 사용. 1) 입력이 단락 범위를 초과하지 않아야하므로 Short.valueOf대신 Integer.valueOf4 바이트를 저장 하십시오 . 2) y[]=x.clone()1 바이트 이상을 저장 y[]=new int[s]합니다. 3) 추가 9 바이트를 저장하는 f.show();대신 사용되지 않는 것을 사용하십시오 f.setVisible(1>0);. 4) 추정이이 목적에 충분히 정확하여 3 바이트를 절약하므로 6.28대신 대신을 사용하십시오 Math.PI*2. 5) 2 바이트를 저장하기 위해 그래픽스 인스턴스를 생성 할 때 Graphics g대신 선언하십시오 Graphics2D g.
FThompson

1
@Vulcan 나는 120을 더 떨어 뜨렸다. (주로 BufferedImage와 휴지통을 버리고 Graphics모든 것을 던져서 paint()). 여전히 좋은 IMO로 보이지만 이미지의 색상이 변경되었습니다. 이것을 다시 한 번 봐 주셔서 감사합니다 :)
Geobits

1
@Geobits 대단한 개선. 축소 된 버전 을 사용하여 로컬 변수를 제거하고 정수를 제거 하고 for-loop를 사용하여 몇 문자 (주로 세미콜론)를 저장 하여 349 바이트 로 줄 였습니다. 공백있는 버전 도 있습니다. Framed
FThompson

1
drawPolygon대신을 사용하여 325 바이트로 줄었습니다drawLine . 공백 버전 .
FThompson

11

TeX / TikZ (60 – 80.25)

파일 polygon.tex:

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

(80 바이트)

반지름과 변의 개수는 변수 / 매크로 \r및 로 제공됩니다 \n. 반지름에 TeX 단위를 지정할 수 있습니다. 단위 cm가 없으면 기본 단위 가 사용됩니다. 예 :

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

(값없는 16 바이트)

페이지 번호를 억제해야 할 경우 다음과 같이 수행 할 수 있습니다.

\footline{}

(11 바이트)

PDF 파일 생성 예 :

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

Triangle

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

Polygon

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

Octagon

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

Dodecagon

점수:

계산이 필요한 것은 확실하지 않습니다. 점수의 범위는 다음과 같습니다.

  • 기본 코드는 80 바이트에서 25 % = 60입니다.

  • 또는 모두 포함 (입력 변수 정의, 페이지 번호 없음) : (80 + 16 + 11) 빼기 25 % = 80.25

  • 첫 번째 지점과 마지막 지점 사이의 연결이 매끄럽지 않아도 --cycle되면 7 바이트를 절약하여 제거 할 수 있습니다.


8

Geogebra , 42 – 25 % = 31.5 바이트

바이트 대신 문자로 계산하면 41 – 25 % = 30.75 자입니다.

(즉, Geogebra를 언어로 생각하면 ...)

반지름이 변수에 r저장되고 변수에 저장된 변의 개수 가 있다고 가정합니다 s.

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

이것은 코사인 정리를 사용합니다 c 2 = a 2 + b 2 – 2 ab cos C 를 사용하여 주어진 반지름에서 측면 길이를 계산합니다.

s= 7, r= 5에 대한 샘플 출력

enter image description here


6

C : 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은 원의 반경이다)

ANSI 터미널에서 실행하십시오

편집하다:

  • 에이스의 제안을 받아
  • 오래된 변수 (또는 #define)를 입력으로 사용하십시오.
  • 원주 반경 사용
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

gcc를 사용할 때 실제로 #includes를 생략 할 수 있습니다 . 또한 vglobal outside main로 선언 u하고의 매개 변수로 선언 main하면 필요하지 않습니다 int(예 :) v;main(u){//.... 마지막으로, 마지막 for루프를 다음과 같이 변경할 수 있습니다.for(j=0;j<s;)/*...*/x=j++-s/2.,//...
user12205

5

C, 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);}

언 골프 :

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 문자는 너비가 높지 않습니다).

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

첫 번째 intint컴파일러에 의한 것으로 가정되므로 제거 할 수 있습니다 . 또한 마지막 for루프를 다음과 같이 변경할 수 있습니다.for(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
user12205

if(i<0)에 변경 될 수 있습니다 if(i). 이것은 여전히 ​​한 번의 반복에서만 필요하지만 그것을 제거하는 효율적인 방법을 찾지 못했습니다 :(
Allbeert

4

수학, 54 * 75 % = 40.5

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

나는 ungolfed 버전에 대한 요점이 없다고 생각합니다. 더 많은 공백 만 포함합니다.

variable의 반경과 variable r의 변의 개수를 예상합니다 n. Mathematica는 모든 이미지의 크기를 조정하기 때문에 축을 표시하지 않고 반경이 조금 의미가 없습니다.

사용법 예 :

enter image description here


Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
chyanog

@chyaong 아, 나는 잊어 경향이 Array 있습니다.
Martin Ender

4

HTML / 자바 스크립트 : 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;).
Matt

@Matt 감사합니다! 이 구문을 몰랐으며 이에 대한 정보를 찾을 수 없습니다. 어떻게 불리는거야?
sebcap26

@ sebcap26 당신은 그 i-->0부분 을 의미 합니까? 와 동일합니다 i-- > 0. 어떤 사람들은 그것을 화살표 연산자 또는 연산자 로 간다 ;)
ComFreek

@ sebcap26이 말했듯이 for 루프가 조건을 평가할 때마다 감소합니다.
Matt

나는 당신이 제거 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)으로 이동합니다. 그런 다음 n 번 반복하십시오. 360 / n 회전하고 (1,0)에 선을 그립니다. 마지막 선을 그리고 획을 그리고 페이지를 내 보냅니다.


3

세이지 , 44-25 % = 33

변의 개수가 s변수에 저장되고 반경이 변수에 저장되었다고 가정합니다 r.

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

샘플 출력 :

s= 5, r= 3

enter image description here

s= 5, r= 6

enter image description here

s= 12, r= 5

enter image description here


축의 배율이 잘못되었습니다. 고칠 수 있습니까? (예 : (0,1) 대신 반경 = 3 일 때 (0,3)의 첫 번째 지점)
Digital Trauma

1
@DigitalTrauma 내 프로그램은 기본적으로 "표준"일반 다각형을 생성 한 다음 이미지를 배율로 확대합니다. 내가 아는 한 regular_polygon함수는 항상 (0,1)에서 첫 번째 정점을 가진 다각형을 생성합니다. 수정은 추가 7 바이트를 가진 축을 표시하지 않는 것입니다 ( ,axes=0after figsize=r)
user12205

3

bc + ImageMagick + xview + bash, 104.25 (139 바이트-25 %)

이 도전은 ImageMagick 답변이 없으면 불완전합니다 ...

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들어이 이미지를 생성합니다.

enter image description here


2

자바 스크립트 584 (867 ungolfed)

이 코드는 N 복소수 근합을 사용하고 각도를 X, Y 포인트로 변환합니다. 그런 다음 원점이 캔버스의 중심으로 이동합니다.

골프

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;
}

샘플 출력 :

Output in Chrome

언 골프

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;
}

이 코드에는 HTML5 캔버스 요소가 필요합니다. c는 캔버스 객체, r은 반지름, n은 변의 수입니다.


2

PHP 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;명령 줄 인수를 앞에 추가 하여 사용할 수도 있습니다. 출력은 png이며 파일로 파이프되어야합니다.


산출

$r=100; $p=5;

$r=100; $p=6;

$r=100; $p=7;

$r=100; $p=50;


1

TI-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

SmileBASIC 3 183 159~25% = 119.25 바이트

에서 변과 반지름을 INPUT가져와 점을 계산하고 저장 한 다음을 사용하여 그립니다 GLINE. 나는 이것이 더 짧을 수 있다고 생각하지만, 오전 1시와 같습니다. 깨끗하고 기본 디스플레이 환경을 가정하므로 ACLSDIRECT에서 디스플레이를 실행할 때 필요할 수 있습니다 .

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
바이트는 바이트이므로 반 밖에 말할 수 없습니다.
12Me21

25 % 규칙 빼기
Matthew Roh

1

OpenSCAD : 31 미만 25 % = 23.25

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

첫 번째 게시물! 나는 파티에 늦었다는 것을 알고 있지만, 이것은 처음부터 좋은 질문처럼 보였다. 을 사용하여 전화하십시오 p(n,r).


사이트에 오신 것을 환영합니다!
위트 마법사

0

ActionScript 1, Flash Player 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

LINQPAD의 C #

수학 부분에 대한 크레딧은 Java 답변을 사용하여 Geobits (걱정하지 않기를 바랍니다)에갑니다. 나는 수학에 희망이 없다 :)

출력 창이 내장되어 있으므로 LINQPAD 에서이 작업을 수행했습니다. 기본적으로 다음을 끌어다 놓으면 다각형이 그려집니다. 'C # Program'으로 전환하고 System.Drawing lib를 쿼리 속성으로 가져옵니다.

//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

Matlab 58 바이트-25 % = 43.5

Matlab 솔루션을 보지 못 했으므로 다음은 매우 간단합니다.

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

rn 이 이미 작업 공간에있는 경우 일부 바이트를 제거 할 수 있습니다 .

호출 예 :

f(7,8)

반경 8의 7-gon


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)

픽셀이 다각형의 모든 초평면 (선)의 안쪽에 있는지 확인합니다. 실제로 apothem이 사용되기 때문에 반경이 터치됩니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


0

매스 매 티카 27 (= 36-25 %)

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

Mathematica 코드를 제출할 때, 현재 언어 어휘가 5000 개 핵심 기능으로 누적되어 언어에 계속 내장되어있는 새로운 기능을 잊어 버리는 경우가 종종 있습니다 . 크고 확장되는 언어 어휘는 코드 골프에 매우 편리합니다. CirclePoints 는 현재 버전 11.X에서 도입되었습니다. 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

SmileBASIC, 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

변수 S와 R이 입력에 사용됩니다.

설명 :

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 흰색)에 가까운 (I 0 인 경우, 투명 할 때는 ).

GTRI N,M,X,Y,R,R,-I대신 에 사용하여 채워진 다각형을 그릴 수도 있습니다GLINE...


0

Tikz, 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}

이 솔루션은 tikz 라이브러리를 사용합니다 shapes.geometric .

evince 에서 볼 때 5측면과 반지름 8in이 있는 다각형은 다음과 같습니다 .

의무적 인 그림

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.