zoukankan      html  css  js  c++  java
  • 科赫曲线——递归

    由递归函数画出

    1:将给点线段(p1,p2)三等分

    2:以三等分点s、t为顶点做出正三角形(s,u,t)

    3:对线段(p1,s)、(s,u)、(u,t)、(t,p2)递归重复上述操作

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    #define M_PI 3.1415926
    
    typedef struct node {
        double x, y;
    } P;
    void koch(int n, P a, P b) {
        if (n == 0) return;
        P s, t, u;
        double th = M_PI * 60.0 / 180.0;
    
        s.x = (2.0 * a.x + 1.0 * b.x) / 3.0;
        s.y = (2.0 * a.y + 1.0 * b.y) / 3.0;
        t.x = (1.0 * a.x + 2.0 * b.x) / 3.0;
        t.y = (1.0 * a.x + 2.0 * b.y) / 3.0;
        u.x = (t.x - s.x) * cos(th) - (t.y - s.y) * sin(th) + s.x;
        u.y = (t.x - s.x) * sin(th) - (t.y - s.y) * cos(th) + s.y;
    
        koch(n - 1, a, s);
        printf("%.8f %.8f
    ", s.x, s.y);
        koch(n - 1, s, u);
        printf("%.8f %.8f
    ", u.x, u.y);
        koch(n - 1, u, t);
        printf("%.8f %.8f
    ", t.x, t.y);
        koch(n - 1, t, b);
    }
    int main() {
        P a, b;
        int n;
        cin >> n;
        a.x = 0;
        a.y = 0;
        b.x = 100;
        b.y = 0;
        printf("%.8f %.8f
    ", a.x, a.y);
        koch(n, a, b);
        printf("%.8f %.8f
    ", b.x, b.y);
    
        return 0;
    }
  • 相关阅读:
    JSON
    Chromium 修改chrome.exe
    Chromium 修改任务管理器显示的Chromium
    winhttp get请求https
    string wstring 互转
    浏览器指纹在线监测获取网址
    咕了的构造题单总结
    Git 常用命令总结
    C# 网络地址是否有效
    IDEA如何从断点里获取对象所有数据
  • 原文地址:https://www.cnblogs.com/iwomeng/p/11308100.html
Copyright © 2011-2022 走看看