科赫曲线【东北大学oj数据结构5-3】C语言

编写一个程序,读取整数 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.00000000

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值