理解SVG的fill-rule屬性

w3c標(biāo)準(zhǔn)圖示:
evenodd


fillrule-evenodd.png

nonzero;


fillrule-nonzero.png

要判斷一個(gè)點(diǎn)是否在圖形內(nèi),需要從該點(diǎn)作任意方向的一條射線,然后檢測(cè)射線與圖形路徑的交點(diǎn)值,假設(shè)為x,x初始值為0。

對(duì)于evenodd,每相交一次,x+1,最后的結(jié)果如果x為奇數(shù)則該點(diǎn)在圖形內(nèi),如果為偶數(shù)則在圖形外。

對(duì)于nonzero,情況則復(fù)雜一些,每相交一次,x的值也會(huì)變化,不過這個(gè)變化和你的射線同路徑相交的方向有關(guān)。要知道路徑本身是一個(gè)向量(也就是有方向的線段),你畫的射線也有方向,則射線同路徑相交的方向一定會(huì)有兩種方向,從路徑左側(cè)相交和右側(cè)相交。你可以任意假設(shè)一個(gè)方向?yàn)檎?,那么另一個(gè)相交方向?yàn)樨?fù),比如我假設(shè)左相交為正,那么右相交則為負(fù)。此時(shí),計(jì)算x的方法是,正相交+1,負(fù)相交-1,看最后x的值,如果為0,則該點(diǎn)在圖形外,如果不為0則在圖形內(nèi)。

最后,不要去鉆相切的牛角尖,因?yàn)樯渚€是任意的,如果有相切,那么換個(gè)方向再畫。

這是用我自己的方式理解的fill-rule屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 18- UIBezierPath官方API中文翻譯(待校對(duì)) ----------------- 華麗的分割線 -...
    醉臥欄桿聽雨聲閱讀 1,171評(píng)論 1 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • UIBezierPath Class Reference 譯:UIBezierPath類封裝了Core Graph...
    鋼鉄俠閱讀 1,950評(píng)論 0 3
  • 今天中午,老婆陪著三歲多的女兒在網(wǎng)上挑選鞋子,小小年紀(jì),相當(dāng)挑剔,鞋子一定要是紫色的,必須是小兔子鞋,而且小兔子要...
    c5de959d631b閱讀 2,054評(píng)論 18 21
  • 中學(xué)的時(shí)候,我們班上有一個(gè)傻姑娘。 她是傳說中的的三無少女,無美貌,無身材,無胸部,關(guān)鍵的是,成績(jī)還是中下的,平時(shí)...
    不看日漫中閱讀 268評(píng)論 0 0

友情鏈接更多精彩內(nèi)容