一种多点同时绘制的匹配方法与流程

文档序号:17185274发布日期:2019-03-22 21:17阅读:254来源:国知局
一种多点同时绘制的匹配方法与流程

本发明涉及计算机图形处理技术领域,特别涉及一种多点同时绘制的匹配方法。



背景技术:

线程是操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是运行中的程序的调度单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。而绘制线程的功能是在内存中逐渐绘制真实世界图像的三维坐标。

目前,基于坐标点对绘制图形、文字等方法一般包括两种:

一是:利用触摸屏接口实现多点绘制。其主要是调用触摸屏上的接口,获取触摸屏上的触摸点坐标来进行绘制。简单方便但不利于接入自己的应用,而且多点同时绘制时间长会出现严重的延迟,绘制时点与点之间太近的这种情况无法正常绘制出来。

二是:利用获取的坐标值对调用绘制函数绘制。主要是开启多个线程,持续不断的获取坐标,根据获取的坐标再单独进行后续的绘制操作。其绘制的效率低,易出现卡顿延迟等情况。而且同时开启多个线程造成资源浪费、内存占用量大,利用本发明的内容可以根据获取的坐标轻松接入绘制、书写等软件开发,可用于美术、图形、文字等教学领域。



技术实现要素:

本发明的目的在于提供一种多点同时绘制的匹配方法,以提高绘制效率,节约资源。

为实现以上目的,本发明采用一种多点同时绘制的匹配方法,包括:

获取坐标点对和坐标点对数newpointcount,并计算当前获取的坐标点对数newpointcount与上一次获取的坐标点对数oldpointcount的差值;

控制开启或关闭与所述差值的绝对值相同数量的线程,以进行线程与当前获取的坐标点对的匹配。

进一步地,所述控制开启或关闭与所述差值的绝对值相同数量的线程,以进行线程与当前获取的坐标点对的匹配,包括:

在所述当前获取的坐标点对数newpointcount与上一次获取的坐标点对数oldpointcount相同时,直接进行线程与坐标点对的匹配;

在所述当前获取的坐标点对数newpointcount大于上一次获取的坐标点对数oldpointcount时,开启(newpointcount-oldpointcount)个线程并进行线程与坐标点对的匹配;

在所述当前获取的坐标点对数newpointcount小于上一次获取的坐标点对数oldpointcount时,关闭(oldpointcount-newpointcount)个线程并进行线程与坐标点对的匹配。

进一步地,所述在当前获取的坐标点对数newpointcount与上一次获取的坐标点对数oldpointcount相同时,直接进行线程与坐标点对的匹配,包括:

将所述当前获取的坐标点对依次分配到正在运行的第一个线程startthreadnum[i];

计算每个坐标点对与第一个线程最后一次绘制的坐标点之间的距离,并具有最小距离值的坐标点对的坐标(x,y)确定为合理值存储在坐标数组的第一个位置;

遍历所有线程,使得所有线程与坐标数组一一对应,然后直接进行匹配。

进一步地,所述计算每个坐标点对与第一个线程最后一次绘制的坐标点之间的距离,并具有最小距离值的坐标点对的坐标(x,y)确定为合理值存储在坐标数组的第一个位置,还包括:

判断该最小距离值是否超过200个像素;

若是,则关闭当前的绘制线程,同时开启一个新的绘制线程开始重新绘制;

若否,则将具有最小距离值的坐标点对的坐标(x,y)确定为合理值。

进一步地,所述在当前获取的坐标点对数newpointcount大于上一次获取的坐标点对数oldpointcount时,开启(newpointcount-oldpointcount)个线程并进行线程与坐标点对的匹配,包括:

将上一次获取的坐标点对数所对应的线程与当前获取的坐标点对直接进行匹配,并剩余(newpointcount-oldpointcount)个坐标点对;

控制开启(newpointcount-oldpointcount)个线程,并将(newpointcount-oldpointcount)个线程与(newpointcount-oldpointcount)个坐标点对进行匹配。

进一步地,所述在当前获取的坐标点对数newpointcount小于上一次获取的坐标点对数oldpointcount时,关闭(oldpointcount-newpointcount)个线程并进行线程与坐标点对的匹配,包括:

将上一次获取的坐标点对数所对应的线程与当前获取的坐标点对直接进行匹配,并剩余(oldpointcount-newpointcount)个线程;

将剩余的(oldpointcount-newpointcount)个线程关闭或者加入到缓冲队列。

进一步地,采用轮训的方式开启所述(newpointcount-oldpointcount)个线程,还包括:

设置变量currtthread代表当前所轮训到的线程,下一次直接从currtthread之后的线程开始查找并开启;

将开启的线程对应的线程号存储在startthreadnum数组用户中。

进一步地,还包括:

在接收到线程关闭信号时,将当前需要关闭的线程加入缓冲队列delayclosingthread中;

在设定的缓冲时间内,判断是否接受到复活信号;

若是,则将当前需要关闭的线程移出缓冲队列继续执行绘制任务;

如否,则将当前需要关闭的线程从缓冲队列移出后关闭并将该线程的状态改为false。

进一步地,所述复活信号为:

若存在坐标点对与该需要关闭的线程最后一次绘制的坐标点之间距离较该坐标点对与缓冲队列的其它线程最后一次绘制的坐标点之间距离都小,则将该坐标点对作为所述复活信号。

进一步地,还包括:

在所述缓冲队列有正在等待复活的线程时,判断当前需要开启的新线程数是否大于缓冲队列中等待复活的线程个数;

若是,则将所述缓冲队列中把缓冲队列中等待复活时间过长的线程提前关闭,重新开启执行绘制任务。另外进入缓冲队列的线程在5秒内未接收到复活信号会强制关闭。

与现有技术相比,本发明存在以下技术效果:本发明将当前获取的坐标点对数与上一次的坐标点对数进行比较,在当前的坐标点对数与上一次的坐标点对数相同时,直接利用已有的线程与当前的获取的坐标点对进行匹配进行即可。在当前的坐标点对数大于上一次坐标点对数,则已有的线程与当前坐标点对一一匹配后,还剩余有坐标点对未匹配,则需开启新的线程与其匹配执行绘制任务。在当前的坐标点对数小于上一次坐标点对数,则已有的线程与当前坐标点对一一匹配后还剩余线程未能与坐标点对匹配,则将剩余的线程关闭或加入缓冲队列。本方案在于每个绘制都有相应的绘制线程单独操作,这样彼此之间绘制不受影响,线程在绘制的时候打开,不绘制的时候关闭,提高绘制的效率,节约了资源。坐标点匹配到相应的绘制线程,线程的打开采用轮训的方式,找到当前空闲绘制线程的效率提高。

附图说明

下面结合附图,对本发明的具体实施方式进行详细描述:

图1是一种多点同时绘制的匹配方法的流程示意图;

图2是延迟关闭机制流程图。

具体实施方式

为了更进一步说明本发明的特征,请参阅以下有关本发明的详细说明与附图。所附图仅供参考与说明之用,并非用来对本发明的保护范围加以限制。

如图1所示,本实施例公开了一种多点同时绘制的匹配方法,包括如下步骤s1至s2:

s1、获取坐标点对和坐标点对数newpointcount,并计算当前获取的坐标点对数newpointcount与上一次获取的坐标点对数oldpointcount的差值。判断是常规的,通过得到的差值判断程序进入不同的执行分支,提高运行的效率;同时,对于是否开启或者关闭线程可实现对系统资源的节约,提高代码的稳定性;

s2、控制开启或关闭与所述差值的绝对值相同数量的线程,以进行线程与当前获取的坐标点对的匹配。

其中,本实施例实时接收相机连续采集图片经后台算法对图像的处理后传过来的坐标点对和坐标点对数,并将上一次点的对数oldpointcount和当前点的对数newpointcount之间的关系作为控制线程的开关。

需要说明的是,本实施例中每个坐标点的绘制都有相应的绘制线程单独操作,这样可保证彼此之间绘制不受影响。因此,在当前接收的坐标点对时,根据当前坐标点对的数量,并结合现有线程的数量,开启或关闭相应数量的线程以使得线程数与当前坐标点对数量相同,然后进行一一匹配,执行坐标点对的绘制任务。如此,线程在绘制的时候打开,不绘制的时候关闭,提高绘制的效率,节约了资源。

进一步地,上述步骤s2:控制开启或关闭与所述差值的绝对值相同数量的线程,以进行线程与当前获取的坐标点对的匹配,包括:

在所述当前获取的坐标点对数newpointcount与上一次获取的坐标点对数oldpointcount相同时,直接进行线程与坐标点对的匹配;

在所述当前获取的坐标点对数newpointcount大于上一次获取的坐标点对数oldpointcount时,开启(newpointcount-oldpointcount)个线程并进行线程与坐标点对的匹配;

在所述当前获取的坐标点对数newpointcount小于上一次获取的坐标点对数oldpointcount时,关闭(oldpointcount-newpointcount)个线程并进行线程与坐标点对的匹配。

需要说明的是,本实施例中在进行线程和坐标点对之间的匹配时,分为三种状态的判断:

(1)当前坐标对数与之前坐标对数一样(newpointcount与oldpointcount相等,都不为零,若都是零,则不进行处理),则直接进行匹配即可,过程如下:

配方方式按照线程匹配坐标或者按照坐标匹配相应的线程都可以。比如按照线程匹配坐标,首先给正在运行的第一个线程startthreadnum[i]分配相对于的坐标对,坐标对的坐标(x,y)是按两个一维数组存储的,默认数组第一个就是合理的值。之后判断下一组坐标是否更加的合适,若更合适,则将下一组坐标存储在数字的第一个位置。如此针对一个线程,遍历所有坐标点后即可为当前线程匹配到合适的坐标点对。在遍历所有线程后即可实现线程与坐标点对的一一对应关系,每个绘制线程只绘制属于自己的坐标,每个坐标也只会被一个线程绘制。

其中,根据当前坐标与该线程最后一次绘制的坐标点之间的距离大小判断是否更加合适(距离值越小越合适),如果是则将坐标数组的两组坐标进行交换,直到所有的坐标数组都进行过判断。如此保证了多点绘制点与点之间不会出现相互交叉影响的情况。

优选地,上述距离值大小的判断只是验证了当前坐标与不同的线程之间相互比较得出与当前线程最为合适(坐标距离最小),但可能会出现坐标与线程之间不符合条件的情况。因此在经过一系列判断之后查找到最合适的距离值后仍需要进行判断,即具有最合适的距离值的当前坐标与当前线程最后一次绘制的坐标之间的距离是否超过了200个像素。如果超过,则立马关闭当前的绘制线程,同时开启一个新的绘制线程开始重新绘制。

(2)当前坐标对数比上一次坐标对数大(newpointcount比oldpointcount大,都不为零),匹配过程如下:

由于当前情况坐标对数大,绘制线程少,根据绘制线程匹配相应的坐标。先把现有的绘制线程分配好在直接开启新线程绘制剩下的坐标对,匹配过程与上述状态(1)的过程一样。

把当前坐标对分配给线程之后,还会多出(newpointcount-oldpointcount)个数组对,再开启(newpointcount-oldpointcount)个新线程直接绘制。

(3)当前坐标对数比上一次坐标对数小(newpointcount比oldpointcount小,都不为零),匹配过程如下:

把线程分配给坐标,再把多余线程关闭或者加入到缓冲队列即可。对于线程与坐标的匹配原则是根据当前正在绘制的线程个数和坐标对数,将数量少的匹配给数量多的,若相等随意选择一个即可,但两者是不能同时执行的。

进一步地,本实施例中采取轮训的方式开启线程,因为有十个绘制线程,每次都从第一个开始查找,不但查找的效率不高,而且会导致排在后面的绘制线程一直不会被调用。因此设计的开关思路是:如果newpointcount与oldpointcount的差值大于0,则开启相应的(newpointcount-oldpointcount)个新线程加入绘制队列。

例如:newpointcount!=0,oldpointcount=0情况下的开启思路如下:

其中,变量currtthread代表当前轮训到哪一个线程,下一次直接从currtthread之后的线程开始查找开启。startthreadnum数组用于存储已经开启的线程的线程号,主要用来后期处理的时候不用去数组里面遍历找出那些线程是正在绘制的。

如果newpointcount与oldpointcount的差值小于0,则关闭相应的(oldpointcount-newpointcount)个线程,并从正在绘制的队列中移除进入到缓冲队列中。

例如newpointcount=0,oldpointcount!=0情况下的关闭思路如下:

直接将线程的标识改成false。即每个线程的状态都有一个标识控制:

bool[]finshthread=newbool[10]{false,false,false,false,false,false,false,false,false,false};。

进一步地,如图2所示,对于获取坐标不稳定的设备,设备自己出现问题,导致应该获取到坐标的时候却获取不到(例如相机在绘制的被遮住,但很快就恢复),由于没办法得知设备当前获取坐标是否是不稳定的,本实施例设计了一个延迟关闭机制(缓冲关闭)。具体过程为:

在接收到线程关闭信号时,将当前需要关闭的线程加入缓冲队列delayclosingthread中;

在设定的缓冲时间内,判断是否接受到复活信号;

若是,则将当前需要关闭的线程移出缓冲队列继续执行绘制任务;

如否,则将当前需要关闭的线程从缓冲队列移出后关闭并将该线程的状态改为false。

需要说明的是,若存在坐标点对与该需要关闭的线程最后一次绘制的坐标点之间距离较该坐标点对与缓冲队列的其它线程最后一次绘制的坐标点之间距离都小,则将该坐标点对作为所述复活信号。

进一步地,本实施例中将缓冲时间设置为5秒,每个当前需要关闭的线程加入缓冲队列初始时间都是默认设置的固定值(如5秒),并由数组进行记录。本领域技术人员也可根据实际需求设置为其它固定时间。

本实施例通过在线程需要关闭的地方设置缓冲,延迟关闭当前需要关闭的线程,当有一个线程关闭信号过来,当前需要关闭的线程进入缓冲队列delayclosingthread,设置一个时间判断是复活还是关闭。对于获取坐标不稳定的设备,可保证绘制的准确性。

进一步地,在缓冲队列可以没有在等待复活的线程,也可以有正在等待复活的线程。在缓冲队列中有等待复活的线程时,若当前需要开启的新线程数大于空闲的线程,则需要从缓冲队列中把最接近时间的线程提前关闭,重新开启绘制。

本发明结合实例软件测试单点绘制的准确率达到98%以上,在多点同时绘制的准确率达到90%以上,多点多于十个点的时候,绘制的准确率的仍处于80%以上。绘制的效率在小于10同时绘制时基本上看不出延迟和卡顿等情况,多于10会有卡顿的现象存在但不明显。结合匹配原理本发明的目的就是在绘制的时候减小延迟和卡顿等恶劣影响,同时,接口方便接入提高开发的效率和开发的质量。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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