プロが教える店舗&オフィスのセキュリティ対策術

このプログラムを実行すると座標列になるのですが、どうして実行結果のような座標列になるのかがよくわかりません。
僕はdraw_polygon()中のif(r>xxx)の部分に何かあるような気がします。単なる推測ですが・・・。
理由を教えていただけませんか?

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <math.h>
#defi ne PI 3.14159265358979323846

FILE *fp;//グローバル変数.あまり使うな!

double get_x(double r, double angle);
double get_y(double r, double angle);
void draw_polygon(int n, double r, double cx, double cy);

void main(void)
{

fp=fopen("polygon.csv","w");//チェック省略
draw_polygon(4,1,0,0);
fclose(fp);
}

double get_x(double r, double angle)
{
return(r*cos(angle));
}

double get_y(double r, double angle)
{
return(r*sin(angle));
}

void draw_polygon(int n, double r, double cx, double cy)
{
int i;
double delta,angle,x,y;

delta=2.0*PI/n;
for(i=0; i<=n; i++)//i<=n
{
angle=delta*i;
x=get_x(r,angle)+cx;
y=get_y(r,angle)+cy;
fprintf(fp,"%8.3f,%8.3f\n",x,y);
}
fprintf(fp,"\n");
if(r>0.05)
{
for(i=0; i<=n; i++)//i<=n
{
angle=delta*i;
x=get_x(r,angle)+cx;
y=get_y(r,angle)+cy;
draw_polygon(n,r*0.5,x,y);
}
}
}

プログラムを見やすく作ったのですが、この質問を掲示した途端に上下そろってしまいました(汗)
見にくくなってしまいすみません。

A 回答 (1件)

関数の再帰呼び出しって知っていますか?


draw_polygon()の中でdraw_polygon()を呼んでいますよね。これが再帰呼び出しです。
半径と中心座標を変えながらdraw_polygon()を実行していきます。半径が0.05以下になったらそれ以上再帰呼び出しをしません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!