白二娃
不知你還記得百歲山有個美少女給路邊老頭送水的廣告嗎?是不是不明所以?其實這個廣告講述的是一個“笛卡爾曲線”的愛情故事。
1649年18歲的瑞典公主克里斯汀在斯德哥爾摩的街頭邂逅了52歲窮困潦倒的數(shù)學家笛卡爾。閑談后,公主聘請笛卡爾成為自己的數(shù)學老師,教授她研究數(shù)學的新領(lǐng)域——直角坐標系。兩人在教學中彼此產(chǎn)生愛慕之心,這事被國王知道后下令流放笛卡爾,軟禁克里斯汀。笛卡爾直到去世依然堅持寫信給公主,可惜這些信都被國王攔截了。笛卡爾去世前的最后一封信中寫了一個特殊的方程式r=a(1-sinθ),因為沒人能看懂國王就把這封信給了公主。公主解開這個方程式得到了一個心形曲線,也知道了笛卡爾的心意,這就是著名的“笛卡爾曲線”(圖1)。
我們根據(jù)一些簡單的函數(shù)方程式就可以繪制出美妙的曲線,但是在計算機沒有普及的時候,繪制函數(shù)曲線是很復雜的工作(圖2)。
數(shù)學中“函數(shù)”的定義:給定一個數(shù)集A,假設(shè)其中的元素為x。現(xiàn)對A中的元素x施加對應(yīng)法則f,記作f(x),得到另一數(shù)集B。假設(shè)B中的元素為y,則y與x之間的等量關(guān)系可以用y=f(x)表示。我們把這個關(guān)系式就叫函數(shù)關(guān)系式,簡稱函數(shù)。函數(shù)概念含有三個要素:定義域A、值域B和對應(yīng)法則f。其中核心是對應(yīng)法則f,它是函數(shù)關(guān)系的本質(zhì)特征。
編程中的函數(shù)也有類似但不完全相同的概念,其中函數(shù)的輸入?yún)?shù)可以看作是定義域A,函數(shù)的運行所改變的結(jié)果可以看作值域B,而函數(shù)的算法(過程)就是對應(yīng)法則f。
Scratch里我們可以在“自制積木→制作新的積木”里建立新函數(shù)。
在二維平面,如果有函數(shù) f(x) = y,其中任意一組(x,y)值是該曲線上的點的橫坐標和縱坐標值,描繪出符合函數(shù)的全部點時可以在平面直角坐標系上呈現(xiàn)為一條曲線。
要想掌握使用Scratch根據(jù)各種不同的函數(shù)方程式繪制曲線的通用方法,我們要從最基礎(chǔ)的一次函數(shù)開始,逐步掌握更加復雜的曲線繪制方法,畫出各種優(yōu)美的函數(shù)曲線圖形感受數(shù)學之美。
若兩個變量x,y間的關(guān)系式可以表示為y=kx+b(k,b為常數(shù),k≠0)的形式,則稱y是x的一次函數(shù)(x為自變量,y為因變量)。
我們先從最簡單的一次函數(shù)y=x開始。x是橫坐標,y是縱坐標。y=x函數(shù)的意思就是橫坐標和縱坐標的值永遠一樣,即:
x=1 時 y=1 …… x=100 時 y=100
在Scratch里,我們就可以畫100個縱橫坐標相等的點,把它們連起來就是y=x的函數(shù)曲線,一根從(0,0)開始的向(1,1)的直線(圖3)。
我們之后再增加兩個變量k、b,并改變函數(shù),就可以畫出任意一次函數(shù)y=kx+b的曲線。為了更好地 規(guī)范和簡化代碼,我們將畫圖和函數(shù)部分分開了,為函數(shù)新建了積木“一次函數(shù)‘k‘b‘x”,這個積木有3個數(shù)字參數(shù)。這樣每次計算y=kx+b時,只需要拖動這個積木到需要的地方就可以了。
而要改變函數(shù)內(nèi)部結(jié)構(gòu)時,也只需要修改一次函數(shù)的定義部分就可以了,函數(shù)越復雜就越能節(jié)省開發(fā)時間并避免出錯。
二次函數(shù)基本表示形式為y=ax2+bx+c(abc為常量,a≠0)。 二次函數(shù)的圖像是一條對稱軸與y軸平行或重合于y軸的拋物線。x2用x*x表示。a、b、c可以自己設(shè)置,x從-50增加到50(圖4、圖5)。
接下來我們畫一些和三角函數(shù)相關(guān)的曲線。Scratch里有三角函數(shù)積木,運算→“絕對值”積木下拉菜單中可以選擇使用。
正弦曲線函數(shù)可表示為y=Asin(ωx+φ)+k,其中sin為正弦符號,A、k、ω和φ是常數(shù)(A、k、ω、φ∈R,R是實數(shù)域即A、k、ω、φ均為實數(shù),且ω≠0),正弦曲線是一條波浪線。只需要根據(jù)函數(shù)設(shè)定和修改相應(yīng)積木即可。具體常數(shù)設(shè)置如圖7。
橢圓的+=1,其中a>0,b>0,當a=b時就是正圓形。將這個公式轉(zhuǎn)為參數(shù)方程方便計算xy的值:x=acosθy=bcosθ,θ為角度,畫圖時用循環(huán)代碼重復360次,將θ從0度增加到360度,a、b為常量控制橢圓的外形,代碼如圖8,圖9,效果如圖10。
最后我們來畫笛卡爾曲線。我們已知的r=a(1-sinθ)是笛卡爾曲線的極坐標公式,沒有x和y坐標,需要轉(zhuǎn)為直角坐標,變成下面的函數(shù):
x=cos t*a(1-sint)
y=sin t*a(1-sint)
其中a是控制心形大小的常量。t為角度參數(shù),通過Scratch編程讓畫筆跟隨t轉(zhuǎn)一圈即從0度-360度就可完成作畫,代碼如圖11,圖12,效果如圖2。
只要知道曲線函數(shù)的表達公式你可以用此種方法畫出各種美麗的圖形,搜索“proe曲線方程”可以找到幾十種漂亮的曲線方程。當你有更多的數(shù)學知識就可以把這些公式轉(zhuǎn)化為程序畫出來了,因為其中有不少曲線需要縱坐標z,這要用公式將(x,y,z)坐標轉(zhuǎn)換為當前視角(xz,yz)的坐標才能畫出來。再添加上變換顏色的代碼,整個圖形就非常漂亮了。
在本版掃碼下載中有一個莫比烏斯環(huán)3D源程序(@科技傳播坊),你可以下載后自行學習如何換算z坐標(如圖13)。
根據(jù)函數(shù)公式畫曲線,首先需要找到曲線的直角坐標系公式,如果是極坐標公式需要提前轉(zhuǎn)換,這樣才可確定曲線上點的x和y坐標。接著根據(jù)公式設(shè)定相應(yīng)變量,并在新建積木中組合好x和y的表達方程式。循環(huán)給自變量x賦值,根據(jù)方程式算出因變量y的值,讓畫筆循環(huán)在(x,y)畫點就可以畫出相應(yīng)的曲線了。
如果是有sin、cos等三角函數(shù)相關(guān)曲線,一般需要將角度變量變化360次(一個圓周)。