其原因有兩條:一是看似簡單的數學公式可以生成十分復雜的圖像圖形,二是看似十分復雜的圖像圖形可以由簡單的數學公式實現。 顯然這兩句話是一個意思,也并沒有什么營養。
最初我以為笑話里講的“數字里添加的字母”是代數里用的x、y、z。后來我慢慢意識到,罪孽深重最大惡極的sin會導致數學變得更加險惡。 為了洞悉數學的險惡,我曾試圖將數學以圖形圖像的方式顯示出來,并寫過幾個程序DEMO可以利用數學公式轉化成圖形圖像。DEMO發在葉飛影 - 博客園里,有興趣可以去看看。現在很多數學軟件都有類似的功能,我只是習慣用自己的這套邏輯,自得其樂而已。文中所發的圖片都是從我寫的程序DEMO中截屏出來的。 1
正弦波
提到“波”這個詞,我第一會想到波波,第二則想到正弦sin。很容易畫出函數y=sin(x)的圖形:
正弦波
我有個大學同學曾經說過:“人生就像一條正弦波,有時在波峰,有時在波谷。我現在正處于波谷,但我相信將來不久,我就會爬上波峰。” 然而,這個比喻并不準確,否則人生就不會起起落落落落落落落落......了。我覺得更準確的比喻是:人生就像若干條正弦波的疊加,你永遠不知道自己下一步是起還是落。
看看這個正弦波疊加函數: y = sin(x) + sin(x*2)/2 + sin(x*4)/4 + sin(x*8)/8 + sin(x*16)/16 + sin(x*32)/32 + sin(x*64)/64 + sin(x*128)/128
有規律的正弦波疊加 該函數由8個正弦波疊加組成,每個波有它的振幅和頻率。然而世事無常,每個波的振幅和頻率決不會那么地有規律,如果用隨機數設置這8個波的振幅和頻率,可以得到如下圖像:
隨機的正弦波疊加 現在問題來了,隨意選中圖像所繪曲線上的一點,該如何判斷該點將來是漲還是跌?漲又能漲多少?跌又能跌多少?這只有知道每個正弦波的振幅和頻率才能知道。小時候看電視劇《大時代》,里面講炒股要追“勢”,將股票的波動曲線析構成一個個的“勢”的作用結果。通過對股票波動曲線的研究,分析出每個“勢”的大小和周期,以此漲勢則買入,跌勢則賣出,無往不利。
然而單看這么一根根屌絲一樣的曲線,我是沒有辦法得到振幅和頻率的具體數值,我甚至連有幾個正弦波都看不出來。理論是美好的,現實是殘酷的,我斷然沒有這方面的才能,所以不敢踏入股市。就如同我知道一點點概率論的知識(投入值大于期望值八成會虧本),就不敢買彩票一樣。 加大正弦波的振幅,加快正弦波的頻率,可以生成類似下面這樣的圖像:
波動圖
是不是感覺有點亂糟糟的,還可以更亂嗎?當然可以! 看看函數:y = fract(sin(x)*1000000.0)。fract是對實數忽略整數位只取小數位的操作。這個函數的圖像如下:
隨機圖
這個函數的用處就是為了生成隨機數。當然真正大神寫的隨機數生成的函數是: y = fract(sin(x*12.9898)*43758.5453123)。
至于為什么設置12.9898和43758.5453123這兩個常數值,我也不知道呀!大神的思維不是我等凡人所能理解的,我只知道如果設置了其他數,生成的數值可能就不夠隨機了。 2
二維三維......
題目提到的方程是個二元方程,對應的圖形是個二維圖形。我們先從簡單的來講: 函數y = sin(x)擴展到二維可以是z = sin(x) + sin(y),也可以是z = sin(x + y),還可以是z = sin(x)*sin(y)、z = sin(x * y)。
每一個函數都是讓人頭暈目炫,憑我怎么去想,也想不清晰這些函數應該是什么樣。
有一天晚上,我半夜醒來睡不覺,就閉著眼睛想z = sin(x) + sin(y)這個函數應該是什么樣,這貨應該是圓的還是方的呢?怎么都想不清楚,第二天早上,起來用程序畫了一下。OK,原來它是這個樣子的:
z = sin(x) + sin(y) 加點偽彩顏色后,看讓去不會那么讓人眼暈:
z = sin(x) + sin(y) 原來這貨是既圓又方,這圖像真讓人眩暈,如果那晚我能想象出這個函數的圖像,應該會很快再度安然入睡。。 方程sin(x) + sin(y) = 1的圖像:
sin(x) + sin(y) = 1 方程sin(x) + sin(y) = 0的圖像:
sin(x) + sin(y) = 0 如果再增加一維,函數變為:w = sin(x) + sin(y) + sin(z),這就有點難畫了。
這是個三維函數,屬于體素數據,是個實心的。
要看體素的內部數值,可以使用體繪制,但我只有顯示其切片的辦法。當然切片不一定是平面,可以用個曲面來切,將切到的數值以顏色的形式顯示出來。
下圖為用一個半徑為40的球體切割函數w = sin(x) + sin(y) + sin(z),然后把數值轉化成灰度,得到的圖形:
w = sin(x) + sin(y) + sin(z) 灰度圖看著不爽,加點偽彩顏色瞧瞧:
w = sin(x) + sin(y) + sin(z) 球看著也不爽,既然z = sin(x) + sin(y)可以生成一個平面地形高度圖形,那么就可以用w = sin(x) + sin(y) + sin(z)生成一個星球高度圖形:
w = sin(x) + sin(y) + sin(z)
w = sin(x) + sin(y) + sin(z) 如果你們還想知道四元及以上的可視化效果,諸如:k = sin(x) + sin(y) + sin(z) + sin(w),我也沒辦法啊!四維世界的險惡,我做為三維世界的生物根本看不到,也想不懂。 3
sin(x2)+sin(y2)=1
話題回到問題中的方程上。先看函數y = sin(x2),我們可以很容易畫出它的圖像:
y = sin(x2) 然后將一元變量的函數擴展到二元變量:z = sin(x2)+sin(y2) 可以將該函數以地形高度圖的方式進行顯示:
正面
反面
然后用平面z = 1橫切該地形,就可以得到方程sin(x2)+sin(y2)=1的圖像:
sin(x2)+sin(y2)=1 不過我更愿意將z轉化成一個像素值而不是高度值,下圖為將z轉化成灰度值生成的一幅黑白圖像:
灰度圖 可以將z = 1的區域用紅色標識一下:
灰色圖+勾勒sin(x2)+sin(y2)=1 既然是灰度值,就可以對其做偽彩調色,以生成更漂亮的彩色圖像:
偽彩圖1
偽彩圖2
偽彩圖3
再增加一維,函數變為:w = sin(x2) + sin(y2) + sin(z2)。下圖為用一個半徑為10的球體切割得到的圖形:
w = sin(x2) + sin(y2) + sin(z2)
w = sin(x2) + sin(y2) + sin(z2)
w = sin(x2) + sin(y2) + sin(z2)
w = sin(x2) + sin(y2) + sin(z2) 最后,大家想不想看看方程sin(x2)+sin(y2)+sin(z2)=1的圖形效果?圖形中含有很多可愛的激凸喲!
數值范圍(-2.2, 2.2)
數值范圍(-3.3, 3.3)
數值范圍(-4.15, 4.15)
數值范圍(-10, 10)
數值范圍(-10, 10) 當然也有方程sin(x2)+sin(y2)+sin(z2)=0的圖形效果,密集恐懼癥患者的福利:
數值范圍(-6, 6)
數值范圍(-10, 10)
審核編輯:劉清
原文標題:為什么 sin(x2)+sin(y2)=1 的圖像這么復雜?
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論