本文詳細分析如何使用Python turtle繪制陰陽太極圖,先來分解這個圖形,圖片中有四種顏色,每條曲線上的箭頭表示烏龜移動的方向,首先從中心畫一個半圓(紅線),以紅線所示圓的直徑作半徑畫一個校園,半徑為紅線所示圓半徑的0.15倍(藍線),之所以選擇0.15倍,是因為這樣嵌入紅圓內的小圓直徑和紅圓直徑接近黃金分割。
創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的津市網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
相關推薦:《Python視頻教程》
完整代碼:
效果圖如下:
最佳回答:奇函數關于原點對稱,就像太極圖,比如y=x.偶函數關于Y軸對稱,比如y=|x|.增函數就是Y隨X增大而增大,比如 y=x 減函數是Y隨著.
太極圖中體現的是對立的陰陽變化。靜態的太極圖中關鍵部位是:太極圖的邊界,陰陽分割線,和魚眼。從數學上看,可以這樣理解:
關于魚眼和無窮的關系,這里簡單描述一下。在數學上,無窮大是一個很有意思的概念。正無窮是比所有正數都大,負無窮比所有的負數都小。但是正無窮和負無窮卻是相同的,它們可以認為是同一個點。也就是說沿著正無窮的方向,會發現是通往了負無窮。基于上面的理解,對太極圖的二維方程描述進行了如下猜想。
二維太極方程猜想如下:
對應的曲線圖:
從太極圖的橫軸上,容易看出:
于是假設太極方程是一個分式:
零點可以表示為分子為0,極點可以表示為分母為0。所以分母2個極點,就是可以表示為二元二次方程:
一共5個獨立的參數。只有2個極點,所以看看這些參數有什么關系。代入極點位置(+/-x1, 0):
這樣容易算出:a不可能為0,這樣a就可以消去。這樣d=0.所以b, c, e為任意值,可以取a為1:
再看分子,在x軸上,有3個零點,所有可以假設二元三次方程。方程的形式為如下。代入3個零點(0,0),(+/-x0,0), 由于a0不為0,所以可以消去a1,這樣:
其它6個和y相關的參數都可以任意數。這樣,方程可以表示為(x0表示零點,x1表示極點):
上面的方程y軸還是有很大的自由度。可以看看單x軸的變化情況,y=0,x0=1, x1=1/2方程簡化如下。從曲線看來,font style="color:red"這種曲線明顯不符和太極圖/font。因為在極點附近發現出現正負變化的極點。而太極圖的極點應該是單向的,也就是1/2或-1/2的地方出現的極點是單項往上或下的。
要做修補其實很簡單。對分母取絕對值就可以。絕對值可以用平方的開根號表示。分子的形式是一個奇函數。所以方程形式修改為:
這個方程的x軸曲線x=[-2, 2],y=0的圖像表示為:
再看看x=0的情況下,y軸的數值曲線情況。根據太極圖,在y的[-1,1]的范圍內,應該只有(0,0)和邊界(0,+/-1)這三個零點,沒有極點。也就是分母在[-1,1]間沒有零點解。所以:
接下去,看太極圖的外圓上,應該都是零點。可以取+/-45度和+/-135度來看,太極圖半徑為1,所以(x,y)可以為如下4個點:(+/-sqrt(2)/2, +/-sqrt(2)/2)。代入分子:
(1)+(2)=
(1)+(3)=
(1)+(4)=
現在方程的形式為:
這個方程在零點的表達上,體現出了2條曲線:一條是在半徑為1的圓上,還有就是一條過原點的直線上。我們知道這個太極陰陽分割線是直線太過簡單,和太極圖不吻合。太極圖上的陰陽分割線應該是一條弧線,而不是一條直線。 網上 有論述過分割線的數學方程 ,這比直線或半圓更合適的太極分割線。其表示方法是:
所以f(x,y)可以這樣表述,分子完美描述了太極圖的上的零點:
上面方程,在b2,b3,b4全部為0的時候的三維曲線圖為:
對這個圖的詮釋就是,已經和太極圖有些像了,但是極點位置由于和y不相關,所以顯得不是一個勻稱的點,而是一塊板。對極點進行修改。期望的魚眼是什么樣子呢?從變化的趨勢看,應該也是一條弧線,而不是一個點。而且我們也知道,在陰陽分割線上,魚眼x=+/-sqrt(2)/2的地方,除了y=0的地方是極點外,其余地方應該不是極點。所以對于分母的方程,其實b2/b3/b4是不能夠全部為0的。下面這個方程在太極圓內部,y=0處x有2個解。反過來看,太極圓內,當x=+/-sqrt(2)/2時候,y只能有一個解,也就是只有1個極點。當然,太極圓外部可能還有y的解,但是如果這種情況存在的話,會影響太極圖的形狀?所以先假設y只有一個解。這樣可以看到,根據二次方程只有一個解的條件:
這樣分母就成為:
這個結果是有問題的。這樣的曲線是連續的橢圓,圓,或雙曲線。所以分母這種形式,不是只形成2個極點的情況,而是在x,y平面上的一條曲線,都能滿足極點。J(x,y)=0,在xy平面上只形成2個零點,這會是什么樣的一種函數呢?直接猜想,就是如下。b2的作用是控制極點的收斂速率。如果b2大,那么收斂也快。我試下來b2=16比較好,x和y方向的收斂速度比較一致:
關于這個太極函數的極性(正負)分析 :
分母都是正數。分子在太極圖內部(x 2+y 2-1)始終是負數。所以正負極性只取決于函數:
而這個函數在太極圖內部的解就是陰陽分割線。所以在太極圖內部,是沒有其它的陰陽交錯的地方。
看看局部的3維的太極圖(由于魚眼是極點,所以只取一段繪圖):
從太極圖上,可以看到兩個轉換:
至于這個太極方程能夠如何用于描述陰陽轉換,有待進一步分析。討論請聯系 bigstone1998@sina.com .
這個得結合 windows api寫 ,我寫了一個效果如下:
主要函數的代碼如下:
VOID?DrawTaiJi(?HWND?hWnd,?
HDC?hDc,
int?cxStart,
int?cyStart,
int?cxEnd,
int?cyEnd,?
COLORREF?color_yin,
COLORREF?color_yang?)
{
HBRUSH?YinBrush?=?::CreateSolidBrush(color_yin);
HBRUSH?YangBrush?=?::CreateSolidBrush(color_yang);
HPEN?YinPen?=?::CreatePen(PS_SOLID,?1,?color_yin);
HPEN?YangPen?=?::CreatePen(PS_SOLID,?1,?color_yang);
//使用陰筆、陰刷畫出大圓
::SelectObject(hDc,?YinBrush);
::SelectObject(hDc,?YinPen);
::Ellipse(hDc,?cxStart,?cyStart,?cxEnd,?cyEnd);
//使用陽筆、陽刷畫出半圓與陰中突出的陽半圓
::SelectObject(hDc,?YangBrush);
::SelectObject(hDc,?YangPen);
::Pie(hDc,?cxStart,?cyStart,?cxEnd,?cyEnd,?cxStart?+?(cyEnd?-?cyStart)?/?2?,?cyStart,?
cxStart?+?(cyEnd?-?cyStart)?/?2?,?cyEnd);
::Ellipse(hDc,?(cxEnd?-?cxStart)?/?4?+?cxStart,?(cyEnd?-?cyStart)?/?2?+?cyStart,?
3?*?(cxEnd?-?cxStart)?/?4?+?cxStart,?cyEnd);
//使用陰筆,陰刷畫出陽中突出的陰半圓
::SelectObject(hDc,?YinBrush);
::SelectObject(hDc,?YinPen);
::Ellipse(hDc,?(cxEnd?-?cxStart)?/?4?+?cxStart,?cyStart,?3?*?(cxEnd?-?cxStart)?/?4?+?cxStart,?
(cyEnd?-?cyStart)?/?2?+?cyStart);
//使用陰筆,陰刷畫出陽中突出的陽小圓
int?ConValue?=?(cxEnd?-?cxStart?)?/?200?+?1;
::Ellipse(hDc,?(cxEnd?-?cxStart)?/?2?+?cxStart?-?5?*?ConValue,
3?*?(cyEnd?-?cyStart)?/?4?+?cyStart?-?5?*?ConValue?,?
(cxEnd?-?cxStart)?/?2?+?cxStart?+?5?*?ConValue,
3?*?(cyEnd?-?cyStart)?/?4?+?cyStart?+?5?*ConValue
);
//使用陽筆,陽刷畫出陰中的陽小圓
::SelectObject(hDc,?YangBrush);
::SelectObject(hDc,?YangPen);
::Ellipse(hDc,?(cxEnd?-?cxStart)?/?2?+?cxStart?-?5?*?ConValue,
(cyEnd?-?cyStart)?/?4?+?cyStart?-?5?*?ConValue,
(cxEnd?-?cxStart)?/?2?+?cxStart?+?5?*?ConValue,
(cyEnd?-?cyStart)?/?4?+?cyStart?+?5?*?ConValue
);
::DeleteObject(YinBrush);
::DeleteObject(YinPen);
::DeleteObject(YangPen);
::DeleteObject(YangBrush);
}
可能復制代碼后你不有直接看到效果,所以我把相關的代碼都一起打包了:
我是菜鳥,希望能幫到你,觀樓主英俊瀟灑,風流倜儻,必當世豪杰,誠邀加入0x30百度貼吧,共商義舉,建不世之功!