正多角形を描く


21

このコードゴルフの目標は、辺の数と半径(中心から頂点までの距離)を指定して、通常のポリゴン(辺の長さが等しいポリゴン)を描くことです。

  • 辺の数と半径は、ファイル、STDIN、または単なる古い変数を介して入力できます。あなたの言語で短いものを使用してください。
  • ASCIIアートの代わりに画像が実際に描画される場合、総文字数/バイトの-25%。

3
多角形の半径は?その内接円の半径は?その周辺?
ピーターテイラー14

そこ。それを私が直した。ごめんなさい:P。
タコナッツ14

2
@PeterTaylor通常の多角形の半径は、任意の頂点までの距離です(半径の円または外接半径)。内接円の半径(または側面までの距離)はアポテムと呼ばれます。定義は簡単に見つかります(Googleの「多角形の半径」の結果#1)。
ジオビット14

@Geobits同意しますが、それでも編集しました。
タコナッツ14

@PeterTaylorそれから両方としてタグ付けします:I
タコナット14

回答:


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
スクリーンショットを投稿できますか?
ゲイブ14

私の目には、ポリゴンは半径ではなく同じ辺を持っています。
ロスミリカン14

@RossMillikan:画像は拡大縮小されていません。画像を更新しました
Abhijit 14

17

Mathematica、40-25%= 30

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

enter image description here


すばらしいです。それは私が試したものを打ち負かしたGraphics
DavidC 14

2
ずるいです!簡単すぎる!
ロビーWxyz 14

うまくできていれば、これは私には決して起こりませんでした。
マイケルスターン14

されてGraphics@RegularPolygon許可されていませんか?
グレッグマーティン

@GregMartin許可されていますが、半径を指定するのははるかに困難です。
ASCIIのみ

12

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

入力は引数です[半径] [側]:

java D 300 7

出力:

a polygon!


2
インポートすることで、12のバイトをなくすjava.awt.image.*代わりにjava.awt.image.BufferedImage
FThompson

1
いくつかのトリックを使用して、500バイトに減らしました。1)入力をショートの範囲を超えてはならないため、Short.valueOf代わりにInteger.valueOfを使用して4バイトを保存します。2)y[]=x.clone()1バイトを節約しy[]=new int[s]ます。3)追加の9バイトを保存するf.show();代わりに、非推奨を使用しf.setVisible(1>0);ます。4)の6.28代わりにを使用してください。Math.PI*2推定はこの目的に十分正確であり、3バイトを節約できます。5)グラフィックインスタンスを作成するときではGraphics gなく、宣言Graphics2D gして2バイトを節約します。
FThompson

1
@Vulcanでさらに120ダウンしました(主にをすべて破棄してBufferedImageGraphicsすべてをすべてスローすることでpaint())。画像の色を変更しましたが、それでもIMOの見た目は良好です。これをもう一度見てくれてありがとう:)
Geobits 14

1
@Geobitsすばらしい改善。縮小版を作成して、ローカル変数としてを削除し、整数を削除し、for-loopを使用/使用して少数の文字(主にセミコロン)を保存することにより、さらに349バイトに削減しFrameましたd。ここだ空白とバージョンにも。
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を省略できます。また、v外部としてグローバルとしてmain宣言uし、のパラメーターとして宣言することもできますがmain、必要ありませんint(つまりv;main(u){//...)。最後に、最後のforループを次のように変更できますfor(j=0;j<s;)/*...*/x=j++-s/2.,//...
user12205

5

C、359文字

ゴルフでの私の最初の試み。少なくともJavaソリューションに勝るものです;-)

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で出力する唯一のプログラムです。これといくつかの浮動小数点の丸めの問題のため、出力は特にきれいに見えません(ASCII文字は幅ほど高くありません)。

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

最初のものはコンパイラーによってint想定されているため、削除できますint。また、最後のforループは次のように変更できますfor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
user12205 14

if(i<0)に変更することができましたif(i)。これはまだ1回の反復でのみ必要ですが、それを取り出すための効率的な方法を見つけることができませんでした:
Allbeert 14

4

Mathematica、54 * 75%= 40.5

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

私は、無料版のポイントはないと思います。より多くの空白のみが含まれます。

変数の半径と変数rの辺の数を期待しますn。半径は、軸を表示しないと少し意味がありません。これは、Mathematicaがすべての画像を合わせて拡大縮小するためです。

使用例:

enter image description here


Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
チャノグ14年

@chyaongああ、私は忘れがちですArray
マーティンエンダー14年

4

HTML / JavaScript: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;)
マット14

@Mattありがとう!私はこの構文を知りませんでした、そしてそれについての情報を見つけることができません。どのように呼ばれますか?
sebcap26

@ sebcap26その意味i-->0ですか?と同じi-- > 0です。一部の人々は、それを矢印演算子または
行き先

心配ありません:) @ sebcap26が言ったように、forループが条件を評価するたびにデクリメントします。
マット14

私はあなたが削除する文字を保存することができると思うc=document.currentScript.parentNode;と置き換えること<canvas>によって<canvas id="c">
エディ

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)の代わりにradius = 3の場合、(0,3)の最初のポイント)
デジタル外傷14

1
@DigitalTrauma私のプログラムは、基本的に「標準」の正多角形を生成し、スケールファクターで画像を拡大します。私の知る限り、regular_polygon関数は常に(0,1)の最初の頂点を持つポリゴンを生成します。修正は、追加の7バイトの座標軸を表示しないことであろう(,axes=0figsize=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

JavaScript 584(867 ungolfed)

このコードは、1の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);

2つの定義済み変数:$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 BASIC、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時のようです。クリーンでデフォルトの表示環境を想定して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
バイトはバイトであり、半分だけとは言えません。
12Me21

25%ルールを減算します。
マシューノ

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#プログラム」に切り替えて、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角形


0

Python 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)

ピクセルがポリゴンのすべての超平面(ライン)の内側にあるかどうかを確認します。実際にアポテムが使用されているため、半径に触れます。

ここに画像の説明を入力してください ここに画像の説明を入力してください


0

Mathematica 27(= 36-25%)

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

Mathematicaコードを提出するとき、言語に組み込まれ続ける新しい関数を忘れることがよくあります。現在の言語の語彙は約5000のコア関数に蓄積されています。広大で拡大している言語の語彙は、コードゴルフでは非常に便利です。CirclePointsは、現在のバージョン11.Xで導入されました。7面の半径5の具体例は次のとおりです。

ここに画像の説明を入力してください

また、ポリゴンの方向を制御するために、角度パラメーターを入力するだけです。

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

ここに画像の説明を入力してください


0

Python 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

これは、5辺と半径を持つ多角形が8inどうやら見たときにどのように見えるです。

義務的な写真

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.