成品
//generate 35 a=atan2(x,z)*2;x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);data=(X<0)?(Y>0?1:2):(Y<0?3:4);(abs(X)-0.1)^2+(abs(Y)-0.1)^2<0.1^2
//generate 35 a=atan2(x,z)/2;x1=sqrt(x^2+(z)^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);(X)^2+15*Y^2<0.2^2先講下主要的設計思路,我們以成品的第二個圖為例,把表達式拆開一步步分析

先做一個橢圓柱
//generate 35 x^2+15*y^2<0.2^2
接著我們暫時讓這個橢圓柱以z的值旋轉(zhuǎn):
//generate 35 a=(1+z)*pi/2;X=x*cos(a)-y*sin(a);Y=x*sin(a)+y*cos(a);X^2+15*Y^2<0.2^2實現(xiàn)的方式就是
a=(1+z)*pi/2;
X=x*cos(a)-y*sin(a);Y=x*sin(a)+y*cos(a);
把x替換成X,y替換成Y,學過仿射變換的應該知道,這個來源于
https://ww2.mathworks.cn/help/releases/R2021a/images/matrix-representation-of-geometric-transformations.html這個直接記住就行了,xy平面內(nèi)旋轉(zhuǎn)就把x和y替換掉

接著如果我們把仿射變換里的原x再提前做個變換
x1=x-0.7;a=(1+z)*pi/2;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);
你會發(fā)現(xiàn),整體向x軸正向移動,這為我們把這個形狀做成環(huán)狀做了準備
//generate 35 a=(1+z)*pi/2;x1=x-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);X^2+15*Y^2<0.2^2
//generate 35 a=atan2(x,z)/2;x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);X^2+15*Y^2<0.2^2我們把?x1=x-0.7; 改成?x1=sqrt(x^2+z^2)-0.7;這里我可能也說不清楚,大概就是讓本來只與x相關(guān)改成與x,z同時相關(guān)的(也就是把本來?x軸上的點距離原點大小?改成?平面上的點與原點的距離大?。?,這一步就可以讓這個形狀形成半徑為0.7的環(huán)狀
下一步,角度a不能再是與z的值相關(guān)的了,該改成atan2(x,z)/2,范圍:-pi/2~pi/2 總長:pi
意思就是旋轉(zhuǎn)的角度為其當前的極角相關(guān),一圈總共旋轉(zhuǎn)了pi,剛好接上
當然這個值可以變,改成2*atan2(x,z)就是一圈轉(zhuǎn)了4pi,也就是兩圈

好,依照上面的思路,如果我們在第一步時使用的不是一個橢圓柱,而是四個圓柱相貼合

//generate 35 (abs(x)-0.1)^2+(abs(y)-0.1)^2<0.1^2然后,后面的操作同理,我們想讓這個環(huán)多轉(zhuǎn)點,那就a=atan2(x,z)*2
//generate 35 a=atan2(x,z);x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);(abs(X)-0.1)^2+(abs(Y)-0.1)^2<0.1^2;接下來是上色部分,我們只需要分開這四個圓柱就行了,data=(X<0)?(Y>0?1:2):(Y<0?3:4);
這里用了嵌套,應該不用多說
//generate 35 a=atan2(x,z)*2;x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);data=(X<0)?(Y>0?1:2):(Y<0?3:4);(abs(X)-0.1)^2+(abs(Y)-0.1)^2<0.1^2;同理,當這個是個矩形呢?
//generate 35 a=atan2(x,z)/2;x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);X^10+Y^10<0.001^2;總結(jié)下,本專欄的精華內(nèi)容就是:
a=atan2(x,z)/2;x1=sqrt(x^2+z^2)-0.7;X=x1*cos(a)-y*sin(a);Y=x1*sin(a)+y*cos(a);
后面接一個在x,y平面內(nèi)的圖形的表達式,把表達式內(nèi)的x,y分別替換成X,Y

有什么問題或者想看什么其他效果可以留言
標簽: