今天說說Radial90、Radial180和Radial360這三個模式的實現(xiàn)
實現(xiàn)原理
判斷當(dāng)前點是否顯示是判斷當(dāng)前點和選擇的旋轉(zhuǎn)中心點的向量和初始軸的夾角是否在顯示角度內(nèi)
如圖1:點A和旋轉(zhuǎn)中心點的向量和初始軸的夾角∠A在顯示度數(shù)a范圍內(nèi),所以點A顯示
? ? ? ? ? ? ?點B和旋轉(zhuǎn)中心點的向量和初始軸的夾角∠B不在顯示度數(shù)a范圍內(nèi)若专,所以點B不顯示
那么∠A和∠B怎么計算呢舱污?
圖2中伸但,選擇的旋轉(zhuǎn)中心點(0,0)血筑,旋轉(zhuǎn)軸為X軸,則點(x,y)和x軸的夾角a的計算
角度a=Mathf.Atan2(y,x)*Mathf.Rad2Deg
通過反正切獲得弧度赃绊,再轉(zhuǎn)換為度數(shù)
圖3是(1,1)、(-1,1)羡榴、(-1,-1)碧查、(1,-1)四個點與x軸根據(jù)公式計算出來的角度值
我們需要將計算的角度轉(zhuǎn)換為0°-360°的值,如圖5
if(a<0){a+=360;}
Radial90分別以(0,0)-(1,0)、(0,1)-(0,0)炕矮、(1,1)-(0,1)么夫、(1,1)-(1,0)四個為初始軸
以(0,0)、(0,1)肤视、(1,1)档痪、(1,0)四個旋轉(zhuǎn)中心點進(jìn)行角度判斷
Radial180分別以(0.5,0)-(1,0)、(0,0.5)-(0,0)邢滑、(0.5,1)-(0,1)腐螟、(1,0.5)-(1,0)四個為初始軸
以(0.5,0)、(0,0.5)困后、(0.5,1)乐纸、(1,0.5)四個旋轉(zhuǎn)中心點進(jìn)行角度判斷
Radial360分別以(0.5,0.5)-(0,-1)、(0.5,0.5)-(1,0)摇予、(0.5,0.5)-(0,1)汽绢、(0.5,0.5)-(-1,0)四個為初始軸
以(0.5,0.5)一個旋轉(zhuǎn)中心點進(jìn)行角度判斷
Shader中的具體實現(xiàn)就是以此原理實現(xiàn)的。
最后附上完整Shader文件