计算机 数学图形与动画 网摘

由于本人平时页想过一些图形的变化,奈何头脑不够又怕想错(比如将太极图展开成长方形的颜色是如何分布的(小学时就用纸做过,但是很不理想))
在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;
}

布朗树(貌似是java代码?)
https://blog.csdn.net/qq_39464369/article/details/89514828

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章