非零環(huán)繞數(shù)規(guī)則和奇-偶規(guī)則(Non-Zero Winding Number Rule & Odd-even Rule)

在圖形學(xué)中判斷一個(gè)點(diǎn)是否在多邊形內(nèi)迷雪,若多邊形不是自相交的诈乒,那么可以簡(jiǎn)單的判斷這個(gè)點(diǎn)在多邊形內(nèi)部還是外部;若多邊形是自相交的梧奢,那么就需要根據(jù)非零環(huán)繞數(shù)規(guī)則或者奇-偶規(guī)則判斷。

判斷多邊形是否是自相交的:多邊形在平面內(nèi)除頂點(diǎn)外還有其他公共點(diǎn)

  • 奇-偶規(guī)則(Odd-even Rule):奇數(shù)表示在多邊形內(nèi)钧椰,偶數(shù)表示在多邊形外粹断。

    從該點(diǎn)p任意方向的一條射線,若與該射線相交的多邊形邊的數(shù)目為奇數(shù)嫡霞,則p是多邊形內(nèi)部點(diǎn),否則是外部點(diǎn)希柿。

  • 非零環(huán)繞數(shù)規(guī)則(Nonzero Winding Number Rule):若環(huán)繞數(shù)非零則表示在多邊形內(nèi)诊沪,否則是外部點(diǎn)。

    首先使多邊形的邊變?yōu)槭噶吭贰h(huán)繞數(shù)初始化為零端姚。再?gòu)脑擖c(diǎn)p作任意方向的一條射線。當(dāng)從p點(diǎn)沿射線方向移動(dòng)時(shí)挤悉,對(duì)在每個(gè)方向上穿過射線的邊計(jì)數(shù)渐裸,每當(dāng)多邊形的邊從左到右穿過射線時(shí),環(huán)繞數(shù)加1装悲,從右到左時(shí)昏鹃,環(huán)繞數(shù)減1。處理完多邊形的所有相關(guān)邊之后诀诊,若環(huán)繞數(shù)為非零洞渤,則p為內(nèi)部點(diǎn),否則属瓣,p是外部點(diǎn)载迄。

舉例

  1. 判斷點(diǎn)p是否在多邊形內(nèi)讯柔,從點(diǎn)p向外作任意方向的一條射線,多邊形的邊從左到右經(jīng)過射線時(shí)環(huán)數(shù)減1护昧,多邊形的邊從右往左經(jīng)過射線時(shí)環(huán)數(shù)加1魂迄,最后環(huán)數(shù)不為0,即表示在多邊形內(nèi)部惋耙。


  2. 如下圖所示极祸,左側(cè)表示用奇-偶規(guī)則判斷繞環(huán)數(shù)為2 ,表示在多邊形外怠晴,所以沒有填充遥金。右側(cè)圖用非零繞環(huán)規(guī)則判斷出繞數(shù)為2,非0表示在多邊形內(nèi)部蒜田,所以填充稿械。


  3. 左側(cè)為奇-偶規(guī)則,右側(cè)為非零環(huán)繞數(shù)規(guī)則冲粤,實(shí)心區(qū)域表示在多邊形內(nèi)部美莫,空心區(qū)域表示在多邊形外部。


PS

  • Winding rules
Winding rule Description
NSNonZeroWindingRule Count each left-to-right path as +1 and each right-to-left path as -1. If the sum of all crossings is 0, the point is outside the path. If the sum isnonzero, the point is inside the path and the region containing it is filled. This is the default winding rule.
NSEvenOddWindingRule Count the total number of path crossings. If the number of crossings is even, the point is outside the path. If the number of crossings is odd, the point is inside the path and the region containing it should be filled.

非零環(huán)繞數(shù)規(guī)則和奇-偶規(guī)則(Non-Zero Winding Number Rule&&Odd-even Rule)在iphone中應(yīng)用:
1.CGContextClip 使用非零環(huán)繞數(shù)規(guī)則來判斷當(dāng)前路徑和裁剪路徑的交集梯捕。
2.CGContextEOClip 使用奇-偶環(huán)繞數(shù)規(guī)則來判斷當(dāng)前路徑和裁剪路徑的交集厢呵。

注意下圖中起點(diǎn)到終點(diǎn)的虛線可看作是多邊形的一條邊:

Applying winding rules to a path

UIBezierPath的userEvenOddFillRule 是對(duì)路徑來說的,對(duì)于CAShapeLayer的填充效果是沒有作用的傀顾,CAShapeLayer的填充效果只和自己的自己的fillRule和其內(nèi)部路徑的走向有關(guān)襟铭,其fillRule 有 even-odd 和 non-zero。

參考:
Cocoa Drawing Guide
非零環(huán)繞數(shù)規(guī)則和奇-偶規(guī)則

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末短曾,一起剝皮案震驚了整個(gè)濱河市寒砖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫉拐,老刑警劉巖哩都,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異婉徘,居然都是意外死亡漠嵌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門盖呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儒鹿,“玉大人,你說我怎么就攤上這事塌计⊥ι恚” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵锌仅,是天一觀的道長(zhǎng)章钾。 經(jīng)常有香客問我墙贱,道長(zhǎng),這世上最難降的妖魔是什么贱傀? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任惨撇,我火速辦了婚禮府寒,結(jié)果婚禮上魁衙,老公的妹妹穿的比我還像新娘株搔。我一直安慰自己,他們只是感情好纤房,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布纵隔。 她就那樣靜靜地躺著,像睡著了一般炮姨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舒岸,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音蛾派,去河邊找鬼俄认。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碍脏,可吹牛的內(nèi)容都是我干的梭依。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼钾埂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褥紫,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤瞪慧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弃酌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儡炼,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡查蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妹田。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鬼佣,死狀恐怖霜浴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坷随,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布缸匪,位于F島的核電站类溢,受9級(jí)特大地震影響凌蔬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闯冷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛇耀。 院中可真熱鬧,春花似錦译暂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春灶体,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赃春。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劫乱,地道東北人织中。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓狭吼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刁笙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谦趣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容