由于本人平时页想过一些图形的变化,奈何头脑不够又怕想错(比如将太极图展开成长方形的颜色是如何分布的(小学时就用纸做过,但是很不理想))
在B站上看到3blue1brown,太牛逼了,唤起了我想用代码实现这种东西的想法,顺便把自己搜到的这种“数学可视化” 的相关资源、可运行代码放出来,这就是本贴的意义。
万能的知乎:3Blue1Brown 的视频是怎么制作的?
https://www.zhihu.com/question/57357012/answer/723888621
一、相关推荐
工具:
matlab(高端不会用)
Wolfram Mathematica(太牛逼了)
LaTeX(从高等数学的图片中提取算式)官网:https://mathpix.com/
库:
openCV
openGL
Direct3D(图形接口)
python的turtle
网站:
贴吧fx-es(ms),里面一堆用计算器(不是计算机)的大佬,做让我觉得匪夷所思的东西。
二、可运行的代码(抛砖引玉)
c语言实现分型几何
https://yq.aliyun.com/articles/32082
其中"graphics.h"库
https://www.easyx.cn/downloads/下载EasyX库(附带graphics.h,单独下载.h文件是没用的)
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include"graphics.h"
void koch(double x0, double y0, double x1, double y1, int k)
{
double x2, y2, x3, y3, x4, y4;
x2 = 2.0 / 3 * x0 + 1.0 / 3 * x1; /*由上面的运算可以得到其余三点 坐标的计算式*/
y2 = 2.0 / 3 * y0 + 1.0 / 3 * y1;
x3 = 1.0 / 3 * x0 + 2.0 / 3 * x1;
y3 = 1.0 / 3 * y0 + 2.0 / 3 * y1;
x4 = 1.0 / 2 * (x0 + x1) - sqrt(3.0) / 6 * (y1 - y0);
y4 = 1.0 / 2 * (y0 + y1) + sqrt(3.0) / 6 * (x1 - x0);
if (k > 1) /*如果迭代次数大于1,就继续迭代下去,即执行以下程序*/
{
koch(x0, y0, x2, y2, k - 1); /*对以(x0, y0)和(x2, y2)为端点的线段作为
初始线段进行迭代运算,以下类同*/
koch(x2, y2, x4, y4, k - 1);
koch(x4, y4, x3, y3, k - 1);
koch(x3, y3, x1, y1, k - 1);
}
else { /*如果迭代次数等于1,停止迭代,画出迭代生成的图形*/
line(x0, y0, x2, y2); /*用直线联结两点(x0, y0)和(x2, y2)*/
line(x2, y2, x4, y4); /*用直线联结两点(x2, y2)和(x4, y4)*/
line(x4, y4, x3, y3); /*用直线联结两点(x4, y4)和(x3, y3)*/
line(x3, y3, x1, y1); /*用直线联结两点(x3, y3)和(x1, y1)*/
}
}
int main()
{
int n, gdriver = DETECT, gmode; /*定义迭代次数n*/
initgraph(&gdriver, &gmode, "C:\\Win-TC\\BGI"); /*图形系统初始化*/
printf("Please input the value of the positive integer n (n<9):");
scanf("%d", &n); /*输入迭代次数n*/
setcolor(GREEN);
koch(50, 120, 450, 120, n);
getch();
closegraph(); /*关闭图形系统*/
return 0;
}