計算機 數學圖形與動畫 網摘

由於本人平時頁想過一些圖形的變化,奈何頭腦不夠又怕想錯(比如將太極圖展開成長方形的顏色是如何分佈的(小學時就用紙做過,但是很不理想))
在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

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