本技術(shù)方案涉及一種判斷觸點是否在不規(guī)則多邊形內(nèi)部的方法。
背景技術(shù):
為了能在移動設(shè)備中以傳統(tǒng)讀報的習(xí)慣閱讀報紙,需要將一塊圖片區(qū)域?qū)?yīng)到具體的報道內(nèi)容,因此就產(chǎn)生了如何識別用戶點擊的圖片區(qū)域的問題。目前常規(guī)的處理辦法存在如下缺陷:首先是將圖片區(qū)域通過標(biāo)準(zhǔn)的4點劃分為多個標(biāo)準(zhǔn)的矩形,若頁面排版不是規(guī)矩的矩形,那么對圖片的劃分就與實際不相符,會導(dǎo)致用戶點擊文章A的區(qū)域打開文章B的情況。其次是實現(xiàn)了對不規(guī)則區(qū)域的標(biāo)記,但是會出現(xiàn)用戶點擊某個位置時激活兩個區(qū)域,不能準(zhǔn)確識別用戶的意圖。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種判斷觸點是否在不規(guī)則多邊形內(nèi)部的方法,運用此方法能將圖片區(qū)域劃分成多個不規(guī)則的形狀,并可有效的識別用戶的點擊區(qū)域。
實現(xiàn)本發(fā)明目的的技術(shù)方案是:一種判斷觸點是否在不規(guī)則多邊形內(nèi)部的方法,其特征在于:包括以下步驟:
1.1.將不規(guī)則多邊形的所有坐標(biāo)點集合作為一個數(shù)組輸入進(jìn)行計算;
1.2.將觸點坐標(biāo)作為一個數(shù)組輸入進(jìn)行計算;
1.3.判斷點(a,b)與點(c,d)連線,是否與點(0,y)與觸點坐標(biāo)(x,y)連線有交點,并返回布爾值供后續(xù)計算;
1.4.將觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù),如果步驟1.3中返回的布爾值為真,則將x軸焦點數(shù)計數(shù)+1;
1.5.判斷點(a,b)與點(c,d)連線,是否與點(x,0)與觸點坐標(biāo)(x,y)連線有交點,并返回布爾值供后續(xù)計算;
1.6.將觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù),如果步驟1.5中返回的布爾值為真,則將y軸焦點數(shù)計數(shù)+1;
1.7.判斷是否還有未計算的點,將步驟1.1中輸入的坐標(biāo)集和數(shù)組減去步驟1.3與步驟1.4中已經(jīng)計算了的坐標(biāo)點,若得出的值大于0則還有未計算的點;
1.8.若還有未參與計算的點,則將步驟1.3中后2個數(shù)與步驟1.7中剩余的點取前2個數(shù),替換為abcd,代入步驟1.3至1.7中循環(huán);
1.9.若全部點都參與了計算,則將最后2個點(i,j)與點(a,b)替換為abcd代入步驟1.3至1.6中計算;
1.10.判斷x軸焦點數(shù)與y軸焦點數(shù)是否都是奇數(shù):判斷步驟1.4和步驟1.6的計數(shù)值是否都為奇數(shù),并輸出布爾值;
1.11.若步驟1.10輸出的布爾值為真,則得到結(jié)論觸點在多邊形內(nèi)部,反之則得到結(jié)論觸點在多邊形外部。
本發(fā)明的優(yōu)點在于:1.能將圖片區(qū)域劃分成多個不規(guī)則的形狀,并可有效的識別用戶的點擊區(qū)域。2.點擊的位置歸屬識別準(zhǔn)確。技術(shù)實現(xiàn)未依賴第三方工具,完全基于最基本的數(shù)學(xué)定理計算。3.語法簡單。因為僅使用了大于、小于的比較及短路與和短路或計算,能夠方便快速到移植到各計算機語言平臺。
附圖說明
圖1是本發(fā)明的邏輯流程圖;
圖2是實施例一的附圖;
圖3是實施例二的附圖。
具體實施方式
本發(fā)明涉及一種判斷觸點是否在不規(guī)則多邊形內(nèi)部的方法,其特征在于:包括以下步驟:
1.1.將不規(guī)則多邊形的所有坐標(biāo)點集合作為一個數(shù)組輸入進(jìn)行計算;
1.2.將觸點坐標(biāo)作為一個數(shù)組輸入進(jìn)行計算;
1.3.判斷點(a,b)與點(c,d)連線,是否與點(0,y)與觸點坐標(biāo)(x,y)連線有交點,并返回布爾值供后續(xù)計算;
1.4.將觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù),如果步驟1.3中返回的布爾值為真,則將x軸焦點數(shù)計數(shù)+1;
1.5.判斷點(a,b)與點(c,d)連線,是否與點(x,0)與觸點坐標(biāo)(x,y)連線有交點,并返回布爾值供后續(xù)計算;
1.6.將觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù),如果步驟1.5中返回的布爾值為真,則將y軸焦點數(shù)計數(shù)+1;
1.7.判斷是否還有未計算的點,將步驟1.1中輸入的坐標(biāo)集和數(shù)組減去步驟1.3與步驟1.4中已經(jīng)計算了的坐標(biāo)點,若得出的值大于0則還有未計算的點;
1.8.若還有未參與計算的點,則將步驟1.3中后2個數(shù)與步驟1.7中剩余的點取前2個數(shù),替換為abcd,代入步驟1.3至1.7中循環(huán);
1.9.若全部點都參與了計算,則將最后2個點(i,j)與點(a,b)替換為abcd代入步驟1.3至1.6中計算;
1.10.判斷x軸焦點數(shù)與y軸焦點數(shù)是否都是奇數(shù):判斷步驟1.4和步驟1.6的計數(shù)值是否都為奇數(shù),并輸出布爾值;
1.11.若步驟1.10輸出的布爾值為真,則得到結(jié)論觸點在多邊形內(nèi)部,反之則得到結(jié)論觸點在多邊形外部。
實施例一、
A、如圖2,輸入不規(guī)則多邊形順時針坐標(biāo)集合(1,5,3,5,3,3,4,3,4,1,1,1)
B、輸入觸點的坐標(biāo):(2,2);
C、判斷點(1,5)與點(3,5)的連線,是否與點(0,2)與觸點坐標(biāo)(2,2)連線有交點,(1>2&&2>3&&2>5&&2>5)||(1<2&&2<3&&2>5&&2>5)=false ,故無交點。
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、點(1,5)與點(3,5)連線,是否與點(2,0)與觸點坐標(biāo)(2,2)連線有交點,(5>2&&2>5&&2>1&&2>3)||(5<2&&2<5&&2>1&&2>3)=false ,故無交點
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算4個點,還有8個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(3,5,3,3),代入步驟C、D、E、F中循環(huán)
C、(3>2&&2>3&&2>5&&2>3)||(3<2&&2<3&&2>5&&2>3)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(5>2&&2>3&&2>3&&2>3)||(5<2&&2<3&&2>3&&2>3)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算6個點,還有6個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(3,3,4,3),代入步驟C、D、E、F中循環(huán):
C、(3>2&&2>4&&2>3&&2>3)||(3<2&&2<4&&2>3&&2>3)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(3>2&&2>3&&2>3&&2>4)||(3<2&&2<3&&2>3&&2>4)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0
G、是否還有未計算的點:一共12個點,已計算8個點,還有4個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(4,3,4,1),代入步驟C、D、E、F中循環(huán)
C、(4>2&&2>4&&2>3&&2>1)||(4<2&&2<4&&2>3&&2>1)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(3>2&&2>1&&2>4&&2>4)||(3<2&&2<1&&2>4&&2>4)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算10個點,還有2個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(4,1,1,1),代入步驟C、D、E、F中循環(huán)
C、(4>2&&2>1&&2>1&&2>1)||(4<2&&2<1&&2>1&&2>1)=true
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):1;
E、(1>2&&2>1&&2>4&&2>1)||(1<2&&2<1&&2>4&&2>1)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
I、最后2個點(1,1)與起始點(1,5)的連線是否被計算:在步驟G中循環(huán)剩余2個點或0個點是否與第一個坐標(biāo)進(jìn)行步驟C、D、E、F的計算;
J、將最后2個點(1,1)與點(1,5)替換為abcd進(jìn)入計算:步驟A中最后的2個點與為首的2個點,一起代入步驟C、D、E、F中循環(huán)
C、(1>2&&2>1&&2>1&&2>5)||(1<2&&2<1&&2>1&&2>5)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):1;
E、(1>2&&2>5&&2>1&&2>1)||(1<2&&2<5&&2>1&&2>1)=true
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):1;
K、判斷x軸焦點數(shù)與y軸焦點數(shù)是否都是奇數(shù):判斷步驟D計數(shù)值為1和步驟F的計數(shù)值為1,都為奇數(shù),并輸出布爾值true;
L、得出結(jié)論觸點在多邊形內(nèi)部:K輸出的布爾值為真,則得到結(jié)論觸點在多邊形內(nèi)部;
實施例二、
A、如圖3,輸入不規(guī)則多邊形順時針坐標(biāo)集合(1,5,3,5,3,3,4,3,4,1,1,1)
B、輸入觸點的坐標(biāo):(4,5);
C、判斷點(1,5)與點(3,5)的連線,是否與點(0,5)與觸點坐標(biāo)(4,5)連線有交點,(1>4&&4>3&&5>5&&5>5)||(1<4&&4<3&&5>5&&5>5)=false ,故無交點。
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、點(1,5)與點(3,5)連線,是否與點(4,0)與觸點坐標(biāo)(4,5)連線有交點,(5>5&&5>5&&4>1&&4>3)||(5<5&&5<5&&4>1&&4>3)= false,故無交點
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算4個點,還有8個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(3,5,3,3),代入步驟C、D、E、F中循環(huán)
C、(3>4&&4>3&&5>5&&5>3)||(3<4&&4<3&&5>5&&5>3)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(5>5&&5>3&&4>3&&4>3)||(5<5&&5<3&&4>3&&4>3)= false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算6個點,還有6個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(3,3,4,3),代入步驟C、D、E、F中循環(huán):
C、(3>4&&4>4&&5>3&&5>3)||(3<4&&4<4&&5>3&&5>3)= false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(3>5&&5>3&&4>3&&4>4)||(3<5&&5<3&&4>3&&4>4)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算8個點,還有4個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(4,3,4,1),代入步驟C、D、E、F中循環(huán)
C、(4>4&&4>4&&5>3&&5>1)||(4<4&&4<4&&5>3&&5>1)= false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(3>5&&5>1&&4>4&&4>4)||(3<5&&5<1&&4>4&&4>4)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
G、是否還有未計算的點:一共12個點,已計算10個點,還有2個點未計算。
H、將未計算的2個數(shù)與上一步驟中后2個數(shù)替換為abcd進(jìn)入循環(huán):步驟C中后2個數(shù)與步驟G中剩余的點取前2個數(shù)(4,1,1,1),代入步驟C、D、E、F中循環(huán)
C、(4>4&&4>1&&5>1&&5>1)||(4<4&&4<1&&5>1&&5>1)= false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(1>5&&5>1&&4>4&&4>1)||(1<5&&5<1&&4>4&&4>1)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
I、最后2個點(1,1)與起始點(1,5)的連線是否被計算:在步驟G中循環(huán)剩余2個點或0個點是否與第一個坐標(biāo)進(jìn)行步驟C、D、E、F的計算;
J、將最后2個點(1,1)與點(1,5)替換為abcd進(jìn)入計算:步驟A中最后的2個點與為首的2個點,一起代入步驟C、D、E、F中循環(huán)
C、(1>4&&4>1&&5>1&&5>5)||(1<4&&4<1&&5>1&&5>5)=false
D、觸點的x軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
E、(1>5&&5>5&&4>1&&4>1)||(1<5&&5<5&&4>1&&4>1)=false
F、觸點的y軸的平行線與每一條邊的焦點數(shù)計數(shù):0;
K、判斷x軸焦點數(shù)與y軸焦點數(shù)是否都是奇數(shù):判斷步驟D計數(shù)值為0和步驟F的計數(shù)值為0,都不是奇數(shù),并輸出布爾值flase;
L、得出結(jié)論觸點在多邊形外部:E輸出的布爾值為假,則得到結(jié)論觸點在多邊形外部。