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