【Minecraft】worldedit|generate 正多邊形及正多邊形尖頂的設計思路
成品:八角尖頂


一
做這種涉及正多邊形的形狀問題,我們首先要找到一個能畫出正多邊形的通式或辦法,目前我能想到的和找到的有兩種辦法:
1、一種是能夠畫出邊是絕對平直的正多邊形,這是在知乎上找到的
zhuanlan.zhihu.com/p/522197221

調節(jié)n的大小就會呈現n正多邊形
但如果直接帶入到MC中,會出現x負半軸不正確的問題,另一半正常,如圖

這是因為atan2(x,z)的范圍是-pi~pi,因為后面有取余的操作,所以會出現錯誤,這里只需要把它+pi,讓它取值范圍變成0~2*pi,即把atan2(x,z)換成(atan2(x,z)+pi),重新帶入原式子,如圖

2、另一種辦法就是之前講過的,用一個圓加上一圈的sin()(或cos()),細調兩者的系數,盡力達到所想要的效果
如果你是想要有圓角的效果,可直接用sin(),如圖

游戲中調節(jié)atan(x,z)前的系數可獲得對應的多邊形形狀,同時也要適當調節(jié)sin前的系數和圓原始半徑大小,如圖圓角三角形

題外話,如果把系數調得大一點呢?就會有放射狀花瓣的效果,依個人需求進行調節(jié)

如果你想要的是比較接近于正多邊形、不是圓角的效果,那就把sin()取絕對值,用圓去減去abs(sin()),如圖

我調的這個邊有點向內縮,到時候做尖頂的時候可能會有別樣的效果,甚至可以做傘了
如果繼續(xù)調大或調成負數呢?看圖吧


可以自己試一試調一調,我是不可能展示完全的
最后調整下系數,得到我們想要的結果

看吧,和第一種做的差別也不是很大,所以我比較推薦這種方法,但還是要看具體情況

二
我們進入第二步,以八角為例,經過第一步我們可以得到

不知道你發(fā)現沒有,我們還不能控制這個多邊形大小或者說半徑的大小,觀察以上的表達式,把左邊的sqrt(x^2+z^2)和右邊的那一大串放在一邊會怎么樣,讓右邊的除過去,留下一個1,這個1是不是就是我們想要的半徑r?
n=8;sqrt(x^2+z^2)/cos(pi/n)*cos(pi/n-((atan2(x,z)+pi)%(2*pi/n)))<r
我們暫且稱左邊的為 多邊形距離公式 ,sqrt(x^2+z^2)/cos(pi/n)*cos(pi/n-((atan2(x,z)+pi)%(2*pi/n))),同理另一個做多邊形的方法也是
sqrt(x^2+z^2)/(0.5+0.05*sin(3*atan2(x,z)))<r
這步我們要解決的問題就是怎么讓它從下到上收縮為一點,我們只需要控制r的大小即可,讓它與y相關,如下圖的函數曲線,x作為r,y作為y



//generate 35 -h r=1-(y+1)^2/4;n=8;sqrt(x^2+z^2)/cos(pi/n)*cos(pi/n-((atan2(x,z)+pi)%(2*pi/n)))<r
我們再試下上述的另一種做多邊形的方法



//generate 35 -h r=sqrt((1-y)/2);sqrt(x^2+z^2)/(0.8+0.05*abs(sin(10*atan2(x,z))))<r
也不知道像啥,裙子?
再試試有棱的


//generate 35 -h r=1-(y+1)^2/4;sqrt(x^2+z^2)/(0.8-0.1*abs(sin(5*atan2(x,z))))<r
以此為底,如果再旋轉一下?


最關鍵的是這個距離公式
n=8;sqrt(x^2+z^2)/cos(pi/n)*cos(pi/n-((atan2(x,z)+pi)%(2*pi/n)))

有什么問題或還想看什么效果可以留言
于23.8.10重制