编写一个程序,读取整数 n, 并根据深度n的递归调用绘制 Koch 曲线。
koch 曲线是众所周知的一种曲线。
你可以使用以下算法绘制 Koch 曲线:
将给定的段(p1,p2)分成三个相等的段。
用与线段相同长度的等边三角形(s,u,t) 的两侧替换中间线段。
对新段 (p1,s)、(s,u)、(u,t)、(t,p2) 递归重复此过程。
你应该从(0,0),(100,0) 作为第一段开始。
输入
给出一个整数 n。
输出
打印 Koch 曲线的每个点(x,y)。 在一行中打印一个点。 你应该从点(0,0) 开始,它是第一条线段的端点,并以点 (100,0) 结束,以便你可以将科赫曲线绘制为一条完整的线。 每个点的横纵坐标都应以小数形式给出,并且绝对误差最多为10−4。
约束
0≤n≤6
输入样例
1
输出样例
0.00000000 0.00000000
33.33333333 0.00000000
50.00000000 28.86751346
66.66666667 0.00000000100.00000000 0.00000000
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void draw(double x1,double y1,double x2,double y2,int n)
{
if(n==0)
{
return;
}
double th=M_PI*60.0/180;
double x3=x1+(x2-x1)/3.0;
double y3=y1+(y2-y1)/3.0;
double x4=x2-(x2-x1)/3.0;
double y4=y2-(y2-y1)/3.0;
double x5=(x4-x3)*cos(th)-(y4-y3)*sin(th)+x3;
double y5=(x4-x3)*sin(th)+(y4-y3)*cos(th)+y3;
draw(x1,y1,x3,y3,n-1);
printf("%.8f %.8f\n",x3,y3);
draw(x3,y3,x5,y5,n-1);
printf("%.8f %.8f\n",x5,y5);
draw(x5,y5,x4,y4,n-1);
printf("%.8f %.8f\n",x4,y4);
draw(x4,y4,x2,y2,n-1);
}
int main()
{
int n;
scanf("%d",&n);
printf("0.00000000 0.00000000\n");
draw(0.0,0.0,100.0,0.0,n);
printf("100.00000000 0.00000000\n");
return 0;
}