CN105701849B - 一种模拟圆规实现绘制圆的方法 - Google Patents
一种模拟圆规实现绘制圆的方法 Download PDFInfo
- Publication number
- CN105701849B CN105701849B CN201610121290.4A CN201610121290A CN105701849B CN 105701849 B CN105701849 B CN 105701849B CN 201610121290 A CN201610121290 A CN 201610121290A CN 105701849 B CN105701849 B CN 105701849B
- Authority
- CN
- China
- Prior art keywords
- compasses
- control
- circle
- model
- point
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09B—EDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
- G09B23/00—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes
- G09B23/02—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for mathematics
- G09B23/04—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for mathematics for geometry, trigonometry, projection or perspective
Landscapes
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Mathematical Optimization (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Geometry (AREA)
- Algebra (AREA)
- Business, Economics & Management (AREA)
- Educational Administration (AREA)
- Educational Technology (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供一种模拟圆规实现绘制圆的方法,包括:10、创建绘图工程,定义一窗口作为画布窗口,在画布窗口上添加画布控件,确定操作接口;20、确定功能操作;30、建立圆规数学几何图形模型,确定圆规数学几何图形模型中各个顶点的坐标信息;40、确定圆规数学几何图形模型的控制区域;50、根据各个顶点的坐标信息填充及绘制出圆规数学几何图形模型,并构建出控制区域,判断操作点是否满足相应的控制条件,若满足,则在不同的控制区域内进行相应的功能操作;否则,不操作;60、根据圆规数学几何图形模型提供的圆心及半径大小,并结合绘图工具完成圆的绘制。本发明是基于编程工具实现虚拟圆规画圆,达到直观、易学易用的教学目的。
Description
技术领域
本发明涉及一种绘制圆的方法,尤其涉及一种模拟圆规实现绘制圆的方法。
背景技术
常规的教学方法是黑板和粉笔,当今是信息化时代,电脑及手机移动设备给人们的生活、学习方面带了很多便捷;因此,也产生了很多教学软件、网络授课,那么就急需一些授课工具作为基石。传统绘制圆的方式通常都是通过圆规进行绘制的,在教学过程中使用起来不太方便,故而,需提供一种模拟圆规绘制圆的工具,方便老师进行网络教学。
发明内容
本发明要解决的技术问题,在于提供一种模拟圆规实现绘制圆的方法,可以基于编程实现虚拟圆规绘制圆,达到直观形象、易学易用的教学目的。
本发明是这样实现的:
一种模拟圆规实现绘制圆的方法,包括如下步骤:
步骤10、创建绘图工程,定义一窗口作为画布窗口,在该画布窗口上添加画布控件,并确定所述画布控件上的操作接口;
步骤20、确定圆规所要实现的功能操作,所述功能操作包括对圆规整体进行移动、对圆规的半径大小进行拉伸、对圆规进行旋转及对圆进行绘制;
步骤30、确定圆规数学几何图形模型的结构,通过所述操作接口获取一矩形的位置信息,根据该矩形的位置信息及所述圆规数学几何图形模型的结构计算出所述圆规数学几何图形模型中各个顶点的坐标信息;
步骤40、确定所述圆规数学几何图形模型的控制区域,所述控制区域包括移动控制区域、拉伸控制区域、旋转控制区域及绘制控制区域;
步骤50、根据各个顶点的坐标信息填充及绘制出所述圆规数学几何图形模型,并构建出所述控制区域,判断操作点是否位于所述控制区域内,即判断操作点是否满足移动操作控制条件、拉伸操作控制条件、旋转操作控制条件或绘制操作控制条件,若满足,则在不同的控制区域内进行相应的功能操作;若不满足,则不进行任何操作;
步骤60、根据所述圆规数学几何图形模型提供的圆心及半径大小,并结合绘图工具完成圆的绘制。
进一步地,所述步骤50中在不同的控制区域内进行相应的功能操作,具体如下:
如果操作点满足移动操作控制条件,则通过移动所述矩形的位置对圆规整体进行移动;如果操作点满足拉伸操作控制条件,则通过拉伸所述矩形的位置对圆规的半径大小进行拉伸;如果操作点满足旋转操作控制条件,则通过旋转所述矩形的位置对圆规进行旋转;如果操作点满足绘制操作控制条件,则对圆进行绘制。
进一步地,所述操作接口为鼠标操作接口或触控操作接口。
本发明具有如下优点:本发明可以基于编程工具实现虚拟圆规绘制圆,达到直观形象、易学易用的教学目的。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明一种模拟圆规实现绘制圆的方法执行流程图。
图2为圆规数学几何模型图。
图3为本发明最终构建出来的圆规图。
图4为本发明的圆规绘制圆过程示意图。
图5为本发明的第一种拉伸操作效果示意图。
图6为本发明的第二种拉伸方式控制区域及旋转控制区域示意图。
图7为本发明的第二种拉伸操作效果示意图。
图8为本发明的整体移动效果示意图。
图9为本发明的旋转效果示意图。
具体实施方式
为使得本发明更明显易懂,现以一优选实施例,并配合附图作详细说明如下。
本发明是基于编程实现,只要是面向对象任何编程语言都可以作为本发明的实现工具。本实施例中采用Delphi作为编程工具,并结合GDI+绘图库进行实现,当然如果采取其他的开发语言或者工具也可以实现本发明的内容,只是开发语言和工具不同而已,而思路方法还是一样的。
如图1所示,本发明的一种模拟圆规实现绘制圆的方法,包括如下步骤:
步骤10、创建绘图工程,定义一窗口作为画布窗口,在该画布窗口上添加画布控件,并确定所述画布控件上的操作接口(画布控件上一般会有很多响应事件的回调函数,比如说:鼠标、键盘、多点触控、手势等,我们称为这些回调函数为操作接口;如果我们要实现某个响应事件,比如说鼠标,只要把鼠标相应回调函数的实现部分进行完善其功能代码即可,实现过程中用到的鼠标位置等参数信息,都是由响应事件的回调函数直接得到;这边的操作接口为鼠标或触控这两个事件的响应函数操作接口);具体说明如下:
(1)建立绘图工程,定义一窗口作为画布窗口,在该画布窗口上放置画布控件:TPaintbox,其中,画布控件也可以不用TPaintbox,只要有绘图设备句柄,能支持GDI及GDI+绘图机制的任何控件都可以;
(2)定义在画布窗口上操作的基本操作接口,所述操作接口为鼠标操作接口或触控操作接口;
鼠标操作:按下(mousedown)、移动(mousemove)、弹开(mouseup),如下:
procedure MouseDown(Sender:TObject;
Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
procedure MouseMove(Sender:TObject;
Shift:TShiftState;X,Y:Integer);
procedure MouseUp(Sender:TObject;
Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
触控操作:按下(touchdown)、移动(touchmove)、弹开(touchup),这边按下、移动、弹开的入口函数都一样,如下:
procedure WMTOUCH(var Msg:TMessage);message WM_TOUCH;
具体是什么动作,由系统传过来的消息体TMessage及系统相关API可以获取,本发明要说明的是从这些基本入口函数(无论是鼠标还是触控)要获取画布设备传过来的原始坐标信息;
步骤20、确定圆规所要实现的功能操作,所述功能操作包括对圆规整体进行移动、对圆规的半径大小进行拉伸、对圆规进行旋转及对圆进行绘制;
步骤30、确定圆规数学几何图形模型的结构,通过所述操作接口获取一矩形的位置信息,根据该矩形的位置信息及所述圆规数学几何图形模型的结构计算出所述圆规数学几何图形模型中各个顶点的坐标信息,圆规数学几何模型见图2;而图3为本发明最终构建出来的圆规图;本步骤中如果没有特别说明,那么涉及到的长度衡量单位都为设备的基本单位,比如为显示器设备,那么其基本单位为像素;本步骤具体如下:
步骤301、定义圆规数学几何图形模型的输入参数为矩形的四个点A、B、C、D,按图2所示构成的矩形,矩形的GDI+定义为:
RectOut:TGPRectF;
那么有:
AD=RectOut.Width;
AB=RectOut.Height;
PointA.X=RectOut.X;
PointA.Y=RectOut.Y;
PointB.X=RectOut.X;
PointB.Y=RectOut.Y+RectOut.Height;
PointC.X=RectOut.X+RectOut.Width;
PointC.Y=RectOut.Y+RectOut.Height;
PointD.X=RectOut.X+RectOut.Width;
PointD.Y=RectOut.Y;
步骤302、定义圆弧FEG(E为AD的中点),弦长FG=30,对应的圆心角为120度,那么就可以推算出对应的半径为:10*sqrt(3),sqrt(3)为3的开根号。即:
PointE.X=RectOut.X+RectOut.Width/2;
PointE.Y=RectOut.Y;
圆心(PointCenterFEG)的坐标为:
PointCenterFEG.X=PointE.X;
PointCenterFEG.Y=PointE.Y+10*sqrt(3);
算出圆弧的外接矩形(RoundRect):
RoundRect.X=PointCenterFEG.X-10*sqrt(3);
RoundRect.Y=PointCenterFEG.Y-10*sqrt(3);
RoundRect.Width=2*10*10*sqrt(3);
RoundRect.Height=2*10*10*sqrt(3);
步骤303、圆弧旁边的两条线:FF1、GG1两条线的端点坐标:
(1)算出辅助点E3,即HK的中点:
PointE3.X=PointE.X;
规定:
PointE3.Y=PointE.Y+40;
(2)算出点F坐标:
由于FG=30,因此:
PointF.X=PointE.X-15;
容易算出圆心到弦的距离为:5*sqrt(3),因此:
PointF.Y=PointCenterFEG.Y-5*Sqrt(3);
(3)算出点F1坐标:
规定:
PointF1.X=PointE3.X-10;
PointF1.Y=PointE3.Y;
(4)算出点G坐标:
规定:
PointG.X=PointE.X+15;
PointG.Y=PointCenterFEG.Y-5*Sqrt(3);
(5)算出点G1坐标:
PointG1.X=PointE3.X+10;
PointG1.Y=PointE3.Y;
步骤304、算出H、I、J、K四个点坐标:
(1)算出点H坐标:
PointH.X=PointE3.X-10-30;
PointH.Y=PointE3.Y;
(2)算出点I坐标:
PointI.X=PointE4.X-10-15;
PointI.Y=PointE4.Y;
(3)算出点J坐标:
PointJ.X=PointE4.X+10+15;
PointJ.Y=PointE4.Y;
(4)算出点K坐标:
PointK.X=PointE3.X+10+30;
PointK.Y=PointE3.Y;
步骤305、算出“左端脚支”相关坐标点信息:
(1)算出点Z坐标:
算出辅助点E4,规定梯形HIJK的高度为50,因此有:
PointE4.X=PointE3.X;
PointE4.Y=PointE3.Y+50;
规定,点Z为梯形HIJK的中心点,因此:
PointZ.X=(PointE3.X+PointE4.X)/2;
PointZ.Y=(PointE3.Y+PointE4.Y)/2;
(2)算出点V坐标:
规定:BV=45,因此有:
PointV.X=RectOut.X;
PointV.Y=RectOut.Y+RectOut.Height-45;
(3)算出点V1坐标:
规定:BV1=45,因此有:
PointV1.X=RectOut.X+45;
PointV1.Y=RectOut.Y+RectOut.Height;
(4)算出点Y坐标:
算出向量:VV1:
Vector1.X=PointV1.X-PointV.X;
Vector1.Y=PointV1.Y-PointV.Y;
向量单位化:
Len:=Sqrt(Sqr(Vector1.X)+Sqr(Vector1.Y));
Vector1.X=Vector1.X/Len;
Vector1.Y=Vector1.Y/Len;
规定VY长度等于20,因此:
PointY.X=PointV.X+Vector1.X*20;
PointY.Y=PointV.Y+Vector1.Y*20;
(5)算出点V2、V3坐标:
规定:V2V3平行于VY,因此:
PointV2.X=PointZ.X+Vector1.X*20/2;
PointV2.Y=PointZ.Y+Vector1.Y*20/2;
PointV3.X=PointZ.X-Vector1.X*20/2;
PointV3.Y=PointZ.Y-Vector1.Y*20/2;
(6)算出点X坐标:
规定:
PointX.X=PointY.X-10;
PointX.Y=PointY.Y;
(7)算出点O坐标:
PointO.X=PointX.X;
PointO.Y=PointV1.Y;
步骤306、算出“右端脚支”相关坐标点信息:
(1)算出点V6坐标:
规定:CV6=45,那么V6与V关于中轴线EV7对称,则有:
PointV6.X=PointV.X+RectOut.Width;
PointV6.Y=PointV.Y;
(2)算出点R坐标:
规定:V1与R关于中轴线EV7对称,则有:
PointR.X=PointE.X+(PointE.X-PointV1.X);
PointR.Y=PointV1.Y;
(3)算出点Z3坐标:
规定:Z3与X关于中轴线EV7对称,则有:
PointZ3.X=PointE.X+(PointE.X-PointY.X);
PointZ3.Y=PointY.Y;
(4)算出点V4、V5坐标:
规定:V4V5平行于RV6,长度与VY相等都是20
计算向量V6R:
Vector2.X=PointR.X-PointV6.X;
Vector2.Y=PointR.Y-PointV6.Y;
向量单位化:
Len:=Sqrt(Sqr(Vector2.X)+Sqr(Vector2.Y));
Vector2.X=Vector2.X/Len;
Vector2.Y=Vector2.Y/Len;
因此,V4、V5坐标为:
PointV4.X=PointZ.X+Vector2.X*20/2;
PointV4.Y=PointZ.Y+Vector2.Y*20/2;
PointV5.X=PointZ.X-Vector2.X*20/2;
PointV5.Y=PointZ.Y-Vector2.Y*20/2;
(5)算出点T坐标:
规定:PointT.Y=PointY.Y-25;
以PointZ3和PointV4为端点的直线为:A1*x+B1*y+C1=0,则有:
A1=PointV4.Y-PointZ3.Y;
B1=-(PointV4.X-PointZ3.X);
C1=(PointV4.X-PointZ3.X)*PointZ3.Y-(PointV4.Y-PointZ3.Y)*PointZ3.X;
当y=PointT.Y,带入直线方程,算出PointT.X:
PointT.X=(-C1-B1*PointT.Y)/A1;
(6)算出点R坐标:
规定:
PointR.X=PointT.X;
PointR.Y=PointO.Y;
(7)算出点M、N坐标:
规定:
PointM.X=PointR.X-7;
PointM.Y=PointR.Y-20;
PointN.X=PointR.X+16;
PointN.Y=PointR.Y-15;
(8)算出点Q坐标:
很明显,点Q为直线V5V6与直线MT的交点,这边要解决是已经分别知道两条直线的端点,求其交点:
直线1端点:P1、P2,一般方程为:A1*x+B1*y+C1=0
直线2端点:P3、P4,一般方程为:A2*x+B2*y+C2=0
那么有:
A1=P2.Y-P1.Y;
B1=-(P2.X-P1.X);
C1=(P2.X-P1.X)*P1.Y-(P2.Y-P1.Y)*P1.X;
A2=P4.Y-P3.Y;
B2=-(P4.X-P3.X);
C2=(P4.X-P3.X)*P3.Y-(P4.Y-P3.Y)*P3.X;
那么交点坐标为:
X=(B1*C2-B2*C1)/(A1*B2-B1*A2);
Y=(A2*C1-A1*C2)/(A1*B2-A2*B1);
采取如上方法,即可算出点Q的坐标PointQ。
(9)算出点L坐标:
规定,MT=QL
算出辅助向量:
Vector3.X=PointT.X-PointM.X;
Vector3.Y=PointT.Y-PointM.Y;
那么有:
PointL.X=PointQ.X+Vector3.X;
PointL.Y=PointQ.Y+Vector3.Y;
(10)算出点P坐标:
规定:LP=MN,LP平行于MN
算出辅助向量:
Vector4.X=PointN.X-PointM.X;
Vector4.Y=PointN.Y-PointM.Y;
因此有:
PointP.X=PointL.X+Vector4.X;
PointP.Y=PointL.Y+Vector4.Y;
(11)算出点S、U坐标:
类似上一步有:
PointS.X=PointQ.X+Vector4.X;
PointS.Y=PointQ.Y+Vector4.Y;
PointU.X=PointT.X+Vector4.X;
PointU.Y=PointT.Y+Vector4.Y;
(12)算出点R1、Z1、Z2:
R1为TU的中点,有:
PointR1.X=(PointT.X+PointU.X)/2;
PointR1.Y=(PointT.Y+PointU.Y)/2;
计算辅助向量:
Vector5.X=PointQ.X-PointT.X;
Vector5.Y=PointQ.Y-PointT.Y;
规定:
PointZ2.X=PointR1.X+Vector5.X*0.1;
PointZ2.Y=PointR1.Y+Vector5.Y*0.1;
PointZ1.X=PointR1.X+Vector5.X*0.9;
PointZ1.Y=PointR1.Y+Vector5.Y*0.9;
步骤40、确定所述圆规数学几何图形模型的控制区域,所述控制区域包括移动控制区域、拉伸控制区域、旋转控制区域及绘制控制区域;具体有:
(1)绘制控制区域:LMRCPL扣除QTZ2USZ1Q,控制此区域可以进行绘制操作;
(2)第一种拉伸方式的拉伸控制区域:V4TZ2USZ1QV5V4扣除HIJKH;
(3)扣除(1)、(2)的区域,剩下的区域都是移动控制区域;
(4)旋转控制区域,见图6的AA;
(5)第二种拉伸方式的拉伸控制区域,见图6的BB;
定义控制效果,具体为:
(1)移动效果为整体移动圆规的位置,见图8;
(2)拉伸效果为控制圆规的半径大小;
第一种拉伸方式,见图5;
第二种拉伸方式,见图7;
(3)旋转效果为改变圆规开始绘制的绘制起点,见图5;
(4)绘制效果为绘制过程的控制,见图4;
步骤50、使用编程工具,根据各个顶点的坐标信息填充及绘制出所述圆规数学几何图形模型,并构建出所述控制区域,判断操作点是否位于所述控制区域内,即判断操作点是否满足移动操作控制条件、拉伸操作控制条件、旋转操作控制条件或绘制操作控制条件,若满足,则在不同的控制区域内进行相应的功能操作;若不满足,则不进行任何操作;具体包括:
步骤501、填充相应的区域及绘制相应的区域;
(1)填充顶上的弧形区域FEG:
g.FillPath(Brush,FoPathFEG);
(2)填充顶上的小矩形区域FF1G1GF:
g.FillPath(Brush,FoPathFF1G1GF);
(3)绘制顶上的小矩形区域FF1G1GF:
g.DrawPath(Pen,FoPathFF1G1GEF);
(4)填充及绘制区域VXYV2V3V:
g.FillPath(Brush,FoPathVXYV2V3V);
g.DrawPath(Pen,FoPathVXYV2V3V);
在本例中,(1)-(4)的填画刷(Brush)颜色为(填充色):RGB(277,277,277),笔(Pen)颜色为黑色:RGB(0,0,0);
(5)填充及绘制区域XOYXV:
g.FillPath(Brush,FoPathXOYXV);
g.DrawPath(Pen,FoPathXOYXV);
此处的画刷颜色为:RGB(180,180,180)
(6)填充及绘制右边的“画笔”:
填充及绘制区域RMLPNR,填充色RGB(227,277,277):
g.FillPath(Brush,FoPathRMLPNR);
g.DrawPath(Pen,FoPathRMLPNR);
填充及绘制区域,填充色RGB(76,190,246)
g.FillPath(Brush,FoPathQMNSQ);
g.DrawPath(pen,FoPathQMNSQ);
(7)填充及绘制区域TV4V5QT,填充色为RGB(227,227,227):
g.FillPath(Brush,FoPathTV4V5QT);
g.DrawPath(Pen,FoPathTV4V5QT);
(8)填充及绘制区域HIJKH,填充色为RGB(160,160,160)
g.FillPath(Brush,FoPathHIJKH);
g.DrawPath(Pen,FoPathHIJKH);
(9)绘制顶上的旋转控制圆圈及“右脚边”的拉伸控制点绘制旋转点(图6的AA):
RectF1.X=RotatePointAttr.X-10;
RectF1.Y=RotatePointAttr.Y-10;
RectF1.Width=20;
RectF1.Height=20;
g.DrawEllipse(Pen,RectF1);
其中:
RotatePointAttr.X=PointE.X;
RotatePointAttr.Y=PointE.Y-15;
绘制拉伸点(图6的BB):
RectF2.X=ExtendPointAttr.X-10;
RectF2.Y=ExtendPointAttr.Y-10;
RectF2.Width=20;
RectF2.Height=20;
g.DrawEllipse(Pen,RectF2);
其中:
ExtendPointAttr.X=PointR.X+40;
ExtendPointAttr.Y=PointV.Y;
(10)用drawstring函数将半径大小(PointO与PointR的距离),标注在点PointZ上;
特别要注意的是:步骤502每个内部步骤之间的顺序不能乱,要按本发明提所描述得来执行,否则得到的不会是例图中的“圆规”,而将是另类“长相”的“圆规”;
步骤502、构建控制区域:
(1)构建区域FF1G1GEF:
FoPathFF1G1GEF.StartFigure;
FoPathFF1G1GEF.AddLine(PointF,PointF1);
FoPathFF1G1GEF.CloseFigure;
FoPathFF1G1GEF.StartFigure;
FoPathFF1G1GEF.AddLine(PointG,PointG1);
FoPathFF1G1GEF.CloseFigure;
FoPathFF1G1GEF.AddArc(RoundRect,-30,-120);-30为圆弧起始边角度,-120为圆弧圆心角;
(2)构建区域FEGF:
FoPathFEG.AddArc(RoundRect,-30,-120);-30为圆弧起始边角度,-120为圆弧圆心角;
(3)构建区域FF1G1GF:
FoPathFF1G1GF.AddLine(PointF,PointF1);
FoPathFF1G1GF.AddLine(PointF1,PointG1);
FoPathFF1G1GF.AddLine(PointG1,PointG);
FoPathFF1G1GF.AddLine(PointG,PointF);
(4)构建区域HIJKH:
FoPathHIJKH.AddLine(PointH,PointI);
FoPathHIJKH.AddLine(PointI,PointJ);
FoPathHIJKH.AddLine(PointJ,PointK);
FoPathHIJKH.AddLine(PointK,PointI);
(5)构建路径VXYV2V3V:
FoPathVXYV2V3V.AddLine(PointV,PointX);
FoPathVXYV2V3V.AddLine(PointX,PointY);
FoPathVXYV2V3V.AddLine(PointY,PointV2);
FoPathVXYV2V3V.AddLine(PointV2,PointV3);
FoPathVXYV2V3V.AddLine(PointV3,PointV);
(6)构建路径RMLPNR:
FoPathRMLPNR.AddLine(PointR,PointM);
FoPathRMLPNR.AddLine(PointM,PointL);
FoPathRMLPNR.AddLine(PointL,PointP);
FoPathRMLPNR.AddLine(PointP,PointN);
FoPathRMLPNR.AddLine(PointN,PointR);
(7)构建路径QMNSQ:
FoPathQMNSQ.AddLine(PointQ,PointM);
FoPathQMNSQ.AddLine(PointM,PointN);
FoPathQMNSQ.AddLine(PointN,PointS);
FoPathQMNSQ.AddLine(PointS,PointQ);
(8)构建路径TV4V5QZ1SUZ2T:
FoPathTV4V5QZ1SUZ2T.AddLine(PointT,PointV4);
FoPathTV4V5QZ1SUZ2T.AddLine(PointV4,PointV5);
FoPathTV4V5QZ1SUZ2T.AddLine(PointV5,PointQ);
FoPathTV4V5QZ1SUZ2T.AddBezier(PointQ,PointZ1,PointZ1,PointS);
FoPathTV4V5QZ1SUZ2T.AddLine(PointS,PointU);
FoPathTV4V5QZ1SUZ2T.AddBezier(PointU,PointZ2,PointZ2,PointT);
AddBezier:添加贝塞尔曲线;
步骤503、实现步骤102定义的鼠标、触控操作,具体如下:
如果操作点满足移动操作控制条件,则通过移动所述矩形的位置对圆规整体进行移动;如果操作点满足拉伸操作控制条件,则通过拉伸所述矩形的位置对圆规的半径大小进行拉伸;如果操作点满足旋转操作控制条件,则通过旋转所述矩形的位置对圆规进行旋转;如果操作点满足绘制操作控制条件,则对圆进行绘制。
无论是鼠标还是触控操作,从原理上来说都是一样的,都是接收到画布设备底层传过来的点Qx(X,Y),在此步骤都涉及到前后两点:Q1、Q2,后一点减前一点:
Q2-Q1=(Q2.X-Q1.X,Q2.Y-Q1.Y)=(dx,dy)。
要判断点Qx(X,Y)落在步骤40所描述的某个控制区域,例如某个路径Path***,要判断该点是否在该路径区域上,则通过如下方式判断即可:
如果该点落在该控制区域内,那么下面条件为真:
Path***.IsVisible(X,Y)
(1)判断满足旋转控制操作条件为:点Q1与点RotatePointAttr的距离小于设定的经验值,在本案例中经验值为:10,该值一般为图6中AA圆圈的半径,图9的效果,即:
distance(PointQ1,RotatePointAttr)<10;
在该操作中,圆心点PointO固定不变,旋转角度为角Q1OQ2,外围矩形顶点A、B、C、D围绕点O旋转,已知Q1、Q、Q2三点坐标,容易算出角Q1OQ2大小;比如说Q1、Q、Q2三点依次连接构成一个三角形,那么就可以通过三角形的余弦定理算出角Q1OQ2的大小。
定:Q1(X1,Y1),Q2(X2,Y2),O(X0,Y0),角Q1OQ2的大小为a,Q1绕着旋转中心点O旋转a角度得到Q2;
由旋转公式,得:
X2=(X1-X0)*cos(a)-(Y1-Y0)*sin(a)+X0;
Y2=(X1-X0)*sin(a)+(Y1-Y0)*cos(a)+Y0;
由上面旋转公式可以算出旋转后A、B、C、D坐标;
(2)类似(1),那么判断满足通过图中BB区域进行拉伸,即图7效果的条件为:
distance(PointQ1,ExtendPointAttr)<10
在该操作中线段AB的中点E在整个过程中为定点,A、B两点的Y坐标没变,旋转后A、B、C、D四点的坐标变换为:
PointA.X=PointA.X-dx;
PointB.X=PointB.X-dx;
PointB.Y=PointB.Y+dy;
PointC.X=PointC.X+dx;
PointC.Y=PointC.Y+dy;
PointD.X=PointD.X+dx;
(3)图5为操作效果,控制条件为:
满足条件:FoPathTV4V5QZ1SUZ2T.IsVisible(X,Y)
不满足条件:FoPathHIJKH.IsVisible(X,Y)
操作的前后两点,后一点减前一点得:(dx,dy),
在此操作PointA,PointB保持不变
PointC.X=PointC.X+dx;
PointC.Y=PointC.Y+dy;
PointD.X=PointD.X+dx;
PointD.Y=PointD.Y+dy;
(4)图4为绘制圆过程,控制条件为:
FoPathRMLPNR.IsVisible(X,Y)
其控制效果跟(1)是一样的效果,只是在该步骤中多了一步:绘制出圆弧,详细见步骤60;
(5)图8为整体移动操作控制效果,控制条件为:
FoPathFF1G1GEF.IsVisible(X,Y)
或
FoPathFF1G1GF.IsVisible(X,Y)
或
FoPathHIJKH.IsVisible(X,Y)
或
FoPathVXYV2V3V.IsVisible(X,Y)
或
FoPathXOYXV.IsVisible(X,Y)
在该控制中,A、B、C、D,都做了平移;
Point*.X=Point*.X+dx;
Point*.Y=Point*.Y+dy;
步骤60、根据所述圆规数学几何图形模型提供的圆心及半径大小,并结合绘图工具完成圆的绘制,具体说明如下:
上面步骤50描述中提到的绘制过程,每次在画布设备上发生移动过程迭代产生Q1(X1,Y1)、Q2(X2,Y2)及每次都会计算出一个圆心角a,从第一次开始移动算起,对这个圆心角做迭代累加存到变量angle,圆心即点PointO,半径大小即为点PointO与点PointR的距离。有了这些信息,再结合绘图API就可以绘制圆弧了,比如说在本例中使用GDI+库,那么其绘制圆弧的函数为:
g.DrawArc(.......);
不同的图形绘图库绘制圆弧的API调用参数可能会存在差别,但由上面提到参数都可以换算出所需的调用参数。
说明:在步骤50描述中涉及到填充色及绘制颜色,在实际中可以提供相应的方式来修改颜色值,而不是在本案例说明设定的固定值。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (3)
1.一种模拟圆规实现绘制圆的方法,其特征在于:包括如下步骤:
步骤10、创建绘图工程,定义一窗口作为画布窗口,在该画布窗口上添加画布控件,并确定所述画布控件上的操作接口;
步骤20、确定圆规所要实现的功能操作,所述功能操作包括对圆规整体进行移动、对圆规的半径大小进行拉伸、对圆规进行旋转及对圆进行绘制;
步骤30、确定圆规数学几何图形模型的结构,通过所述操作接口获取一矩形的位置信息,根据该矩形的位置信息及所述圆规数学几何图形模型的结构计算出所述圆规数学几何图形模型中各个顶点的坐标信息;
步骤40、确定所述圆规数学几何图形模型的控制区域,所述控制区域包括移动控制区域、拉伸控制区域、旋转控制区域及绘制控制区域;
步骤50、根据各个顶点的坐标信息填充及绘制出所述圆规数学几何图形模型,并构建出所述控制区域,判断操作点是否位于所述控制区域内,即判断操作点是否满足移动操作控制条件、拉伸操作控制条件、旋转操作控制条件或绘制操作控制条件,若满足,则在不同的控制区域内进行相应的功能操作;若不满足,则不进行任何操作;
步骤60、根据所述圆规数学几何图形模型提供的圆心及半径大小,并结合绘图工具完成圆的绘制。
2.根据权利要求1所述的一种模拟圆规实现绘制圆的方法,其特征在于:所述步骤50中在不同的控制区域内进行相应的功能操作,具体如下:
如果操作点满足移动操作控制条件,则通过移动所述矩形的位置对圆规整体进行移动;如果操作点满足拉伸操作控制条件,则通过拉伸所述矩形的位置对圆规的半径大小进行拉伸;如果操作点满足旋转操作控制条件,则通过旋转所述矩形的位置对圆规进行旋转;如果操作点满足绘制操作控制条件,则对圆进行绘制。
3.根据权利要求1所述的一种模拟圆规实现绘制圆的方法,其特征在于:所述操作接口为鼠标操作接口或触控操作接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610121290.4A CN105701849B (zh) | 2016-03-04 | 2016-03-04 | 一种模拟圆规实现绘制圆的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610121290.4A CN105701849B (zh) | 2016-03-04 | 2016-03-04 | 一种模拟圆规实现绘制圆的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105701849A CN105701849A (zh) | 2016-06-22 |
CN105701849B true CN105701849B (zh) | 2019-04-12 |
Family
ID=56222871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610121290.4A Expired - Fee Related CN105701849B (zh) | 2016-03-04 | 2016-03-04 | 一种模拟圆规实现绘制圆的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105701849B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106934844A (zh) * | 2017-03-23 | 2017-07-07 | 深圳市助天使软件技术有限公司 | 一种在计算机上的尺规作图方法 |
CN107244165A (zh) * | 2017-06-09 | 2017-10-13 | 浙江新盛蓝科技有限公司 | 一种圆规教具及其绘图实现方法 |
CN107589937A (zh) * | 2017-08-28 | 2018-01-16 | 锐达互动科技股份有限公司 | 一种基于虚拟技术实现模拟量角器功能的方法 |
CN108648109B (zh) * | 2018-04-11 | 2021-07-13 | 泛东教育科技(大连)有限公司 | 一种实现多种功能的教学技术数学工具系统与方法 |
CN112306291A (zh) * | 2020-10-23 | 2021-02-02 | 广州朗国电子科技有限公司 | 电子教学画板的教学工具的实现方法、存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281688A (zh) * | 2008-03-26 | 2008-10-08 | 博采林电子科技(深圳)有限公司 | 便携式学习设备及其动态几何作图方法 |
CN101504773B (zh) * | 2009-03-27 | 2011-06-22 | 中国科学院软件研究所 | 一种笔式用户界面中基于笔的圆弧绘制方法 |
US9076261B2 (en) * | 2012-09-27 | 2015-07-07 | Siemens Product Lifecycle Management Software Inc. | Virtual drafting tools |
CN104462691B (zh) * | 2014-12-09 | 2017-12-26 | 广州大学 | 一种在动态几何软件中实现鼠标智能画图的方法及装置 |
-
2016
- 2016-03-04 CN CN201610121290.4A patent/CN105701849B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN105701849A (zh) | 2016-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105701849B (zh) | 一种模拟圆规实现绘制圆的方法 | |
US8624899B2 (en) | Arc spline GPU rasterization for cubic Bezier drawing | |
US6377240B1 (en) | Drawing system using design guides | |
US20120092340A1 (en) | Systems, methods, and computer-readable media for manipulating graphical objects | |
EP2828831B1 (en) | Point and click lighting for image based lighting surfaces | |
CN106095139B (zh) | 一种在投影交互系统中提升线条绘制速度的方法 | |
JPH08101922A (ja) | 画像編集作成装置および画像編集作成方法 | |
US7773829B1 (en) | Image-centric rulers | |
CN104385920A (zh) | 一种指针式虚拟仪表盘的实现方法 | |
US20160063669A1 (en) | Dynamic Motion Path Blur User Interface | |
US9779484B2 (en) | Dynamic motion path blur techniques | |
CN113590000A (zh) | 笔迹处理方法、笔迹处理装置、存储介质 | |
CN101281688A (zh) | 便携式学习设备及其动态几何作图方法 | |
CN109697755A (zh) | 输电铁塔模型的增强现实显示方法、装置和终端设备 | |
CN107589937A (zh) | 一种基于虚拟技术实现模拟量角器功能的方法 | |
CN102945127A (zh) | 体绘制显示的交互方法及其系统 | |
US11809701B2 (en) | Handwriting forming method and apparatus, and electronic device | |
Whitrow | OpenGL graphics through applications | |
Hooten et al. | Comparing input error for mouse and touch input | |
Mayer et al. | Effect of orientation on unistroke touch gestures | |
CN109240578A (zh) | 一种参数调节方法和装置 | |
Palleis et al. | Novel indirect touch input techniques applied to finger-forming 3d models | |
US20240020893A1 (en) | Handwriting Forming Method and Apparatus, and Electronic Device | |
CN113129650B (zh) | 一种基于电子三角板的操作方法及终端 | |
WO2023206257A1 (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 | ||
CB02 | Change of applicant information |
Address after: 350108 6, No. 1 Innovation Park, No. 3 east science and technology road, Minhou street, Minhou, Fuzhou. Applicant after: RETURNSTAR INTERACTIVE TECHNOLOGY GROUP Co.,Ltd. Address before: 350000 8 tower building, Orange Garden Industrial Park, 618 Jinshan Road, Jianxin Town, Cangshan District, Fuzhou, Fujian. Applicant before: RETURNSTAR INTERACTIVE TECHNOLOGY GROUP Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190412 |
|
CF01 | Termination of patent right due to non-payment of annual fee |