畢達哥拉斯樹(Pythagoras tree)

2021-10-18 06:26:55 字數 1731 閱讀 5187

分形幾何學是一門以不規則幾何形態為研究物件的幾何學。乙個數學意義上分形的生成是基於乙個不斷迭代的方程式,即一種基於遞迴的反饋系統。雖然分形是乙個數學構造,它們同樣可以在自然界中被找到,這使得它們被劃入藝術作品的範疇。

計算機協助了人們推開分形幾何的大門。法國數學家曼德爾勃羅特這位計算機和數學兼通的人物,開創了新的數學分支——分形幾何學。分形在醫學、土力學、**學和技術分析中都有應用。

畢達哥拉斯樹(pythagoras tree)是由畢達哥拉斯根據勾股定理所畫出來的乙個可以無限重複的圖形。又因為重複數次後的形狀好似一棵樹,所以被稱為畢達哥拉斯樹,也叫「勾股樹」。

這個程式,展示了畢達哥拉斯樹的生成。執行效果如下:

我的求解思路是:

確定直線 p1-p2,並在 p1-p2 的左側求出 p11-p22,使 p1-p2-p22-p11 構成正方形。

求出點 p,使  p-p11-p22 構成含 60 度角的直角三角形。

分別將直線 p-p11 和 p-p22 看作 p1-p2,遞迴。遞迴的條件是正方形的邊長大於 3。

完成的 c 語言源**如下:

///

// 程式名稱:畢達哥拉斯樹(pythagoras tree)

// 編譯環境:mictosoft visual studio 2010, easyx_20200315(beta)

// 作  者:love my d.o. <[email protected]>

// 最後修改:2020-4-10

//#include #include #include const double pi = 3.1415926536;

// 定義乙個結構體 point,儲存點的座標

struct point

;// 直線的旋轉(p1 是定點)

point rotate(point p1, point p2, double angle)

// 直線的縮放(p1 是定點)

point zoom(point p1, point p2, double ratio)

// 畫出正方形

void draw(point p1, point p2)

, // +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 時遞迴 }

// 主函式

int main()

; point p2 = ;

draw(p1, p2);

_getch();

closegraph(); // 關閉視窗

return 0;

}

數學三次危機(一)畢達哥拉斯學派的數學發現

畢達哥拉斯建立的學派在他生前與死後都進行了大量的數學研究,並得到了眾多的數學發現。他們的成果後來被歐幾里得收入 幾何原本 中,稱為希臘數學的重要組成部分。不過,這些數學成果究竟是由何人在何時做出的,大都很難考證清楚了。因此,我們下面介紹的發現除個別有據可查的歸於個人外,其餘則只要歸於整個畢達哥拉斯學...

克魯斯卡爾重構樹

處理給出無向圖,會出現重邊,共m條路徑,每條路徑有乙個困難值,q次詢問,求從點x出發只經過困難值小於等於v的路徑,求某個值。克魯斯卡爾重構樹的核心思想是,當新增最小生成樹的邊的時候,不在兩個點之間直接加邊,而是新建節點,讓邊的兩個節點分別成為它的左右兒子節點,然後這個新建的點,就成為整個聯通塊的代表...

克魯斯卡爾重構樹

克魯斯卡爾重構樹就是在用克魯斯卡爾演算法計算最小生成樹時,構造出一棵樹。當題目需要用到最小生成樹時,常常利用重構樹將其轉化為樹上問題。重構過程 在連線兩個點時,將其連向乙個新點,新點的點權為這條邊的邊權。並查集上就把這兩點的父親設為這個新點。這樣我們就維護了一棵從底向上點權遞增的一棵二叉樹。這棵樹具...