數學圖形之心形


明天是七夕,中國的情人節,為了應節,這一篇提供幾個心形曲面的算法.

說到心形,我想到一個笑話,有個女老師在黑板上畫了個心形圖案,問學生加:"這是什么?"學生們回答:"屁股."老師氣哭了,去找校長理論.校長來了就批評學生:"你們怎么又的把老師給氣哭了呢?"然后看到了黑板上的圖案繼續說道:"你們也太調皮了,怎么還在黑板上畫了個屁股呢!"
好笑吧,其實我也有類似的經歷,有人曾對我說:"你怎么拿個屁股做博客園的頭像呢?"我只好無奈的回答:"這不是屁股,這是心形,而且這個心形是我用程序畫出來的."關於我的心形頭像生成的算法,請看我之前發的博客:屏保:畫線圈LineFlower3D屏保: 線圈WhyDemo: 畫線圈LineFlower.

我前幾天還發過一篇博客:數學圖形(1.4)心形線

關於心形曲面,我查找一些資料,但都是隱式方程的曲面,即給出一個數學方程式,然后說這個方程所表示的圖形即是一個心形曲面.對於隱式方程,我以后有機會再詳細介紹.我從網上下了一個隱式方程解析的代碼.不太好用,運算時間很長,圖形的頂點分布有些錯亂.如下圖所示:


我的軟件工具目前只能處理顯示方程的曲面.下面將發布我所寫的幾個心形曲面的算法腳本代碼:

(1)heart(圓變)
這是我在球曲面的基礎上變換出來的.

vertices = dimension1:80 dimension2:160
a = from 0 to (2*PI) dimension1
b = from (-PI*0.5) to (PI*0.5) dimension2
r = 10.0
c = sqrt(abs(a - PI))*1.5
x = r*cos(b)*sin(a)*c
y = -r*cos(b)*cos(a)*c
z = r*sin(b)*0.75

u = a
v = b*2
y = y - array_min(y)*0.5

 

(2)尖尖的心形

曲線:

vertices = 1000

r = 10.0
t = from 0 to (2*PI)
p = sin(t)*sqrt(abs(cos(t)))/(sin(t) + 7/5) - 2*sin(t) + 2
x = p*sin(t)
y = p*cos(t)

曲面:

vertices = D1:360 D2:100

r = 10.0

u = from 0 to (2*PI) D1
v = from (-PI/2) to (PI/2) D2

p = sin(u)*sqrt(abs(cos(u)))/(sin(u) + 7/5) - 2*sin(u) + 2

x = p*cos(u)
y = p*sin(u) + 1.5

x = x*cos(v)
y = y*cos(v)
z = 0.8*sin(v)

 

(3)完美的心形
這是我目前生成的最完美的心形

曲線:

vertices = 360
u = from (-PI) to (PI)

w = abs(u)
p = w*sqrt(w/(1 + w))

x = p*sin(u)
y = (p*cos(u) + 1)*0.9

平面:

vertices = D1:360 D2:100
u = from (-PI) to (PI) D1
v = from 1 to 100 D2

w = abs(u)
p = w*sqrt(w/(v + w))

x = p*sin(u)
y = p*cos(u)*0.9

曲面:

vertices = D1:360 D2:64

u = from (-PI) to (PI) D1
v = from (PI/2) to (-PI/2) D2

w = abs(u)
p = w*sqrt(w/(1 + w))
b = 0.5

x = p*sin(u)*cos(v)
y = (p*cos(u) + 0.9)*0.9*cos(v)
z = b*sin(v)


 如果你覺得這個心形還是像屁股,那你與下面的圖形比較下,就會發現不像了.

 

(4)像屁股的心形

#http://xahlee.info/surface/kuen/kuen.html

vertices = D1:100 D2:100

u = from  (-1.4325*PI) to (1.4325*PI) D1
v = from (-10) to (10) D2

w = (cosh[v]^2 + u^2)

x = 2*cosh[v]*(cos[u] + u*sin[u])
z = 2*cosh[v]*(-u*cos[u] + sin[u])
y =  v - (2*sinh[v]*cosh[v])


x = x/w
y = y/w
z = z/w

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM