分形几何学是一门以不规则几何形态为研究对象的几何学。一个数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。虽然分形是一个数学构造,它们同样可以在自然界中被找到,这使得它们被划入艺术作品的范畴。

计算机协助了人们推开分形几何的大门。法国数学家曼德尔勃罗特这位计算机和数学兼通的人物,开创了新的数学分支——分形几何学。分形在医学、土力学、地震学和技术分析中都有应用。

毕达哥拉斯树(Pythagoras tree)是由毕达哥拉斯根据勾股定理所画出来的一个可以无限重复的图形。又因为重复数次后的形状好似一棵树,所以被称为毕达哥拉斯树,也叫“勾股树”。

这个程序,展示了毕达哥拉斯树的生成。执行效果如下:

我的求解思路是:

  1. 确定直线 p1-p2,并在 p1-p2 的左侧求出 p11-p22,使 p1-p2-p22-p11 构成正方形。
  2. 求出点 p,使  p-p11-p22 构成含 60 度角的直角三角形。
  3. 分别将直线 p-p11 和 p-p22 看作 p1-p2,递归。递归的条件是正方形的边长大于 3。

完成的 C 语言源代码如下:

///
// 程序名称:毕达哥拉斯树(Pythagoras tree)
// 编译环境:Mictosoft Visual Studio 2010, EasyX_20200315(beta)
// 作  者:LOVE MY D.O. <1509840721@qq.com>
// 最后修改:2020-4-10
//
#include <graphics.h>
#include <conio.h>
#include <math.h>const double PI = 3.1415926536;// 定义一个结构体 Point,存储点的坐标
struct Point
{double x;double y;
};// 直线的旋转(p1 是定点)
Point Rotate(Point p1, Point p2, double angle)
{Point r;r.x = p1.x + (p2.x - p1.x) * cos(angle) + (p2.y - p1.y) * sin(angle);r.y = p1.y + (p2.y - p1.y) * cos(angle) - (p2.x - p1.x) * sin(angle);return r;
}// 直线的缩放(p1 是定点)
Point Zoom(Point p1, Point p2, double ratio)
{Point r;r.x = p1.x + (p2.x - p1.x) * ratio;r.y = p1.y + (p2.y - p1.y) * ratio;return r;
}// 画出正方形
void Draw(Point p1, Point p2)
{Point p11 = Rotate(p1, p2, 90 * PI / 180);Point p22 = Rotate(p2, p1, 270 * PI / 180);POINT pts[] = { { int(p1.x + 0.5),  int(p1.y + 0.5) },                   // +0.5 是为了四舍五入{ int(p2.x + 0.5),  int(p2.y + 0.5) },{ int(p22.x + 0.5), int(p22.y + 0.5) }, { int(p11.x + 0.5), int(p11.y + 0.5) } };static int color_H = 270;setfillcolor(HSVtoRGB(float(color_H), 1, 1));                            // 设置正方形的填充颜色setlinecolor(HSVtoRGB(float((color_H + 80) % 360), 0.5, 0.5));            // 设置正方形的边框颜色color_H = (color_H + 1) % 360;fillpolygon(pts, 4);                                                   // 填充正方形颜色if (((p22.x - p11.x) * (p22.x - p11.x) + (p22.y - p11.y) * (p22.y - p11.y)) > 3 * 3 ) // 正方形的边长 >3 时递归{double a = 60 * PI / 180;                  // 60 度形式
//      double a = 45 * PI / 180;                  // 45 度形式Point p = Rotate(p11, p22, a);p = Zoom(p11, p, cos(a));Draw(p, p22);Draw(p11, p);}
}// 主函数
int main()
{initgraph(640, 480);               // 初始化窗口setbkcolor(0xfecaeb);               // 设置背景颜色cleardevice();Point p1 = { 290, 400 };Point p2 = { 350, 400 };Draw(p1, p2);_getch();closegraph();                        // 关闭窗口return 0;
}

毕达哥拉斯树(Pythagoras-tree)相关推荐

  1. C语言实现“勾股树”——毕达哥拉斯树

    序 将所以的烦恼搓成几缕无须羁绊的情绪,抛之脑后~ 嗨!这里是狐狸~ 今天给大家带来了一个'勾股树'--毕达哥拉斯树! 毕达哥拉斯树(Pythagoras tree)是由毕达哥拉斯根据勾股定理所画出来 ...

  2. 毕达哥拉斯树(pythagorasTree)原理解析及canvas动画实现

    以前就看到了这个东西,由于太忙了最近才有时间来实现这个; 该文章适合有一定 canvas 基础的人阅读; 首先说说他的原理: The construction of the Pythagoras tr ...

  3. 毕达哥拉斯树实现代码

    毕达哥拉斯树实现代码(带颜色单击变化)递归加勾股实现(canvas作图) <!DOCTYPE html> <html lang="en" style=" ...

  4. 使用行为树(Behavior Tree)实现网游奖励掉落系统

    原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统 by AKara 2 ...

  5. 数据结构与算法(C++)– 树(Tree)

    数据结构与算法(C++)– 树(Tree) 1.树的基础知识 树(tree): 一些节点的集合,可以为空集 子树(sub tree): 树的子集 根(root): 树的第一个节点 孩子和父亲(Chil ...

  6. C语言实现段树segment tree(附完整源码)

    C语言实现段树segment tree 段树结构体定义 实现以下6个接口 完整实现和main测试源码 段树结构体定义 typedef struct segment_tree {void *root; ...

  7. 看动画学算法系列之:后缀树suffix tree

    文章目录 简介 字典树Trie 压缩字典树 后缀树Suffix Tree 后缀树的搜索 查找最长重复子字符串 查找两个字符串的最长公共子字符串 后缀树的代码实现 简介 模式匹配是一个在工作中经常会用到 ...

  8. 伸展树(Splay tree)图解与实现

    伸展树(Splay tree)图解与实现 伸展树(Splay tree)图解与实现_小张的专栏-CSDN博客_splay树 Splay树详解 Splay树详解 - 秦淮岸灯火阑珊 - 博客园 平衡树 ...

  9. 使用行为树(Behavior Tree)实现游戏AI

    注意:本文版权归Csdn AKara所有,此处纯粹转载,如有再转,请严格按如下方式显示标明原创作者及出处,以示尊重!! 关注公众号 风色年代(itfantasycc) 200G Unity资料合集送上 ...

最新文章

  1. 二、如何保存MNIST数据集中train和test的图片?
  2. 扩展基于注解的spring缓存,使缓存有效期的设置支持方法级别-redis篇
  3. 一场开源数据库的精酿啤酒节,会有多少种味道?
  4. 「测评」酷炫“霸王龙”Miposaur机器人测评
  5. matlab apfc,APFC-Boost 带APFC的Boost升压变换器在Matlab中的仿真实现 - 下载 - 搜珍网...
  6. day16——函数式编程和内置函数
  7. 开启及关闭go mod
  8. [react] 什么渲染劫持?
  9. Spark学习-SparkSQL--01-SparkSQL CLI
  10. 纠结也好,蛋疼也罢,既然创业了,就把路走好。
  11. 搭建深度学习推荐系统实战
  12. 《python基础教程(第二版)》学习笔记 基础部分(第1章)
  13. sql server 恢复数据库时提示有其他用户连接,怎么办?
  14. 复习HTTP状态码+301和302
  15. PyTorch神经网络搭建入门
  16. 可作为工质状态参数的是_§2工质的热力状态及其基本状态参数
  17. centos挂载本地镜像作为yum源
  18. 写给学生看的系统分析与验证笔记(一)——形式化基础
  19. 学习笔记(4):零基础掌握 Python 入门到实战-深入浅出字符串(二)
  20. Spring源码杂集

热门文章

  1. 一起学Netty(六)之 TCP粘包拆包场景
  2. laravel tcg/voyager 安装问题记录
  3. Java之-springboot
  4. 为了一亿像素,小米走进“第八号当铺”
  5. 恭喜清华姚班校友马腾宇等18名华人科学家获得2021年斯隆奖学金!
  6. 计算机早期科学家起源,月球起源说
  7. 推荐一个基于 Vue 的前端界面可视化设计器项目
  8. CMNET与CMWAP的区别
  9. 灰度图学习_为什么灰度图是灰色的??
  10. 电脑翻译软件-大家都觉得好用的免费电脑翻译软件