一种圆规教具及其绘图实现方法 |
|||||||
申请号 | CN201710430544.5 | 申请日 | 2017-06-09 | 公开(公告)号 | CN107244165A | 公开(公告)日 | 2017-10-13 |
申请人 | 浙江新盛蓝科技有限公司; | 发明人 | 朱春平; | ||||
摘要 | 本 发明 公开了网络教学教具技术领域的一种圆规教具及其绘图实现方法,包括圆规体,所述圆规体的底部左右两端分别连接有圆规体左脚和圆规体右脚,所述圆规体左脚的底端设有圆心针,所述圆规体右脚的底部与圆规体右脚画笔连接,本发明可以根据需要精确调 节圆 的半径,圆规可以进行移动和旋转,满足画圆形的要求。作为教具使用,形象逼真,方便存储,吸引学生的注意 力 ,效果很好,节省教师制作教具的时间,提高教师工作效率,具有广阔的市场前景。 | ||||||
权利要求 | 1.一种圆规教具,包括圆规体(1),其特征在于:所述圆规体(1)的底部左右两端分别连接有圆规体左脚(2)和圆规体右脚(3),所述圆规体左脚(2)的底端设有圆心针(4),所述圆规体右脚(3)的底部与圆规体右脚画笔(5)连接。 |
||||||
说明书全文 | 一种圆规教具及其绘图实现方法技术领域[0001] 本发明涉及网络教学教具技术领域,具体为一种圆规教具及其绘图实现方法。 背景技术[0002] 圆规系绘圆用的绘图工具。圆规由笔头、转轴、圆规支腿、格尺、折叶、笔体、笔尖、圆规尖、小耳构成,它的笔头的下端插入连接在笔体的上端,笔体的下端螺纹连接在笔尖的上端,小耳的平齐端焊接在圆规支腿的外侧中间,圆规支腿的下端夹紧连接在圆规尖的上端。其特征是:笔体的一面粘贴连接在折叶的一面,折叶的另一面粘贴连接在格尺的一端中间,笔体的夹缝上端两侧插入连接在转轴的两端,转轴的轴体穿套连接在圆规支腿的上。 [0003] 以往教师在制作传统教具上,花费了太多的时间和经历,却没达到预期理想的效果。而且做出来的教具大都是一次性的,不能二次利用,浪费人力、物力。为此,我们提出了一种圆规教具及其绘图实现方法投入使用,以解决上述问题。 发明内容[0004] 本发明的目的在于提供一种圆规教具及其绘图实现方法,以解决上述背景技术中提出的以往教师在制作传统教具上,花费了太多的时间和经历,却没达到预期理想的效果。而且做出来的教具大都是一次性的,不能二次利用,浪费人力、物力的问题。 [0005] 为实现上述目的,本发明提供如下技术方案:一种圆规教具,包括圆规体,所述圆规体的底部左右两端分别连接有圆规体左脚和圆规体右脚,所述圆规体左脚的底端设有圆心针,所述圆规体右脚的底部与圆规体右脚画笔连接。 [0006] 优选的,一种圆规教具绘图实现方法,该圆规教具绘图实现方法的具体步骤如下: [0007] S1:使用Buffer:TBitmap32画布上产生一个圆规的模型,其中rbValue:TRulerBase为圆规定义实现所需要的数据; [0008] S2:然后用户用鼠标拖动圆规画笔,利用圆规体右脚画笔与圆心针的距离配合刻度尺,设定所画圆的半径; [0010] 优选的,所述步骤S1中,圆规教具包含圆规实现的基础数据,具体为: [0011] [0012] 优选的,所述步骤S1中,圆规模型具体实现是通过定义一个过程procedure LRulerCompasses(Sender:TObject;Buffer:TBitmap32;rbValue:TRulerBase)实现;通过rbValue.ArrayPolygons[0]实现圆规体;通过rbValue.ArrayPolygons[1]实现圆规体左角;通过rbValue.ArrayPolygons[2]实现圆规体右角;通过new1:=MakePoint(RotatePoint(FixedPoint(rbValue.pt3),FixedPoint(ptCenter),rbValue.angle));new2:=MakePoint(RotatePoint(FixedPoint(rbValue.pt4),FixedPoint(ptCenter),rbValue.angle));cm:=(rbValue.pt4.X-rbValue.pt3.X)/GetDeviceCaps(Buffer.Handle,LOGPIXELSX)*25.4;self.SimpleTextOnline(Buffer,new1,new2,rbValue.Color,Format('r=%.1f',[cm]),25,0.5)实现圆的半径;通过SetLength(rbValue.ArrayPolygons[3],6)实现圆规体右角画笔;通过ellipseRect:=FloatRect((rbValue.pt3.X-10),(rbValue.pt3.Y-10),(rbValue.pt3.X+10),(rbValue.pt3.Y+ 10));ellipseArray:=GR32_Misc.GetEllipsePoints(ellipseRect);SimpleLine32(Buffer,ellipseArray,GR32.SetAlpha(rbValue.PenColor,80+offAColor),1)实现圆规针;通过if GetLengthFrom2Point(rbValue.arc1,rbValue.arc2)<15then BeginSimpleLine32(DestBuffer,[FixedPoint(rbValue.arc1),FixedPoint(rbValue.arc2)],rbValue.PenColor,2)实现画弧。当有mousemove事件,当鼠标在圆规体,圆规体左脚,圆规体右脚上时,LPaint(Sender,Bitmap)会改变模型对应部分的颜色。 [0013] 优选的,所述步骤S2中,利用鼠标实现实现圆规的计算斜率、移动、改变半径、作图的过程是通过if(LMouseIsPush)and(GetRulerBase.RulerBaseType=rbtCompasses)and(not GetRulerBase .DrawCreated)then选择圆规工具图标。SelectedRulerBase.GetAngleFromPt1ToPt2计算斜率;if(__ArrayIndex=4)or(__ArrayIndex=5)then圆规作图;if(__ArrayIndex=1)or(__ArrayIndex=2)then移动; if__ArrayIndex=3then改变圆规半径尺寸。 [0014] 优选的,所述步骤S3中,圆规教具实现通过function PointInPolygon函数实现判断像素点是否在多边形内,具体代码实现如下: [0015] [0016] [0017] 优选的,所述步骤S3中,圆规教具定义了像素点的旋转函数,具体代码实现如下: [0018] [0019] [0020] 旋转前的坐标为(pt.X;pt.Y)。pt.X:=pt.X-origin.X;pt.Y:=pt.Y-origin.Y;旋转后的坐标为(result.X;result.Y)。result.X:=round((pt.X*cosAng)+(pt.Y*sinAng)+origin.X);result.Y:=round((pt.Y*cosAng)-(pt.X*sinAng)+origin.Y)。 (origin.X;origin.Y)为原点坐标。 [0021] 与现有技术相比,本发明的有益效果是:本发明可以根据需要精确调节圆的半径,圆规可以进行移动和旋转,满足画圆形的要求。作为教具使用,形象逼真,方便存储,吸引学生的注意力,效果很好,节省教师制作教具的时间,提高教师工作效率,具有广阔的市场前景。附图说明 [0022] 图1为本发明结构示意图。 [0023] 图中:1圆规体、2圆规体左脚、3圆规体右脚、4圆心针、5圆规体右脚画笔。 具体实施方式[0024] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。 [0025] 请参阅图1,本发明提供一种技术方案:一种圆规教具及其绘图实现方法,具体的,用户点击选中圆规教具图标,使用Buffer:TBitmap32画布上产生一个圆规的模型,其中rbValue:TRulerBase为圆规定义实现所需要的数据。然后用户用鼠标拖动圆规画笔,设定所画圆的半径,旋转function RotatePoint函数操作圆规画圆形。圆规包含圆规体1、圆规体左脚2、圆规体右脚3、圆规体右脚画笔5、圆心针4,圆心在圆心针4上,圆规体1与圆规体左脚2和圆规体右脚3连接,圆规体右脚画笔5和圆心针4在圆规体右脚3上,圆规体右脚画笔5与圆心针4的距离为圆规半径。所述圆规体右脚画笔5与圆心针4的距离有刻度尺,可以标识圆的半径。可以根据需要精确调节圆的半径,圆规可以进行移动,通过function RotatePoint函数实现像素旋转,满足画圆形的要求。 [0026] 首先,通过定义type进行类型定义,包含TRulerBaseType=rbtCompasses圆规类型,TRulerBaseAction=(rbaNone,rbaMove,rbaResize,rbaClose)四个操作事件类型。定义包含圆规实现的基础数据,具体基础数据为, [0027] [0028] [0029] 圆规的模型通过定义一个过程实现,这个过程是procedure LRulerCompasses(Sender:TObject;Buffer:TBitmap32;rbValue:TRulerBase);通过rbValue.ArrayPolygons[0]实现圆规体;通过rbValue.ArrayPolygons[1]实现圆规体左角;通过rbValue.ArrayPolygons[2]实现圆规体右角;通过new1:=MakePoint(RotatePoint(FixedPoint(rbValue.pt3),FixedPoint(ptCenter),rbValue.angle)); new2:=MakePoint(RotatePoint(FixedPoint(rbValue.pt4),FixedPoint(ptCenter),rbValue.angle));cm:=(rbValue.pt4.X-rbValue.pt3.X)/GetDeviceCaps(Buffer.Handle,LOGPIXELSX)*25.4;self.SimpleTextOnline(Buffer,new1,new2,rbValue.Color,Format('r=%.1f',[cm]),25,0.5)实现半径;通过SetLength(rbValue.ArrayPolygons[3],6)实现圆规体右角画笔;通过ellipseRect:=FloatRect((rbValue.pt3.X-10),(rbValue.pt3.Y-10),(rbValue.pt3.X+10),(rbValue.pt3.Y+ 10));ellipseArray:=GR32_Misc.GetEllipsePoints(ellipseRect);SimpleLine32(Buffer,ellipseArray,GR32.SetAlpha(rbValue.PenColor,80+offAColor),1)实现圆规针;通过if GetLengthFrom2Point(rbValue.arc1,rbValue.arc2)<15then [0030] Begin [0031] SimpleLine32(DestBuffer,[FixedPoint(rbValue.arc1),FixedPoint(rbValue.arc2)],rbValue.PenColor,2)实现画弧。当有mousemove事件,当鼠标在圆规体,圆规体左脚,圆规体右脚上时,LPaint(Sender,Bitmap)会改变颜色。 [0032] 画圆时,通过判断语句为真时,选择圆规教具,即ifSelectedRulerBase.RulerBaseType=rbtCompasses then{圆规}。这时,开始在屏幕画布上画出一个圆规的模型,当判断语句为真时,即if(SelectedRulerBase.DrawCreated)and(__RulerBaseAction=rbaResize)then SelectedRulerBase.GetAngleFromPt1ToPt2;计算出Point1,point2的斜率,当满足if(SelectedRulerBase.DrawCreated)and(__RulerBaseAction=rbaMove)为真,并且if(__ArrayIndex=4)or(__ArrayIndex=5)也为真,此时圆规开始作图。SelectedRulerBase.arc2:=MakePoint(RotatePoint(FixedPoint (SelectedRulerBase.pt4),FixedPoint(SelectedRulerBase.pt3), SelectedRulerBase.angle))。 [0033] 当开始旋转圆规画圆时,素点的旋转函数function RotatePoint实现像素点旋转。function RotatePoint(pt,origin:TFixedPoint;const radians:single):TFixedPoint;旋转前的坐标为(pt.X;pt.Y),原点坐标为(origin.X;origin.Y),旋转后的坐标为(result.X;result.Y),其中result.X:=round((pt.X*cosAng)+(pt.Y*sinAng)+origin.X);result.Y:=round((pt.Y*cosAng)-(pt.X*sinAng)+origin.Y);当鼠标弹起后,画圆结束LRulerCompasses(Sender,Buffer,rbValue)。 |