CN102096831B - 一种图形动态关系识别方法 - Google Patents

一种图形动态关系识别方法 Download PDF

Info

Publication number
CN102096831B
CN102096831B CN2009102732662A CN200910273266A CN102096831B CN 102096831 B CN102096831 B CN 102096831B CN 2009102732662 A CN2009102732662 A CN 2009102732662A CN 200910273266 A CN200910273266 A CN 200910273266A CN 102096831 B CN102096831 B CN 102096831B
Authority
CN
China
Prior art keywords
point
current
line
judge
mouse
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2009102732662A
Other languages
English (en)
Other versions
CN102096831A (zh
Inventor
朱晓亮
刘清堂
张国庆
宋晓娟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong Normal University
Original Assignee
Huazhong Normal University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huazhong Normal University filed Critical Huazhong Normal University
Priority to CN2009102732662A priority Critical patent/CN102096831B/zh
Publication of CN102096831A publication Critical patent/CN102096831A/zh
Application granted granted Critical
Publication of CN102096831B publication Critical patent/CN102096831B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Processing Or Creating Images (AREA)

Abstract

一种图形动态关系识别方法,用于对通过鼠标绘制输入计算机的图形进行关系识别,所述图形的种类为点、线或圆,当通过鼠标单击输入计算机的当前图形为点时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由点,有则提取该当前图形下所有在前图形的个数,根据个数分别进行处理,识别出重叠点、线上点、圆上点;当通过鼠标移动输入计算机的当前图形为线时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由线,有则根据绘制该当前图形时鼠标移动的终止点位置进行判断,包括若在前图形的种类为线则判断该当前图形是否为在前图形的中线或垂线,若在前图形的种类为圆则判断该当前图形是否为在前图形的切线。

Description

一种图形动态关系识别方法
技术领域
本发明属于教学自动化技术领域,特别是涉及一种图形动态关系识别方法。
背景技术
当前交互式电子白板已逐步应用于现代化的课堂教学环境,它不同于传统课堂的黑板,具有交互式强、支持随手绘图、易编辑等特征。交互式电子白板可以与电脑进行信息通讯,将电子白板连接到计算机,并利用投影机将计算机上的内容投影到电子白板屏幕上,在专门的应用程序的支持下,可以构造一个大屏幕、交互式的协作会议或教学环境。利用特定的电子白板笔代替鼠标在白板上进行操作,可以运行任何应用程序,可以对文件进行编辑、注释、保存等在计算机上利用键盘及鼠标可以实现的任何操作。
目前,电子白板正逐渐步入课堂教学。其中,在初等几何教学中,超级画板等工具已经逐渐得到应用。但是,此类工具依旧采用鼠标+键盘的输入方式,对于基于电子白板笔的绘制方式支持不足。因此,有必要研制一种新的支持手绘图形输入及关系识别的方法,针对初等几何教学中图形输入的以下特征:(1)点、线、圆、多边形是最基本和常用的图形,其中,多边形可以认为是多条线的集合。(2)课堂教学通常需要连续做图,然后由多种图形组合完成某种教学实例的讲解,在连续做图中,需要进行动态关系识别以保障图形在电子课件中保持特定的关系。但是,当绘制某些特定特征的图形,如垂线、中线、切线等,采用手绘的方式难以准确定位图形间的相互关系。比如手绘圆的切线,存在误差不能正好相切。
为了达到精确绘制几何图形的目的,现有的绘图工具软件通常采用预先设定绘制的类别,然后采用菜单或工具栏的外部干预的方式解决。但是,如果在手绘方式中采用这种思想实现,将会使绘制过程离散化,也无法体现电子白板笔绘制的方便、快捷的优势。
目前有出现一类手绘图形识别软件,例如Finite State machines,能够识别手绘输入内容代表的基本图形类别,即在人工输入后自动判断是否为点、线、圆,有些软件还自动识别出多条线构成的多边形,然后把不规整的图形自动规整化。这种图形识别一般包括三个步骤:轨迹获取,即获取鼠标移动时经过的轨迹;图形识别,根据获取到的轨迹判断所画图形形状;图形输出,即在显示屏幕上输出识别出的图形,达到规整化输出手绘所需表达图形的效果。但是,图形间的相互关系识别仍缺乏技术手段实现。
发明内容
本发明目的在于针对以上不足,提出一种图形动态关系识别方法。
本发明的技术方案用于对通过鼠标绘制输入计算机的图形进行关系识别,所述图形的种类为点、线或圆,
(1)当通过鼠标单击输入计算机的当前图形为点时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由点,有则提取该当前图形下所有在前图形的个数,根据个数分别进行以下处理,
若该当前图形下有两个在前图形,则判断该当前图形是否为在前图形的交点,
若该当前图形下有一个在前图形,则根据在前图形的种类进行判断,包括若在前图形的种类为点则判断该当前图形是否为在前图形的重叠点,若在前图形的种类为线则判断该当前图形是否为在前图形的线上点,若在前图形的种类为圆则判断该当前图形是否为在前图形的圆上点;
(2)当通过鼠标移动输入计算机的当前图形为线时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由线,有则根据绘制该当前图形时鼠标移动的终止点位置进行判断,包括若在前图形的种类为线则判断该当前图形是否为在前图形的中线或垂线,若在前图形的种类为圆则判断该当前图形是否为在前图形的切线。
而且,在(2)中,
判断当前图形是否为在前图形的中线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的中点的理论位置,判断绘制该当前图形时鼠标移动的终止点与中点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的中线,然后由绘制当前图形时鼠标移动的起始点到在前图形的中点的理论位置自动绘制出中线,否则判断当前图形为一般线;
判断当前图形是否为在前图形的垂线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的垂足点的理论位置,判断绘制该当前图形时鼠标移动的终止点与垂足点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的垂线,然后由绘制当前图形时鼠标移动的起始点到在前图形的垂足点的理论位置自动绘制出垂线,否则判断当前图形为一般线;
判断当前图形是否为在前图形的切线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的切点的理论位置,判断绘制该当前图形时鼠标移动的终止点与切点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的切线,然后由绘制当前图形时鼠标移动的起始点到在前图形的切点的理论位置自动绘制出切线,否则判断当前图形为一般线。
而且,先判断当前图形是否为在前图形的垂线,再判断当前图形是否为在前图形的中线。
而且,记录判断所得关系结果,并在移动多个在前图形时保持关系。
本发明提供的技术方案能够在连续做图中实现准确定位图形间的关系,将教师手绘图像转化为准确的几何图形方式,提高交互式电子白板的自动化程度,令教师操作方便快捷。实际应用本发明将具有多项优点:能够在现有z+z超级画板等图形输入软件上直接扩展定位图形间关系功能;便于支持无线电子白板;操作符合教师输入习惯,无需训练。
附图说明
图1为本发明实施例的图形识别过程示意图;
图2为本发明的线上点判断示意图;
图3为本发明的垂线绘制示意图;
图4为本发明的切点理论坐标求取示意图;
图5为本发明的垂足点理论坐标求取示意图;
图6为本发明的绘制过程示意图。
具体实施方式
一图形关系分析
由于多边形为多线段的集合,因此,图形间关系识别只需考察三种基本的图形:点,线和圆。针对不同的图形首先分析关系识别的基本要素。
(1)点
图形识别软件通常设定点是通过鼠标单击输入计算机,一般是由用户单击鼠标左键,图形输入软件内置的图形识别函数就会判断为点。点可分为自由点,线上点,圆上点,图形交点,重叠点五大类,在支持动态几何的应用中,点属性(不包含坐标位置)将保持不变。
自由点:鼠标左键在图形输入软件提供的客户区上任意空白区域按下时生成的点。对于这类点,只需支持选择后自由拖动。
线上点:鼠标在客户区中已有的线上(图形输入软件一般提供响应鼠标的自动变色显示,例如线会变红)时,点击,则会生成线上点。
圆上点:鼠标在客户区中已有的圆上(图形输入软件一般提供响应鼠标的自动变色显示,例如圆会变红)时,点击,则会生成圆上点。
交点:鼠标在客户区中已有的两个在前图形相交的位置点击,则可绘制出交点,选择拖动相交图形,交点会随之改变,但保持交点性质,如果图形不再相交,交点消失。
重叠点:这是种特殊情况,有可能鼠标在客户区中已有的点图形上点击,造成重复,所以绘制结果实际上合并了两点。
(2)线
图形识别软件通常设定线是通过鼠标移动输入计算机,由鼠标移动的起始点和终止点这两个点决定线段。用户的操作则是按下鼠标左键确定起始点位置,保持左键按下拖动,松开时确定终止点位置。
一般情况下,鼠标左键按下拖动后抬起,如果轨迹被图形输入软件内置的图形识别函数判断为线,则会在起始点位置(按下点)和终止点位置(松开点)之间作出一条线段。线段支持选择后改变位置及长短。为已有线段作出中线或垂线,是教学常见需求,因此本发明提出,将线分为自由线、中线、垂线、切线和一般线,提供具体关系识别。通过多个线段首尾相连,可以做出三角形,四边形等多边形。如果两线段端点重合,图形输入软件内置的图形识别函数会自动将两个点判别成一个点,这样,三条线段构成三角形,就会只有三个端点。多边形依次类推。处理时考虑构成多边形的线段即可。
自由线:鼠标在图形输入软件提供的客户区上任意空白区域移动时生成的线。对于这类线,只需支持选择后自由拖动。
中线:是线段外一点到线段中点的连线。鼠标左键按下在客户区中拖动后,如果在客户区中已有的线段中点抬起,可以设定自动跳出“中点”字样,当图形拖动时该中点随在前线段变化而变化,但总是保持中点特性不变,这样就可以在移动多个在前图形时(包括已有的线段和作出的中线时)保持中线关系。
垂线:是线段外一点到线段上的垂直线。鼠标左键按下在客户区中拖动后,如果在客户区中已有的线段上垂足点处抬起,可以设定自动跳出“垂足点”字样,当图形拖动时该垂足点随垂线的起始点一起移动,但总是保持垂足点特性不变,这样就可以在移动多个在前图形时(包括已有的线段和作出的垂线时)保持垂线关系。
切线:是圆外一点到圆上的切线。鼠标左键按下在客户区中拖动后,如果在客户区中已有的圆上切点处抬起,可以设定自动跳出“切点”字样,当图形拖动时该切点随切线的起始点一起移动,但总是保持切点特性不变,这样就可以在移动多个在前图形时(包括已有的圆和作出的切线时)保持切线关系。
一般线:除中线、垂线和切线以外,于在前图形上做的线无需特别关注。在客户区中已有的在前图形上抬起时,和自由线一样生成线即可。
(3)圆
图形识别软件通常设定圆是通过鼠标移动输入计算机,由鼠标移动的起始点位置决定圆心,由终止点位置作为圆上一点决定圆的半径。用户的操作则是按下鼠标左键确定起始位置,保持左键按下拖动然后松开,根据其轨迹由相应算法判断出计算出圆心和半径,然后进行做图。
鼠标左键按下拖动后抬起,如果轨迹被图形输入软件内置的图形识别函数判断为圆,则会根据取圆参数取得的圆心和半径做一个圆。圆支持选择后改变位置及大小。教学中不需要分析圆和在前图形的关系,因此本发明不予特别处理。
图形识别属于现有技术,本发明提供一种具体实施方式以供参考,识别出点、线、圆的图形识别函数IdentifyShape见以下伪码说明:
如果  图形数组中的点坐标数目为1个
{绘制图形为点;}
或者
{
    distance1=起始点到结束点的直线距离;
    distance2=图形数组中的顺序点间距离的叠加;
    如果(distance1和distance2的比小于等于门限Th0,Th0取经验值0.08)
        {绘制图形为线;}
    或者
        {绘制图形为圆;}
}
图形数组用于存放绘制当前图形时,鼠标所经过的点坐标,当鼠标单击绘制点时,图形数组只会存放1个点坐标。图形数组存放1个以上点坐标时,绘制的当前图形就是线或者圆,图形数组从起始点到结束点顺序存放鼠标移动所经过点的点坐标,鼠标移动所经过点构成点序列,按顺序求取相邻点间距离后叠加即可得到distance2。实施例中,图形识别函数IdentifyShape识别得到绘制图形为线时,令变量shape=0,识别得到绘制图形为圆时,令变量shape=1。
点、线的基本参数由相应点的坐标得到,为便于实施参考,提供一种现有技术的取圆参数提取方法如下:
确定圆心和半径的方法是先把鼠标移动所经过的点序列均分成三份,从每一份中任取一点,这样就有三个点。确定这三个点构成的圆的圆心和半径;同理,遍历点序列,保证每个点都参与过计算,就可以得到一组圆心和半径的值,再从这组值中确定出最佳圆心和半径。然后,由最佳圆心和半径计算出圆外接矩形的左上点坐标和右下点坐标。关键步骤详细说明如下:
(1)由三点确定圆心和半径的方法:
三点确定三条直线,三条直线对应三条中垂线,三条中垂线的交点就是三点所成圆的圆心。圆心到三点中任一点的距离就是半径。
(2)由一组圆心和半径值确定最佳圆心和半径的方法:
从这组数据中找出出现概率最大的圆心(cx,cy)和半径cr。在[cx-2,cx+2]和[cy-2,cy+2]范围内计算圆心与笔划上每一点的距离,再与[cr-2,cr+2]范围内对应半径求差值,并计算累积和。差值大表示当前圆心和半径与真实值接近程度低,反之则高。差值和最小时对应的cx,cy和cr值就是最佳圆心和半径值。
二动态关系识别
根据以上关系识别分析结果,本发明提供了关系识别实现的技术方案,(1)当通过鼠标单击输入计算机的当前图形为点时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由点,有则提取该当前图形下所有在前图形的个数,根据个数分别进行以下处理,
若该当前图形下有两个在前图形,则判断该当前图形是否为在前图形的交点,
若该当前图形下有一个在前图形,则根据在前图形的种类进行判断,包括若在前图形的种类为点则判断该当前图形是否为在前图形的重叠点,若在前图形的种类为线则判断该当前图形是否为在前图形的线上点,若在前图形的种类为圆则判断该当前图形是否为在前图形的圆上点;
(2)当通过鼠标移动输入计算机的当前图形为线时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由线,有则根据绘制该当前图形时鼠标移动的终止点位置和在前图形进行判断,包括若在前图形的种类为线则判断该当前图形是否为在前图形的中线或垂线,若在前图形的种类为圆则判断该当前图形是否为在前图形的切线。
以上技术方案可以采用计算机软件技术实现自动关系识别,还可以进一步在识别结果上自动进行相应绘制处理,软件流程可参见图1:流程开始后,判断为了将当前图形输入计算机,用户进行的操作是鼠标单击还是鼠标移动。当用户进行的操作是鼠标单击时(即图形数组中的点坐标数目为1个),判断当前图形下是否有在前图形,即鼠标单击位置下是否已有图形。若没有则判断当前图形为自由点进行绘制,若有且只有一个在前图形时,判断为线上点或圆上点或重叠点,若有且有两个在前图形时,判断为在前图形的交点。当用户进行的操作是鼠标移动时(即图形数组存放1个以上点坐标),识别当前图形为线或圆,当为圆时,直接画圆即可。当为线时,首先判断当前图形下是否有在前图形,即鼠标移动的终止点下是否已有图形,没有则判断为自由线,有则根据在前图形种类判断,在前图形为线时判断当前图形为中线、垂线或一般线,在前图形为圆时判断当前图形为切线。
本发明实施例基于现有Microsoft Visual C++技术实现,以下简称VC。实施例按照应用分类,分别进行动态关系识别的方法如下:
1.点绘制的动态关系识别
鼠标单击所绘制点,主要分两类:图形上的点和图形外的点。图形外的点即自由点。其中,图形上的点除重叠点、线上点和圆上点以外,还包含了特例——图形的交点。考虑到用户使用鼠标时,未必能够准确地点击到所需要的位置,具体实施时,需要判断鼠标下点击位置下是否有在前图形时,可以容许一定范围内的差异。也就是说,绘制点的关键是动态判断发生鼠标绘制的当前图形(点)在目标上的事件和目标的范围。本实施例标记为PtInObject函数,:
a重叠点的PtInObject函数
求鼠标当前点和目标点的距离,如果距离小于6像素,认为鼠标在目标点上,此时两点合并。
b线上点的PtInObject函数
求鼠标当前点和线段两个端点的距离(有两个),如果这两个距离之和减去线段长度的差不小于0.2,则认为点在线段上。
参见图2,如果AB+AC<=BC+0.2,则认为点A在线段BC上。
c圆上点的PtInObject函数
求鼠标当前点到圆心的距离,如果该长度处于半径±3范围内,则认为点在圆上。
现有技术中,客户区中已有的所有在前图形都采用VC里的对象链表模板类存储。当用户输入当前图形时,计算机自动调用一一调取对象链表中所有在前图形对象的信息,并根据在前图形的种类采用相应PtInObject函数,判断该在前图形是否在当前图形下。由此得到当前图形下有几个在前图形,以及这些在前图形的种类,然后即可判定具体关系:
若该当前图形下有一个在前图形,则根据在前图形的种类进行判断,包括若在前图形的种类为点则判断该当前图形是否为在前图形的重叠点,若在前图形的种类为线则判断该当前图形是否为在前图形的线上点,若在前图形的种类为圆则判断该当前图形是否为在前图形的圆上点。
若该当前图形下有两个在前图形,则判断该当前图形是否为在前图形的交点。然后可以判断两个以上图形的形状,做出相应的交点,具体实施时做交点可采用现有技术,即采用绘制交点函数的形式,判断当前图形为在前图形的交点时调用绘制交点函数进行绘制。
用户输入的当前图形是自由点时,在客户区直接于用户所点击位置显示自由点。而重叠点、线上点、圆上点和交点,因为容许了一定范围误差,并不一定是在用户所点击位置显示点,而是自行在理论位置显示。
2.线绘制的动态关系识别
除了点,手绘图形间的动态关系识别主要解决中线、垂线、切线的绘制识别,中线的目标点为线段上的中点,垂线的目标点为线段上垂足所在垂足点,切线的目标点为圆上的切点。为判定是否达到目标点,需要考察绘制当前图形时鼠标移动的终止点位置。可以将中点和垂足点视为特殊的线上点,将切点视为特殊的圆上点,具体实施时可以预先判定终止点是否为线上点或圆上点。考虑到用户使用鼠标时,未必能够准确地点击到所需要的位置,具体实施时可以容许一定范围内的差异,在鼠标抬起时(即鼠标移动终止时),通过线上点的PtInObject函数、圆上点的PtInObject函数进行判断。
实施例的基本识别步骤为:
2.1鼠标在移动时,则进行动态关系识别预处理,即是否发生鼠标绘制的点在目标上的事件(即采用上述相应的PtInObject函数预先判定终止点是否为线上点或圆上点),如果“是”,则会调用vc自带重绘函数重绘显示设备上展现的客户区,而重绘的图形默认颜色为红色以区别于客户原来手绘的图形)。这一操作是为得到关键点(中点等)提供函数入口参数。
2.2鼠标在抬起时,若图形识别判断出绘制的图形为线(OnLButtonUp伪代码3)的结果,则按照步骤2.3进行三类特殊点的判断;
2.3当在前图形为线时,按照判断优先级:垂线->中线进行关系判断。即先检查鼠标移动的终止点位置是否在垂足点的理论位置附近,然后检查是否在中点的理论位置附近。当在前图形为圆时,检查是否在切点的理论位置附近。
经多次试验,建议将是否位于某目标点的“附近”的判断门限值设置为60*60像素的区域,即如果鼠标移动的终止点位置的横纵坐标和目标点的理论位置横纵坐标相差不超过30个像素,就认为他们是同一点。将当前点记为dqd,目标点记为mbd,则|dgd.x-mbd.x|<=30&&|dqd.y-mbd.y|<=30,其中.x标识横坐标、.y标识纵坐标。具体实施时,可以通过VC自带的函数获取客户区内目标点的理论位置的具体坐标。比如VC自带的函数可以算出从线段外某点到线段上的中点,当用户单击鼠标确定鼠标移动的起始点时,该函数就可以得到从起始点位置到在前图形的中点的理论位置。
具体实施时,三类线的动态关系判断和绘制过程如下举例所示:
(1)中线(一般是为三角形的某边作中线)
即过客户区中已有的线段外一点,做该线段的中线。首先,用户将鼠标左键按下得到线段(设为bc)外的一点(设为a)作为起点。然后,当鼠标移动到线段bc上时,该线段bc变红,则抬起鼠标结束绘制并进行判断,若判断鼠标绘制的当前线段的终点到达a到bc的中点d的理论位置附近,则认为用户是在做中线。此时,跳出“中线”字样,然后连接起点a和中点d自动做出中线。
(2)垂线
即过客户区中已有的线段外一点,做该线段的垂线。参见图3,首先,用户将鼠标左键按下得到线段(设为bc)外的一点(设为a)作为起点。然后,当鼠标移动到线段bc上时,该线段bc变红,则抬起鼠标结束绘制并进行判断,若判断鼠标绘制的当前线段的终点到达a到bc的垂足点d的理论位置附近,则认为用户是在绘制垂线段。此时,跳出“垂线”字样,然后连接起点a和垂足点d自动做出垂线段。
(3)切线
即过客户区中已有的圆外一点,做该圆的切线。首先,用户将鼠标左键按下得到圆外的一点作为起点。然后,当鼠标移动到圆上时,该圆变红;则抬起鼠标结束绘制并进行判断,若判断鼠标绘制的线段的终点处于起点到圆的切点附近,则认为用户是在做切线。此时,跳出“切线”字样。然后,自动连接起点和切点得到切线。
3.图形移动的动态关系识别
在图形移动时保持绘制时识别出的关系,可以在移动中保持图形间几何关系不变,使演示更随意流畅。本发明建议通过保存父子对象关系保持识别出的关系结果,父对象决定子对象的存在,可以设定以下父子对象关系:
线段的父对象为线段的两个端点,圆的父对象为圆心和圆周上一点,线上点的父对象为线段,圆上点的父对象为圆,中点、垂足点的父对象为线外一点和线段,切点的父对象为圆外一点和圆。按照线段的父对象为线段的两个端点的规则,中线的父对象为线外一点和中点,垂线的父对象为线外一点和垂足点,切线的父对象为圆外一点和切点。
具体实施时在程序中,每生成一个对象,就要将其加入其父对象的关联链表中。图形间的关联由关联链表来实现。链表是VC中一种数据结构。每绘制完成一个图形,都要将其和别的对象(父对象)关联,实施例标记为函数AddAssociateObj,这个函数的作用是将对象加入其父对象的关联链表中。在图6的具体绘制例子中,切线、垂线、切点、垂足点等都是和D点相关的,D点是G点(切点)的父对象,D、G点又是切线DG的父对象,切线DG又是垂足点M的父对象。当移动组合图形某关键点D时,调用D点的Moveto函数(每个图形都有一个Moveto函数,由Visual C++自动生成相应框架,该函数作用是移动点的位置到某个特定值),这个函数又调用相应函数更新所有和D点有关联的对象,即调用与D点有关联的所有点的Moveto函数。大体流程是遍历D的关联链表,然后改变每个图形的相应位置。这样,移动了D,就重新自动计算与之相关联的所有图形的位置,则每个图形也就相应的保持动态关系不变了。
三程序实现流程
由于具体实施时可采用Microsoft Visual C++实现,采用函数形式提供程序代码可以灵活响应客户操作。为方便本领域人员实施参考起见,本发明提供了具体程序代码设计方案:程序代码主要反映在鼠标左键按下(标记为OnLButtonDown)、鼠标移动(标记为OnMouseMove)和鼠标左键弹起(标记为OnLButtonUp)三个函数中。其他定义包括绘制中线,切线和垂线的类主要功能及流程(分别标记为CDrawPointMid,CDrawPointTangent和CDrawPointFoot)、判别两个点的距离是否在一定得范围内(标记为IdenfifSamePoint)、跳出所画图形的有闪烁文字提示函数(标记为ShowTip)。
各函数基本流程说明如下:
1 OnLButtonDown
主要功能:记录鼠标移动的起始点,做自由点,交点、重叠点、线上点和圆上点,并为OnLButtonUp中做中线、垂足线和切线提供依据。
主要步骤流程描述如下:
(1)设置并保存当前点为鼠标移动的起始点,并清空上个在前图形的轨迹数组(所谓轨迹数组就是将鼠标移动的轨迹,也就是鼠标经过的点保存下来,放到一个数组里面,由OnMouseMove函数提供),设置该点状态为新点
(2)设置一变量标记为num,变量值为当前图形下在前图形的个数
(3)如果num为0
那么为自由点,绘制该自由点,并将其(由于对象存储在对象链表中,该图形对象用对象链表的指针表示)存在变量m中(用于绘制圆时)和对象firstObj(用于关系判别)中
(4)如果num为1
那么取得当前图形下该在前图形的指针,并将其保存在对象firstObj中
如果该在前图形是线
判断当前图形为线上点(标记为midpoint=1),跳出(此次跳出而不绘制,而是在判断中点的时候再绘制,是中点的话就绘制中点,否则绘制线上点)。
如果该在前图形是圆
判断当前图形为圆上点,绘制。
将当前图形与圆相关联
如果不是线段或圆
判断当前图形为重叠点,将在前图形的指针赋给当前图形(用在绘制多边形上)
(5)如果num为2,则当前图形为两在前图形的交点
取得两在前图形的指针
如果在前图形之一为线且在前图形之二为线
判断当前图形为线线交点并绘制
如果在前图形之一为线且在前图形之二为圆
判断当前图形为线圆交点并绘制
如果在前图形之一为圆且在前图形之二为线
判断当前图形为圆线交点并绘制
如果在前图形之一为圆且在前图形之二为圆
判断当前图形为圆圆交点并绘制
将当前图形和在前图形相关联(以便保持交点性质)
2 OnMouseMove
主要功能:
该函数的主要功能是存储鼠标移动的轨迹,将其放置在一个轨迹数组中,为图形识别提供数据依据。
主要步骤:
(1)定义一个轨迹数组用来存储绘图轨迹
(2)如果鼠标按下
将鼠标经过点的坐标加入数组中并设置状态为鼠标移动
3 OnLButtonUp
主要功能:画线,圆;对中线,垂线,切线进行动态识别。这部分是整个程序的核心。
主要步骤:
(1)设置当前点为鼠标移动的终止点并保存
(2)如果鼠标移动而且轨迹数组里的点的个数大于五
(3)那么
调用图形识别函数(IdentifyShape)来判断图形形状,得到辨别图形为直线(shape=0)或圆(shape=1)
(4)设置一变量,值为当前图形下有在前图形的个数(此时当前鼠标下在前图形变红)
如果当前图形下在前图形的个数为1且该在前图形为线
那么取进行图形识别的两个图形的指针(第一个图形针对鼠标移动的起始点,记为firstObj,是在OnLButtonDown中获得的点指针;第二个图形针对当前图形下在前图形,为线或圆,此时鼠标在其上,在前图形保存变红的状态)
如果第二个图形为线
那么求得过点firstObj到该线的垂足点的理论位置
如果求得的垂足点的理论位置和当前点距离在预设区域范围内
那么认为用户是在画垂线
弹出提示,做垂足点并连接点firstObj和该垂足点的理论位置得到垂线
如果第二个图形为线
那么求得过点firstObj到该线的中点的理论位置
如果求得的中点的理论位置和当前点距离在预设区域范围内
那么认为用户是在画中线
弹出提示,做出中点并连接点firstObj和该中点的理论位置得到中线
如果第二个图形为圆
求过点firstObj到该圆的两个切点的理论位置(分别标记为qd1和qd2)
如果qd1和当前点距离在预设区域范围内
那么弹出提示,做出切点qd1并连接点firstObj和该切点的理论位置得到切线
如果qd2和当前点距离在预设区域范围内
那么弹出提示,做出切点qd2并连接点firstObj和该切点的理论位置得到切线
(5)如果shape为0
那么取OnLButtonDown所得鼠标移动的起始点为线段的起点
调用OnLButtonDown函数,取当前点为线段的终点
调用画线函数(画线函数是一个简单的画直线的类,是VC提供的现有技术),从起点到终点画线
将该线加入对象链表中
将起点和终点与线相关联
如果shape为1
那么取得圆的圆心和圆周上的点并将其显示出来
删除m点(OnLButtonDown取得,m点是画圆时鼠标一开始落下的一个点,对于画圆没有用,因此为简洁起见可以删除)
调用画圆函数(画圆函数是一个简单的画圆的类,是VC提供的现有技术),根据圆心、以圆心到圆周上的点之间距离为半径,画圆
将该圆加入对象链表中
将圆心和圆周上的点与圆相关联
(6)设置状态为鼠标不移动
(7)如果midpoint为1(OnLButtonDown中获得)
取得线段的起点和终点,求得中点的理论位置
如果当前点与中点的理论位置距离在预设区域范围内
那么做出中点并弹出提示(此次只作出一个线段的中点,而不是做中线,注意区别)
如果不在一定范围内
那么弹出提示并做出线上点
因为教学中有指出线段中点的需要,而不一定需要做中线,中线往往只针对三角形而做。因此,作为特殊的线上点,本发明实施例采用OnLButtonDown函数和OnLButtonUp函数配合实现。在OnLButtonUp函数(7)部份中,如果当前点与中点的理论位置距离在预设区域范围内就做出中点,否则直接作出普通的线上点。
4类:CDrawPointLL、CDrawPointLC和CDrawPointCC
主要功能:这三个类的功能分别是绘制线线交点(记为CDrawPointLL)、线圆交点(记为CDrawPointLC)和圆圆交点(记为CDrawPointCC),以及在移动时保持交点随图形移动而改变。
类的构成:以CDrawPointLL为例。在CDrawPointL L类中包括构造函数以及成员函数SetDatas、ResetPosition和MoveTo。其中SetDatas函数的作用是根据两个相交线段的数学表达式求出交点(解方程组即可),MoveTo和ResetPosition的作用是在相交直线的位置改变后重新计算交点坐标,从而保证交点随着相交直线的移动而改变。
5类:CDrawPointLine和CDrawPointCircle
主要功能:绘制线上点和圆上点,以及在移动图形时保持线上点(圆上点)随线(圆)改变而改变。
类的构成:以CDrawPointLine为例,该类包括成员变量m_dLambda,构造函数以及成员函数SetLambda,MoveTo和ResetPosition。其中m_dLambda是记录线上点和线段的比例关系,SetLambda求出该比例关系。MoveTo和ResetPosition的作用是在移动过程中通过m_dLambda求出新的线上点,从而保证线上点在移动过程中保持比例关系不变。
6绘制中点,切点和垂足点(分别标记为CDrawPointMid,CDrawPointTangent和CDrawPointFoot)的类主要功能及步骤
主要功能:以CDrawPointFoot为例,其构造函数的入口有两个,分别是图形外一点的指针(标记为m_pBegin)和图形的指针(线,标记为m_pEnd),如图3,即输入参数为点a的指针和线bc的指针,输出的是垂足点d。在程序中主要是通过调用它们的构造函数完成关键点的识别,这三个构造函数类似。以垂足点为例,显示文本指针标记为m_strContent,实参输入标记为点pPoint,线pLine:
(1)m_strContent=″:垂足点″;m_pBegin=pPoint;m_pEnd=pLine;
(2)调用相关计算函数用数学方法求得过点pPoint线pLine的垂足点的理论位置。
CDrawPointMid类的相关计算函数核心数学思想:
设中点的理论位置横纵坐标为m_dx和m_dy,线段起始点和终点指针标记为m_pBegin(横坐标为m_pBegin->m_dx,纵坐标为m_pBegin->m_dy)和m_pEnd(横坐标为m_pEnd->m_dx,纵坐标为m_pEnd->m_dy),则有
m_dx=(m_pBegin->m_dx+m_pEnd->m_dx)/2;
m_dy=(m_pB_egin->m_dy+m_pEnd->m_dy)/2;
CDrawPointTangent类的相关计算函数核心数学思想:
参见图4,设圆外点坐标为(px,py),圆心(cx,cy),半径为r,点到圆心距离为z。
1进行坐标系变换,将坐标系原点移到圆心处(如图4所示)
这时px=px-cx;py=cy-py;
2T1为圆外点和圆心连线与x轴夹角T1=atan(py/px),T2为圆外点、切点、圆心的夹角T2=acos(r/z)。求T2和T1的差,即T3=T2-T1。
3则切点(处于图中第四象限)在此坐标系中坐标为x=r*cos(T3),y=-r*sin(T3)。
4转换为以前的坐标为切点的理论位置横纵坐标x=r*cos(T3)+cx,y=cy-r*sin(T3)。
CDrawPointFoot的相关计算函数核心数学思想:
参见图5,设点为(x,y),线段起点标记为pBegin->m_dx,pBegin->m_dy),终点标记为m_pEnd->m_dx,m_pEnd->m_dy)。
如果线段垂直于X轴,则垂足点的理论位置横坐标为pBegin->m_dx,纵坐标为y。
如果线段垂直于Y轴,则垂足点的理论位置横坐标为x,纵坐标为pBegin->m_dy
除以上线段垂直于X或Y轴的特殊情况外,一般情况下,则按以下步骤得到垂足点坐标:
1首先,如图5所示,将坐标原点移到点(x,y),起点变为(x1,y1),终点为(x2,y2),设k1=(y2-y1)/(x2-x1),k2=-(x2-x1)/(y2-y1),b1=y1-x1*k1
2运用相似三角形原理推导出垂足点的理论位置在该坐标系下坐标值为(b1/(k2-k1),-k2*b1/(k2-k1))
3再将b1/(k2-k1),-k2*b1/(k2-k1))变换到原坐标下,得到垂足点的理论位置在原坐标系下坐标值。
7 IdentifySamePoint
主要功能:判别两个点的距离是否在预设区域范围内,是的话返回TRUE,否则返回FALSE.
输入:当前点(标记为oldPoint);判断点,即中点、垂足点或切点(标记为newPoint)
主要流程:
设置一个布尔型变量dis
如果(abs(oldPoint.x-newPoint.x)<=30)而且abs(oldPoint.y-newPoint.y)<=30)
Dis=TRUE
否则
Dis=FALSE
返回dis
其中.x标识横坐标,.y标识纵坐标,abs()为c++自带的取绝对值函数。
8 ShowTip
主要功能:
跳出所画当前图形的闪烁文字提示,向用户提供关系识别结果,例如“线上点”、“交点”、“中线”等。
输入:当前鼠标点位置;显示文字字符串指针
输出:无
伪代码:
在当前鼠标点的x,y坐标各加10个像素的位置显示字符串str
等待500毫秒
在当前鼠标点的x,y坐标各加10个像素的位置显示空字符串
等待500毫秒
在当前鼠标点的x,y坐标各加10个像素的位置显示字符串str
等待500毫秒
四连续手绘初等几何图形实例
为方便了解图形关系识别在绘制过程的应用,本发明提供一个实例,绘制目标是通过圆外一点D做圆BC的两条切线,并连接两个切点G、K,以D、G、K三点为顶点的三角形做三条垂线,证明它们交于一点。参见图6:
(1)当鼠标进行由B点到C点的移动时,通过IdentifyShape函数自动识别输入计算机的当前图形为规则的圆,记为圆BC;
(2)当鼠标点击D点时,通过OnLButtonDown函数自动绘制点D;
(3)当由D点拖动鼠标至圆BC上,通过OnLButtonMove函数自动将圆BC在客户区的显示颜色变红;
当通过OnLButtonUp函数调用IdentifySamePoint函数识别出拖动鼠标至圆BC上的终结点为切点时,自动在切点的理论位置绘制切点G,并将切点G与圆相关联,即两者满足动态几何关系,同时通过CDrawPointTangent函数自动绘制切线DG;
采用同样方法绘制切线DK;
(4)从K点出发,鼠标移动至G点,通过OnLButtonMove函数自动将G点在客户区的显示颜色变红;鼠标松开,自动绘制线GK(画线函数);
(5)从D点出发,鼠标拖动至线GK,线GK变红;
鼠标松开,当通过OnLButtonUp函数调用IdentifySamePoint函数识别出松开时的终结点为垂足点时,通过CDrawPointFoot函数自动绘制垂线DL;
采用同样方法绘制垂线KM、GN,发现垂线DL、GN、KM交于一点,点击交点标记为O点,通过绘制交点函数绘制O点。
(6)拖动D点,观察垂线DL、GN、KM的交点,可验证其始终交于O点。这种动态关系的保持为关联链表应用的具体实例。

Claims (5)

1.一种图形动态关系识别方法,用于对通过鼠标绘制输入计算机的图形进行关系识别,其特征在于:
(1)当通过鼠标单击输入计算机的当前图形为点时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由点,有则提取该当前图形下所有在前图形的个数,根据个数分别进行以下处理,
若该当前图形下有两个在前图形,则判断该当前图形是否为在前图形的交点,
若该当前图形下有一个在前图形,则根据在前图形的种类进行判断,包括若在前图形的种类为点则判断该当前图形是否为在前图形的重叠点,若在前图形的种类为线则判断该当前图形是否为在前图形的线上点,若在前图形的种类为圆则判断该当前图形是否为在前图形的圆上点;
(2)当通过鼠标移动输入计算机的当前图形为线时,判断该当前图形下是否有在前图形,没有则将该当前图形判断为自由线,有则根据绘制该当前图形时鼠标移动的终止点位置进行判断,包括若在前图形的种类为线则判断该当前图形是否为在前图形的中线或垂线,若在前图形的种类为圆则判断该当前图形是否为在前图形的切线。
2.如权利要求1所述的图形动态关系识别方法,其特征在于:在(2)中,判断当前图形是否为在前图形的中线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的中点的理论位置,判断绘制该当前图形时鼠标移动的终止点与中点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的中线,然后由绘制当前图形时鼠标移动的起始点到在前图形的中点的理论位置自动绘制出中线,否则判断当前图形为一般线;
判断当前图形是否为在前图形的垂线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的垂足点的理论位置,判断绘制该当前图形时鼠标移动的终止点与垂足点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的垂线,然后由绘制当前图形时鼠标移动的起始点到在前图形的垂足点的理论位置自动绘制出垂线,否则判断当前图形为一般线;
判断当前图形是否为在前图形的切线的实现方式为,求取绘制该当前图形时鼠标移动的起始点到在前图形的切点的理论位置,判断绘制该当前图形时鼠标移动的终止点与切点的理论位置是否在预设区域范围内,是则判断当前图形为在前图形的切线,然后由绘制当前图形时鼠标移动的起始点到在前图形的切点的理论位置自动绘制出切线,否则判断当前图形为一般线。
3.如权利要求2所述的图形动态关系识别方法,其特征在于:先判断当前图形是否为在前图形的垂线,再判断当前图形是否为在前图形的中线。
4.如权利要求2或3所述的图形动态关系识别方法,其特征在于:所述预设区域范围采用60×60像素。
5.如权利要求1或2或3所述的图形动态关系识别方法,其特征在于:记录判断所得关系结果,并在移动多个在前图形时保持关系。
CN2009102732662A 2009-12-15 2009-12-15 一种图形动态关系识别方法 Active CN102096831B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102732662A CN102096831B (zh) 2009-12-15 2009-12-15 一种图形动态关系识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102732662A CN102096831B (zh) 2009-12-15 2009-12-15 一种图形动态关系识别方法

Publications (2)

Publication Number Publication Date
CN102096831A CN102096831A (zh) 2011-06-15
CN102096831B true CN102096831B (zh) 2013-01-30

Family

ID=44129919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102732662A Active CN102096831B (zh) 2009-12-15 2009-12-15 一种图形动态关系识别方法

Country Status (1)

Country Link
CN (1) CN102096831B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103885759B (zh) * 2012-12-21 2018-05-22 深圳富泰宏精密工业有限公司 在笔记软件中插入图形物件的方法及系统
CN103902209B (zh) * 2012-12-25 2018-02-27 联想(北京)有限公司 一种电子设备输入图形的方法及电子设备
CN104680147B (zh) * 2015-03-09 2018-04-03 浙江万朋教育科技股份有限公司 一种基于鼠标和触控设备的特需几何图形的快速识别方法
CN106033409B (zh) * 2015-03-20 2019-07-26 广州金山移动科技有限公司 一种顶点编辑方法及装置
CN105261260A (zh) * 2015-10-15 2016-01-20 清华大学附属中学 一种基于形独的交互方法和系统
CN105426077B (zh) * 2015-11-03 2019-01-29 广东威创视讯科技股份有限公司 一种基于cocos2dx框架的变化比例确定方法及装置
CN107248182A (zh) * 2017-06-07 2017-10-13 王征 一种基于磁吸器的多边形绘制的系统及其方法
CN111752646B (zh) * 2019-03-27 2024-08-27 珠海金山办公软件有限公司 一种图形位置调整方法、装置及电子设备
CN112102435B (zh) * 2020-09-24 2023-08-01 安徽文香科技股份有限公司 一种几何图形绘制的方法、装置、设备及存储介质
CN112434632B (zh) * 2020-12-01 2024-05-28 康佳集团股份有限公司 一种图形识别方法、智能终端及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101021950A (zh) * 2007-03-19 2007-08-22 朱桂永 一种方便的鼠标绘图方法
CN101281688A (zh) * 2008-03-26 2008-10-08 博采林电子科技(深圳)有限公司 便携式学习设备及其动态几何作图方法
CN101393648A (zh) * 2008-10-07 2009-03-25 广东威创视讯科技股份有限公司 手绘几何图形的识别方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4621618B2 (ja) * 2006-03-28 2011-01-26 株式会社東芝 図形描画装置、図形描画方法、およびプログラム
JP4157569B2 (ja) * 2006-05-11 2008-10-01 株式会社東芝 描画装置、描画方法及び描画プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101021950A (zh) * 2007-03-19 2007-08-22 朱桂永 一种方便的鼠标绘图方法
CN101281688A (zh) * 2008-03-26 2008-10-08 博采林电子科技(深圳)有限公司 便携式学习设备及其动态几何作图方法
CN101393648A (zh) * 2008-10-07 2009-03-25 广东威创视讯科技股份有限公司 手绘几何图形的识别方法

Also Published As

Publication number Publication date
CN102096831A (zh) 2011-06-15

Similar Documents

Publication Publication Date Title
CN102096831B (zh) 一种图形动态关系识别方法
US20180052593A1 (en) Providing visual selection of map data for a digital map
KR0156270B1 (ko) 지도데이터 작성방법 및 작성장치
CN109446369A (zh) 图像半自动标注的交互方法及系统
CN108154560A (zh) 激光点云标注方法、装置及可读存储介质
CN108399386A (zh) 饼图中的信息提取方法及装置
CN111985025B (zh) 基于Unity 3D的建筑工程施工标准图集智能可视化系统及方法
CN110992384B (zh) 半自动化图像数据标注方法、电子装置及存储介质
CN111028261B (zh) 高精度半自动化图像数据标注方法、电子装置及存储介质
CN106096542A (zh) 基于距离预测信息的图像视频场景识别方法
CN111738252B (zh) 图像中的文本行检测方法、装置及计算机系统
CN114063858B (zh) 图像处理方法、装置、电子设备及存储介质
WO2022247823A1 (zh) 图像检测方法、设备和存储介质
US6785418B1 (en) Image identification apparatus and method of identifying images
CN110910414B (zh) 图像轮廓生成方法、图像标注方法、电子装置及存储介质
CN105718663B (zh) 配电网autocad设计图自动识别方法
KR101172881B1 (ko) 온라인용 객관식 시험지의 제작 방법 및 시스템
CN110188662A (zh) 一种水表数字的ai智能识别方法
CN112925470A (zh) 交互式电子白板的触摸控制方法、系统和可读介质
US8060329B2 (en) Display-device inspection apparatus and inspection method
CN116226487A (zh) 一种基于图形识别的数据大屏可视化方法及系统
CN109887054A (zh) 显示地图的方法和装置
CN115984875A (zh) 一种硬笔楷书临摹作品的笔画相似性评价方法及系统
WO2022267379A1 (zh) 一种病理图像处理及显示系统、客户端、服务端及介质
CN113255499B (zh) 一种变电站电缆二次回路数字化自动建模方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20110615

Assignee: Hubei Yanchu Heyi Network Technology Co.,Ltd.

Assignor: CENTRAL CHINA NORMAL University

Contract record no.: X2023980042875

Denomination of invention: A Method for Identifying Dynamic Relationships in Graphics

Granted publication date: 20130130

License type: Common License

Record date: 20231007

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20110615

Assignee: Wuhan Hezhongxing Trading Co.,Ltd.

Assignor: CENTRAL CHINA NORMAL University

Contract record no.: X2023980052458

Denomination of invention: A method for identifying dynamic relationships in graphics

Granted publication date: 20130130

License type: Common License

Record date: 20231219