一种判断触点是否在不规则多边形内部的方法与流程

文档序号:12663635阅读:568来源:国知局
一种判断触点是否在不规则多边形内部的方法与流程

本技术方案涉及一种判断触点是否在不规则多边形内部的方法。



背景技术:

为了能在移动设备中以传统读报的习惯阅读报纸,需要将一块图片区域对应到具体的报道内容,因此就产生了如何识别用户点击的图片区域的问题。目前常规的处理办法存在如下缺陷:首先是将图片区域通过标准的4点划分为多个标准的矩形,若页面排版不是规矩的矩形,那么对图片的划分就与实际不相符,会导致用户点击文章A的区域打开文章B的情况。其次是实现了对不规则区域的标记,但是会出现用户点击某个位置时激活两个区域,不能准确识别用户的意图。



技术实现要素:

本发明的目的在于提供一种判断触点是否在不规则多边形内部的方法,运用此方法能将图片区域划分成多个不规则的形状,并可有效的识别用户的点击区域。

实现本发明目的的技术方案是:一种判断触点是否在不规则多边形内部的方法,其特征在于:包括以下步骤:

1.1.将不规则多边形的所有坐标点集合作为一个数组输入进行计算;

1.2.将触点坐标作为一个数组输入进行计算;

1.3.判断点(a,b)与点(c,d)连线,是否与点(0,y)与触点坐标(x,y)连线有交点,并返回布尔值供后续计算;

1.4.将触点的x轴的平行线与每一条边的焦点数计数,如果步骤1.3中返回的布尔值为真,则将x轴焦点数计数+1;

1.5.判断点(a,b)与点(c,d)连线,是否与点(x,0)与触点坐标(x,y)连线有交点,并返回布尔值供后续计算;

1.6.将触点的y轴的平行线与每一条边的焦点数计数,如果步骤1.5中返回的布尔值为真,则将y轴焦点数计数+1;

1.7.判断是否还有未计算的点,将步骤1.1中输入的坐标集和数组减去步骤1.3与步骤1.4中已经计算了的坐标点,若得出的值大于0则还有未计算的点;

1.8.若还有未参与计算的点,则将步骤1.3中后2个数与步骤1.7中剩余的点取前2个数,替换为abcd,代入步骤1.3至1.7中循环;

1.9.若全部点都参与了计算,则将最后2个点(i,j)与点(a,b)替换为abcd代入步骤1.3至1.6中计算;

1.10.判断x轴焦点数与y轴焦点数是否都是奇数:判断步骤1.4和步骤1.6的计数值是否都为奇数,并输出布尔值;

1.11.若步骤1.10输出的布尔值为真,则得到结论触点在多边形内部,反之则得到结论触点在多边形外部。

本发明的优点在于:1.能将图片区域划分成多个不规则的形状,并可有效的识别用户的点击区域。2.点击的位置归属识别准确。技术实现未依赖第三方工具,完全基于最基本的数学定理计算。3.语法简单。因为仅使用了大于、小于的比较及短路与和短路或计算,能够方便快速到移植到各计算机语言平台。

附图说明

图1是本发明的逻辑流程图;

图2是实施例一的附图;

图3是实施例二的附图。

具体实施方式

本发明涉及一种判断触点是否在不规则多边形内部的方法,其特征在于:包括以下步骤:

1.1.将不规则多边形的所有坐标点集合作为一个数组输入进行计算;

1.2.将触点坐标作为一个数组输入进行计算;

1.3.判断点(a,b)与点(c,d)连线,是否与点(0,y)与触点坐标(x,y)连线有交点,并返回布尔值供后续计算;

1.4.将触点的x轴的平行线与每一条边的焦点数计数,如果步骤1.3中返回的布尔值为真,则将x轴焦点数计数+1;

1.5.判断点(a,b)与点(c,d)连线,是否与点(x,0)与触点坐标(x,y)连线有交点,并返回布尔值供后续计算;

1.6.将触点的y轴的平行线与每一条边的焦点数计数,如果步骤1.5中返回的布尔值为真,则将y轴焦点数计数+1;

1.7.判断是否还有未计算的点,将步骤1.1中输入的坐标集和数组减去步骤1.3与步骤1.4中已经计算了的坐标点,若得出的值大于0则还有未计算的点;

1.8.若还有未参与计算的点,则将步骤1.3中后2个数与步骤1.7中剩余的点取前2个数,替换为abcd,代入步骤1.3至1.7中循环;

1.9.若全部点都参与了计算,则将最后2个点(i,j)与点(a,b)替换为abcd代入步骤1.3至1.6中计算;

1.10.判断x轴焦点数与y轴焦点数是否都是奇数:判断步骤1.4和步骤1.6的计数值是否都为奇数,并输出布尔值;

1.11.若步骤1.10输出的布尔值为真,则得到结论触点在多边形内部,反之则得到结论触点在多边形外部。

实施例一、

A、如图2,输入不规则多边形顺时针坐标集合(1,5,3,5,3,3,4,3,4,1,1,1)

B、输入触点的坐标:(2,2);

C、判断点(1,5)与点(3,5)的连线,是否与点(0,2)与触点坐标(2,2)连线有交点,(1>2&&2>3&&2>5&&2>5)||(1<2&&2<3&&2>5&&2>5)=false ,故无交点。

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、点(1,5)与点(3,5)连线,是否与点(2,0)与触点坐标(2,2)连线有交点,(5>2&&2>5&&2>1&&2>3)||(5<2&&2<5&&2>1&&2>3)=false ,故无交点

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算4个点,还有8个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(3,5,3,3),代入步骤C、D、E、F中循环

C、(3>2&&2>3&&2>5&&2>3)||(3<2&&2<3&&2>5&&2>3)=false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(5>2&&2>3&&2>3&&2>3)||(5<2&&2<3&&2>3&&2>3)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算6个点,还有6个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(3,3,4,3),代入步骤C、D、E、F中循环:

C、(3>2&&2>4&&2>3&&2>3)||(3<2&&2<4&&2>3&&2>3)=false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(3>2&&2>3&&2>3&&2>4)||(3<2&&2<3&&2>3&&2>4)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0

G、是否还有未计算的点:一共12个点,已计算8个点,还有4个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(4,3,4,1),代入步骤C、D、E、F中循环

C、(4>2&&2>4&&2>3&&2>1)||(4<2&&2<4&&2>3&&2>1)=false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(3>2&&2>1&&2>4&&2>4)||(3<2&&2<1&&2>4&&2>4)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算10个点,还有2个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(4,1,1,1),代入步骤C、D、E、F中循环

C、(4>2&&2>1&&2>1&&2>1)||(4<2&&2<1&&2>1&&2>1)=true

D、触点的x轴的平行线与每一条边的焦点数计数:1;

E、(1>2&&2>1&&2>4&&2>1)||(1<2&&2<1&&2>4&&2>1)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

I、最后2个点(1,1)与起始点(1,5)的连线是否被计算:在步骤G中循环剩余2个点或0个点是否与第一个坐标进行步骤C、D、E、F的计算;

J、将最后2个点(1,1)与点(1,5)替换为abcd进入计算:步骤A中最后的2个点与为首的2个点,一起代入步骤C、D、E、F中循环

C、(1>2&&2>1&&2>1&&2>5)||(1<2&&2<1&&2>1&&2>5)=false

D、触点的x轴的平行线与每一条边的焦点数计数:1;

E、(1>2&&2>5&&2>1&&2>1)||(1<2&&2<5&&2>1&&2>1)=true

F、触点的y轴的平行线与每一条边的焦点数计数:1;

K、判断x轴焦点数与y轴焦点数是否都是奇数:判断步骤D计数值为1和步骤F的计数值为1,都为奇数,并输出布尔值true;

L、得出结论触点在多边形内部:K输出的布尔值为真,则得到结论触点在多边形内部;

实施例二、

A、如图3,输入不规则多边形顺时针坐标集合(1,5,3,5,3,3,4,3,4,1,1,1)

B、输入触点的坐标:(4,5);

C、判断点(1,5)与点(3,5)的连线,是否与点(0,5)与触点坐标(4,5)连线有交点,(1>4&&4>3&&5>5&&5>5)||(1<4&&4<3&&5>5&&5>5)=false ,故无交点。

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、点(1,5)与点(3,5)连线,是否与点(4,0)与触点坐标(4,5)连线有交点,(5>5&&5>5&&4>1&&4>3)||(5<5&&5<5&&4>1&&4>3)= false,故无交点

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算4个点,还有8个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(3,5,3,3),代入步骤C、D、E、F中循环

C、(3>4&&4>3&&5>5&&5>3)||(3<4&&4<3&&5>5&&5>3)=false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(5>5&&5>3&&4>3&&4>3)||(5<5&&5<3&&4>3&&4>3)= false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算6个点,还有6个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(3,3,4,3),代入步骤C、D、E、F中循环:

C、(3>4&&4>4&&5>3&&5>3)||(3<4&&4<4&&5>3&&5>3)= false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(3>5&&5>3&&4>3&&4>4)||(3<5&&5<3&&4>3&&4>4)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算8个点,还有4个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(4,3,4,1),代入步骤C、D、E、F中循环

C、(4>4&&4>4&&5>3&&5>1)||(4<4&&4<4&&5>3&&5>1)= false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(3>5&&5>1&&4>4&&4>4)||(3<5&&5<1&&4>4&&4>4)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

G、是否还有未计算的点:一共12个点,已计算10个点,还有2个点未计算。

H、将未计算的2个数与上一步骤中后2个数替换为abcd进入循环:步骤C中后2个数与步骤G中剩余的点取前2个数(4,1,1,1),代入步骤C、D、E、F中循环

C、(4>4&&4>1&&5>1&&5>1)||(4<4&&4<1&&5>1&&5>1)= false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(1>5&&5>1&&4>4&&4>1)||(1<5&&5<1&&4>4&&4>1)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

I、最后2个点(1,1)与起始点(1,5)的连线是否被计算:在步骤G中循环剩余2个点或0个点是否与第一个坐标进行步骤C、D、E、F的计算;

J、将最后2个点(1,1)与点(1,5)替换为abcd进入计算:步骤A中最后的2个点与为首的2个点,一起代入步骤C、D、E、F中循环

C、(1>4&&4>1&&5>1&&5>5)||(1<4&&4<1&&5>1&&5>5)=false

D、触点的x轴的平行线与每一条边的焦点数计数:0;

E、(1>5&&5>5&&4>1&&4>1)||(1<5&&5<5&&4>1&&4>1)=false

F、触点的y轴的平行线与每一条边的焦点数计数:0;

K、判断x轴焦点数与y轴焦点数是否都是奇数:判断步骤D计数值为0和步骤F的计数值为0,都不是奇数,并输出布尔值flase;

L、得出结论触点在多边形外部:E输出的布尔值为假,则得到结论触点在多边形外部。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1