毕业论文 齿厚偏差算法及Visual Basic编程.doc_第1页
毕业论文 齿厚偏差算法及Visual Basic编程.doc_第2页
毕业论文 齿厚偏差算法及Visual Basic编程.doc_第3页
毕业论文 齿厚偏差算法及Visual Basic编程.doc_第4页
毕业论文 齿厚偏差算法及Visual Basic编程.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 齿厚偏差算法及Visual Basic编程4.1 齿厚偏差计算过程在三坐标测量机上采用连续扫面法在齿轮轮廓上进行扫描测量,得到一组数据,即为以齿轮圆心为坐标原点时齿轮齿廓上各点坐标。根据已经测得的坐标值,在坐标系中算出齿轮齿廓与分度圆的交点,由单个齿上两侧的交点计算出对应的弧长,即为实际测量得到的齿厚。再根据齿轮的模数和齿数算出理论齿厚。进而求得单个齿的齿厚偏差。依次求出各个齿的齿厚偏差,并找出最大、最小偏差。根据齿轮精度等级求出齿厚的上、下极限偏差,若最大、最小偏差在极限范围内,则此齿轮侧隙满足条件。4.2 算法4.2.1 求圆心假设齿轮齿数为,根据坐标机上测量得到的数据找出每个齿上最接近齿顶处的点,即取个点。根据取得的点求齿顶圆圆心,即齿轮圆心,有如下两种方法:三点求圆心将取得的点分成组(结果取整),每组的3点尽可能分布整个圆周,可以使结果更精确。每组的3点求出一个圆心,再根据每组取得的圆心进行平均值计算,从而得到齿轮圆心。令3点坐标为、,圆心为,半径为。圆的方程为,因此有方程组: (4-1) (4-2) (4-3)得 (4-4)得 (4-5)*得 (4-6)*得 (4-7)(4-6)(4-7)得将代入方程(4-4),得最终得到圆心坐标即为。最小二乘法最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。在根据未知数列出求得的数据与实际数据之间的平方和函数后,应用高数中偏导数求极值的原理,将函数对未知数变量进行求偏导。令偏导数为0后解方程,求出未知变量,即可得到最佳函数12。最小二乘法通常用于曲线拟合,拟合圆曲线的公式推导如下:圆的方程:令可得圆曲线方程的另一个形式: (4-8)只要求出参数就可以求得圆心坐标的参数:取得的个点坐标为 ,各个点到圆心的距离为:点到圆边缘的距离的平方与半径平方的差为:令为的平方和:求参数使得的值取得最小值。解:平方差大于0,因此函数存在大于等于0的极小值,极大值为无穷大。对求偏导,令偏导数等于0,得到极值点,比较所有极值点的函数值即可得到最小值。 (4-9) (4-10) (4-11)解这个方程组:先消去(4-9)*(4-11)*得: (4-12)(4-9)*(4-11)*得: (4-13)令代入(4-12)、(4-13)可解得:将代入(4-11)可解得:从而得到圆心的估计拟合值:相同的一组数据,在VB中分别应用上述两种方法求圆心,事实证明最小二乘法的精度更高,而且在取点过程中没有条件限制,简单易行,因此在编程中选用最小二乘法求圆心。4.2.2 求齿轮模数和分度圆半径求出齿轮圆心后,依次求出取得的齿顶处的点的半径,。则对应计算得到的模数为:由于不同模数的齿轮要有不同模数的刀具去制造,为了便于设计和加工,渐开线齿轮应采用如下表1所示的标准模数系列13。表1.标准模数系列 (mm)第一系列1 1.25 1.5 2 2.5 3 4 5 6 8 10 12 16 20 25 32 40 50第二系列1.75 2.25 2.75 (3.25) 3.5 (3.75) 4.5 5.5 (6.5) 7 9 (11) 14 18 22 28 36 45因此,得到的值还需要进行标准化:若,则若,则若,则若,则由此得到齿轮模数。计算出模数后即可求出分度圆半径4.2.3 求齿轮齿廓与分度圆交点为了计算每个轮齿的齿厚,需要先求出每个轮齿两侧与分度圆相交的交点。根据求得的圆心坐标,依次求出齿轮齿廓上各个点的半径,。为了便于以后的齿厚偏差计算,在找出半径大于分度圆半径的最小点、半径小于分度圆半径的最大点过程中,从取得的第一个齿廓上的点(记为)开始依次循环(,1),比较齿廓上点的半径和分度圆半径的关系,得到两组分度圆附近的点数据:(半径值不断增加,此处记为单个轮齿上升侧的点)、(半径值不断减小,此处记为单个轮齿上降侧的点),其中是分度圆半径。根据单个齿两侧的点拟合曲线,与分度圆方程联立,求出交点。令单个轮齿齿廓同一侧上半径小于分度圆半径的最大点坐标为、半径大于分度圆半径的最小点坐标为。交点可以通过两点所在直线的方程与分度圆所在方程联立求解,也可以用分度圆附近的点拟合求渐开线求解,推导过程分别如下:根据直线方程求交点:分度圆方程: (4-14)点、所在直线方程:令直线方程则为: (4-15)将(4-15)代入(4-14)得: (4-16)令代入(4-16)可得: (4-17)直线与圆方程必有两个交点,所以方程(4-17)必有两个解:图2.渐开线生成图因为交点和已知、两点必须是在同一个齿侧分度圆的同侧,所以比较与、的关系,若在、之间,则交点横坐标为;否则交点横坐标。将求得的横坐标值代入(4-15)得交点纵坐标为:。由此可得根据直线拟合得到齿廓与分度圆的交点。渐开线求交点:渐开线形成图14如图2所示:AC为一条理论渐开线,K为其上的一点,半径为的圆是渐开线的基圆,BK所在直线沿基圆做纯滚动,称为渐开线的发生线。渐开线上任一一点K的向径角和向径分别为: (4-18) (4-19)15 由渐开线方程知,知道其上一点的半径即可算出其位置。已经找到分度圆附近的点,因为对于一条渐开线起点A的位置是固定的,所以可以根据分度圆附近的点求交点。为了提高精度,可以采用多个点拟合求平均。现用小于分度圆半径的最大半径的点求解。点对应半径将代入公式(4-18) (4-19)即可求得对应的向径角:分度圆半径已求得,将其代入公式(4-18) (4-19)即可求得对应的向径角: 因此两点相对圆心的夹角,从而找到分度圆的交点。4.2.4 计算齿厚偏差齿厚是一个轮齿在分度圆周上的弧长。根据同一齿两侧与分度圆的交点,求出两点间相对圆心的夹角,分度圆半径已知,即可求出对应轮齿的齿厚。根据直线拟合求交点得到的交点坐标是直角坐标值,而渐开线求得的交点坐标是极坐标值,因此轮齿上分度圆两交点相对圆心的夹角的计算过程不同,分别如下:根据直线方程求交点,计算夹角:令单个轮齿两侧上交点坐标分别为A、B,两点相对于圆心的夹角为(),则:相对与圆心的斜率为相对于圆心的效率为渐开线求交点,计算夹角:令轮齿两侧小于分度圆半径的最大半径对应点分别为、,对应的与渐开线与分度圆交点的夹角分别为、则相对与圆心的斜率为相对于圆心的效率为、相对于圆心的夹角分度圆两交点之间的夹角综上,求出轮齿上两交点即可计算出每个轮齿的齿厚偏差:实际测量得到的齿厚理论齿厚,其中是齿轮模数齿厚偏差齿轮齿数为,因此对应可计算得到个齿厚偏差,求出其中最大、最小偏差。再根据齿轮的精度求出上、下齿厚极限偏差,进行比较。4.3 Visual Basic编程4.3.1 Visual Basic概述16Visual Basic具有BASIC语言简单易学的优点,Visual Basic是目前应用最广泛的程序设计语言之一。下面介绍Visual Basic的主要特点以及Visual Basic的版本。Visual Basic具有如下5个主要优点:可视化编程;结构化程序设计;面向对象的程序设计;事件驱动编程机制;访问数据库。Visual Basic还具有数据交换(DDE)、对象的嵌入与链接(OLE)、动态链接库(DLL)、建立自己的ActiveX控件、声明、触发和管理自定义事件功能。微软公司于1991年推出了Visual Basic 1.0版本,之后又分别推出2.0、3.0、4.0、5.0和6.0版本。其中,1.04.0版本只有英文版,5.0版本以后的Visual Basic在推出英文版的同时又推出了中文版,极大地方便了中国用户。Visual Basic 6.0根据使用者的不同,共分为3个版本,分别为学习版、专业版和企业版。3个版本中,学习版的功能最少,主要供学习用;专业版为标准版,也是我们经常使用的版本;企业版的功能最全,主要用于开发功能强大、结构复杂的组内分布式应用程序。在Visual Basic开发软件的过程中,最重要的工作有两项:“设计部分”,设计的功能若不符合实际需求,即使程序编的再好,也达不到好的应用效果;“增加功能部分”,为每个对象(窗体、控件等)增加功能就是编制程序,通过程序的设计来实现既定的各种功能。其编程流程如图3:图3. Visual Basic流程4.3.2 Visual Basic编程计算齿厚偏差根据各个版本的不同用途,此处选择Visual Basic 6.0(以下简称VB)中文专业版进行编程。齿厚偏差的计算流程如下图4所示:图4.齿厚偏差编程流程 新建工程:打开Visual Basic 6.0中文版后,确定“新建工程”。工程建立之后,根据编程流程中所需要的输入、输出,添加相应的控件(文本框、按钮、标签、图片框、通用对话框),并且设置相应的属性。为了在完成程序功能的同时达到一定的视觉效果,在设计界面时选择使用多个窗体。工程创建后,只需在菜单栏“工程”中选择添加窗体即可得到多个窗体。根据算法的步骤可以将几个步骤在同一窗体上完成,在编程中分为四步,分别对应四个窗体。但仍依据流程中的步骤进行编程过程的说明。 导入数据:数据文件是根据三座标测量机沿齿轮齿廓扫描一周得到的一组齿轮轮廓坐标数据。运用VB中文件的操作,读取文件,并将读出的坐标数据分别赋值给两组数组:横坐标、纵坐标。因为在坐标机上测量得到的数据单位是英尺,因此读出数据需要将其换算成以mm为单位。整个编程中有四个窗体,每个窗体的功能中都需要用到三坐标机测量得到的数据,因此将导入数据代码写入标准模块中,这些代码不属于具体的窗体或控件,在各个窗体事件中如果需要数据则只要调用就可以了。标准模块的使用可以有效地提高程序的运行效率。在VB中,把一组具有同一名字、不同下标的变量(也称为数组元素)称为数组。在程序的运行中,数组占有一个内存区域,数组名就是这个区域的名称,区域的每个数组元素都有自己的地址,该地址即用下标表示。与基本数据类型相同,数组也应当“先定义,后使用”。数组分为静态数组和动态数组:用数值常数或符号常量作为下标定维的数组是静态数组;用变量作为下标定维的数组是动态数组。若已知数组变量个数,则用静态数组;否则用动态数组。使用动态数组时,以变量作为下标值,在程序运行过程中完成定义,通常定义一个动态数组分为两个步骤:首先在窗体模块、标准模块或过程中用Dim或Public声明一个没有下标的数组;然后在过程中用ReDim语句来定义带下标的数组。在VB中动态数组只能改变元素的个数,而不能改变数组的维数。程序运行后界面如下图5:图5.导入数据后的运行效果图 画齿轮轮廓:VB中提供了4中图形控件,用来显示不同的图形,而图片框和图像框是VB中用来显示图形的两种基本控件。图片框比图像框更灵活,且适用于动态环境;而图像框适用于静态情况,即不需要再修改的位图、图表等。因为在编写计算齿厚误差的过程中画出齿轮轮廓后还需要取点,所以在选取图形控件时选用图片框更符合要求。根据读出的坐标数据画齿轮齿廓时,需要先根据数据的最大、最小值确定图片框的大小,同时画出坐标系,作为齿轮轮廓的参考系。坐标系画好之后,依次读出连续两点的坐标值、画直线,再将首尾两点相连。因为相邻两点距离很近,因此通过直线连接两点即可画出齿轮齿廓。为了减少程序代码的冗余度,也方便以后变成的使用,可以利用VB中的通用过程,定义两个通用过程分别实现画坐标系和画齿轮齿廓的功能,在需要画坐标系和齿轮齿廓时只需要调用过程即可。在VB中,有时多个不同的事件过程可能需要使用一段相同的程序代码,因此可以把这段代码独立出来,作为一个过程,即“通用过程”。在VB中,通用过程分为子程序过程和函数过程。通用过程中都存在参数的传递,根据变量在传递过程结束后本身值是否保持不变,VB中将参数传递方式分为按地址传递和按值传递:按地址传递指形参和实参使用相同的内存地址单元,即通过子过程就可以改变变量本身的值,在VB中通过关键字ByRef(通常省略,系统默认的是按地址传递参数);按值传递指将实参变量的值传递给形参,相当于传递了一个变量的副本,变量的值在过程结束值保持不变,在VB中通过关键字Byval来实现传值的方式。本文编程中使用了子程序过程,且根据需要在过程中运用了按地址和按值传递两种方式。 在齿轮齿廓上取点:计算齿廓上各个点的半径、分度圆交点、圆周角等都需要用到圆心,因此画出齿轮齿廓后应求出齿轮圆心。无论是三点求圆心求平均值还是最小二乘法求圆心,都应保证取得的点只在同一个圆周附近。为了减少误差,应全部取齿顶或齿根处点,而且按照同一方向取点。本文中,编程采用取齿顶处的点,且按顺时针方向依次取点。取点过程中还应保证取得的点数和齿轮齿数相等,即每个齿上取一个点。取点是通过图片框的鼠标单击事件使应用程序对鼠标位置的变化作出相应,同时在图片框中显示出来,确保取点准确。鼠标事件的参数有:“Button”表示被按下的鼠标键,用来表示触发鼠标事件后按键的状态;“Shift”表示Shift、Ctrl和Alt的状态;“X”和“Y”则代表鼠标的位置坐标。鼠标事件触发后返回的“X”、“Y”值即使所要记录的取点坐标,分别赋值给两组数组保存,以便后面的应用。 求圆心:根据4.2.1的算法,用上一步得到的点的坐标计算即可得到圆心坐标,同时根据4.2.2的算法计算出齿轮模数和齿轮的分度圆半径。因为下面步骤中还需要用到取得的点,而事件过程是在不同的窗体中,所以在标准模块中编写两个通用过程,一个是将取得的点的坐标值赋值给标准模块中的参数的过程;一个是将标准模块中的参数值赋值给其它窗体的参数的过程。在此过程中标准模块中的参数起到中间变量的作用。其它窗体需要使用取得的点时只要调用过程即可。程序运行到求得圆心这一步的界面如下图6:图6.算出圆心后的运行效果图 求分度圆附近的最近点:坐标机测量得到的点虽是根据齿轮齿廓依次记录的,但是第一个点的位置是不确定的。因为在计算齿厚时需要同时取到轮齿两侧与分度圆的交点,而齿轮齿廓与分度圆的交点是根据分度圆两侧最近点求得的,所以为了保证轮齿两侧点的顺序相一致,将在齿轮齿廓上取得的第一个齿顶上的点作为所有齿廓点的第一个点重新排序,则从该点开始,齿轮齿廓上点的半径变化趋势为:不断减少直到到齿根圆上的点,再依次增大直到到下一个齿顶圆上的点。根据上节的算法,重新定义的第一点将齿轮齿廓上的n各点分成两段,在VB程序中需要用到两次循环结构。因为数组下标依次增加,因此记录数据时轮齿的每侧只要记录满足条件的第i个点即可。为了减少数组的数量,此过程中只需要记录轮齿两侧的点对应的记录齿轮齿廓点的数组(在第2步中生成的数组)的下标即可,但仍然需要定义两组数组:轮齿升侧的点(半径不断增大的一侧)、轮齿降侧的点(半径不断减少的一侧)。 求分度圆交点:根据第6步中求得的第i个点得出第i+1个点,再根据这两个点应用4.2.3的算法求出齿轮齿廓与分度圆的交点。因为不管升侧还是降侧的点,求交点只要求出分度圆附近的点即可。因此定义一个计算交点的通用过程,在求出分度圆两侧的点后,以两点坐标为已知参数调用过程,以交点坐标为返回值即可。 根据交点求齿厚:利用VB中的For循环控制结构,依次取轮齿两侧的分度圆交点(升侧和降侧的点的位置一定要对应,保证在同一个轮齿上),根据取得的两点,应用4.2.4的计算齿厚的算法即可求出每个齿的齿厚偏差。定义一个变量个数等于齿轮齿数的数组,用以存放每个轮齿的齿厚偏差。 求最大、最小偏差:根据上一步得到的齿厚偏差数组,找出其中的最大、最小值。在VB最值的求法有多种,最简单的是定义一个最大或最小变量,将数组的第一个值赋值给此变量,然后依次取数组中的其它值与变量向比较,若求最大值,则遇到比变量大的值,将此数组值重新赋值给变量,如此比较完数组中的所有值后,变量的值即为数组中最大的值;若求最小的值,则遇到比变量小的值,将此数组值重新赋值给变量,至比较完所有的值变量的值即是数组中的最小值。本文的编程中需要定义最大、最小两个变量,同时比较。得出最大、最小齿厚偏差后输出即可。程序运行求出最大、最小齿厚偏差的界面如下图7:图7.算出齿厚偏差后的运行效果图根据文本框输出的最大、最小齿厚偏差,与齿厚的上、下极限偏差相比较,是否在极限偏差范围内,从而判断该齿轮的侧隙是否满足要求。齿厚的上、下极限偏差需要根据齿轮的精度查表计算,在第二章齿轮精度一节有具体计算过程。 直线、渐开线求交点比较:上述是通过分度圆附近两点所在直线与分度圆方程联立求圆心。再根据4.2.3和4.2.4中渐开线求交点的算法求齿厚偏差,同时计算出根据直线求交点和渐开线求交点两种方法的偏差,即计算出根据直线求得的交点与渐开线求得的交点之间的弧长。第7步中已经求得直线交点,则可求得交点与半径小于分度圆的最大半径的点相对圆心的夹角,渐开线求交点的算法中已经求出渐开线求得的交点与半径小于分度圆的最大半径的点相对圆心的夹角,因此可求出两种方法求得的交点相对于圆心的夹角。已知分度圆半径,因此可求出弧长,即直线求得的交点与渐开线求得的交点之间的偏差。程序运行后界面如下图8:图8.直线、渐开线求交点比较后的运行效果图至此,根据三坐标测量机测得的齿轮齿廓数据计算齿轮齿厚误差的编程求解过程完成。编程代码的整个过程见附录A。附录A.编程代码步骤一:导入数据Option ExplicitPrivate a() As Single, b() As SinglePrivate Sub Command1_Click() 浏览文件 CommonDialog1.Filter = DAT类型文件(*.DAT)|*.DAT CommonDialog1.Action = 1 FilePath = CommonDialog1.FileName If FilePath Then Text1.Text = FilePath End If Command1.Enabled = False Command2.SetFocusEnd SubPrivate Sub Command2_Click() 读入数据 Dim i As Integer Call DuShu(a, b) Text2.Text = Text2.Text & X & & Y & Chr(13) + Chr(10) For i = 1 To n Text2.Text = Text2.Text & a( & i & )= & a(i) & & b( & i & )= & b(i) & Chr(13) + Chr(10) Next i Command2.Enabled = False Command3.SetFocusEnd SubPrivate Sub Command3_Click() 下一步 Form1.Hide Form2.ShowEnd SubPrivate Sub Command4_Click() 退出 Dim i As Integer i = MsgBox(你确定要退出程序?, 289, 确定是否退出) If i = 1 Then End End IfEnd SubPrivate Sub Form_Load() Text1.Text = Text2.Text = End Sub步骤二:画齿轮齿廓,求圆心Option ExplicitPrivate a() As Single, b() As SinglePublic G As IntegerPrivate QX() As Single, QY() As Single, T() As IntegerPublic mb As IntegerPrivate XX() As Single, YY() As SinglePrivate Sub Command1_Click() 画齿轮 Call DuShu(a, b) Call DrawlZuo(a, b) Call DrawlGear(a, b) Command1.Enabled = False Text1.SetFocusEnd SubPrivate Sub DrawlZuo(x() As Single, y() As Single) 画坐标系 Dim Xmin As Single, Ymin As Single Dim Xmax As Single, Ymax As Single Dim XXmin As Integer, YYmin As Integer Dim XXmax As Integer, YYmax As Integer Dim i As Integer Xmin = x(1) Xmax = x(1) Ymin = y(1) Ymax = y(1) For i = 2 To n If Xmin x(i) Then Xmin = x(i) If Xmax y(i) Then Ymin = y(i) If Ymax y(i) Then Ymax = y(i) Next i XXmin = Int(Xmin) - 2 XXmax = Int(Xmax) + 2 YYmin = Int(Ymin) - 2 YYmax = Int(Ymax) + 2 Picture1.ScaleMode = 6 Picture1.Scale (XXmin, YYmax)-(XXmax, YYmin) Picture1.Line (XXmin, 0)-(XXmax, 0), QBColor(5) Picture1.Line (0, YYmin)-(0, YYmax), QBColor(5)End SubPublic Sub DrawlGear(x() As Single, y() As Single) 画齿轮轮廓 Dim i As Integer For i = 1 To n If i n Then Picture1.Line (x(i + 1), y(i + 1)-(x(i), y(i), QBColor(1) Else Picture1.Line (x(i), y(i)-(x(1), y(1), QBColor(1) End If Next iEnd SubPrivate Sub Command2_Click() 输入齿数 z = Val(Text1.Text) If Text1.Text = Then MsgBox 请在文本框中输入齿数 Text1.SetFocus ElseIf z 17 Then MsgBox 齿轮齿数应该大于17 Text1.SetFocus Else Command2.Enabled = False End If Command3.SetFocusEnd SubPrivate Sub Command3_Click() 开始取点 If G = 0 Then Text2.Text = Text2.Text & X & & Y & Chr(13) + Chr(10) End If mb = MsgBox(请按顺时针方向依次在每个轮齿上取点,且尽可能取接近齿顶处的点!, vbOKOnly, 取点要求) Command3.Enabled = False Label3.Visible = TrueEnd SubPrivate Sub Command4_Click() 取消 Dim i As Integer Text2.Text = X & & Y & Chr(13) + Chr(10) If G = 0 Or G = 1 Then Text2.Text = Text2.Text Picture1.Cls Call DrawlZuo(a, b) Call DrawlGear(a, b) Else G = G - 1 Picture1.Cls Call DrawlZuo(a, b) Call DrawlGear(a, b) For i = 1 To G Text2.Text = Text2.Text & QX( & i & )= & QX(i) & & QY( & i & )= & QY(i) & Chr(13) + Chr(10) Picture1.Circle (QX(i), QY(i), 0.0025 * Picture1.ScaleWidth, QBColor(12) Next i Label3.Caption = 应取 & z & 个点, & & 现在已经取了 & G & 个点 End If Command3.Enabled = TrueEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 鼠标单击取点 Dim m As Single Dim j As Integer Dim JL As Single, sum As Single G = G + 1 If mb = 1 And Button = 1 And G JL Then sum = JL m = j ElseIf sum = 0 Then sum = JL m = j End If End If Next j ReDim Preserve QX(G) ReDim Preserve QY(G) ReDim Preserve T(G) T(G) = m QX(G) = a(m) QY(G) = b(m) Text2.Text = Text2.Text & QX( & G & )= & QX(G) & & QY( & G & )= & QY(G) & Chr(13) + Chr(10) Label3.Caption = 应取 & z & 个点 & & 现在已经取了 & G & 个点 Picture1.Circle (QX(G), QY(G), 0.0025 * Picture1.ScaleWidth, QBColor(12) End If If G = z Then Command3.Enabled = False Command4.Enabled = False Label3.Caption = 已经取到30个点,取点结束 MsgBox 已经取到30个点,取点结束 Command5.SetFocus End IfEnd SubPrivate Sub Command5_Click() 计算圆心坐标 Dim i As Integer Dim c1 As Double, d1 As Double, e1 As Double, g1 As Double, h1 As Double Dim sumxx As Double, sumx As Double, sumxy As Double Dim sumy As Double, sumxxx As Double, sumxyy As Double Dim sumxxyy As Double, sumyy As Double Dim sumxxy As Double, sumyyy As Double Dim a1 As Double, b1 As Double Dim at As Single If G 30 Then MsgBox 取点个数应为30,请重新取点 G = 0 Command3.Enabled = True Command4.Enabled = True Text2.Text = Picture1.Cls Call DrawlZuo(a, b) Call DrawlGear(a, b) Else For i = 1 To z sumxx = sumxx + QX(i) 2 sumx = sumx + QX(i) sumxy = sumxy + QX(i) * QY(i) sumy = sumy + QY(i) sumxxx = sumxxx + QX(i) 3 sumxyy = sumxyy + QX(i) * QY(i) 2 sumxxyy = sumxxyy + QX(i) 2 + QY(i) 2 sumyy = sumyy + QY(i) 2 sumxxy = sumxxy + QY(i) * QX(i) 2 sumyyy = sumyyy + QY(i) 3 Next i c1 = (z * sumxx - sumx 2) d1 = (z * sumxy - sumx * sumy) e1 = z * sumxxx + z * sumxyy - sumxxyy * sumx g1 = (z * sumyy - sumy 2) h1 = z * sumxxy + z * sumyyy - sumxxyy * sumy a1 = (h1 * d1 - e1 * g1) / (c1 * g1 - d1 2) b1 = (h1 * c1 - e1 * d1) / (d1 2 - g1 * c1) X0 = -a1 / 2 Y0 = -b1 / 2 Text3.Text = 圆心为( & X0 & , & Y0 & ) For at = 0 To 0.0025 * Picture1.ScaleWidth Step 0.005 Picture1.Circle (X0, Y0), at, QBColor(12) Next at Command5.Enabled = False End If Call QXY(QX, QY, T) Command6.SetFocusEnd SubPrivate Sub Command6_Click() 下一步 Form2.Hide Form3.ShowEnd SubPrivate Sub Command7_Click() 退出 Dim i As Integer i = MsgBox(你确定要退出程序?, 289, 确定是否退出) If i = 1 Then End End IfEnd SubPrivate Sub Form_Load() Text1.Text = Text2.Text = Text3.Text = Label3.Visible = FalseEnd Sub步骤三:计算齿轮齿廓与分度圆交点,求齿厚Option ExplicitPrivate a() As Single, b() As SinglePrivate QX() As Single, QY() As Single, T() As IntegerPrivate r() As DoublePrivate SC() As Integer, XC() As IntegerPrivate JSX() As Single, JSY() As SinglePrivate JXX() As Single, JXY() As SinglePrivate CH() As DoublePrivate Sub Command1_Click() 画齿轮齿廓 Dim at As Single Call DuShu(a, b) Call DrawlZuo(a, b) Call DrawlGear(a, b) For at = 0 To 0.0025 * Picture1.ScaleWidth Step 0.005 Picture1.Circle (X0, Y0), at, QBColor(12) Next at Command1.Visible = False Command2.SetFocusEnd SubPrivate Sub DrawlZuo(x() As Single, y() As Single) 画坐标系 Dim Xmin As Single, Ymin As Single Dim Xmax As Single, Ymax As Single Dim XXmin As Integer, YYmin As Integer Dim XXmax As Integer, YYmax As Integer Dim i As Integer Xmin = x(1) Xmax = x(1) Ymin = y(1) Ymax = y(1) For i = 2 To n If Xmin x(i) Then Xmin = x(i) If Xmax y(i) Then Ymin = y(i) If Ymax y(i) Then Ymax = y(i) Next i XXmin = Int(Xmin) - 2 XXmax = Int(Xmax) + 2 YYmin = Int(Ymin) - 2 YYmax = Int(Ymax) + 2 Picture1.ScaleMode = 6 Picture1.Scale (XXmin, YYmax)-(XXmax, YYmin) Picture1.Line (XXmin, 0)-(XXmax, 0), QBColor(5) Picture1.Line (0, YYmin)-(0, YYmax), QBColor(5)End SubPublic Sub DrawlGear(x() As Single, y() As Single) 画齿轮轮廓 Dim i As Integer For i = 1 To n If i n Then Picture1.Line (x(i + 1), y(i + 1)-(x(i), y(i), QBColor(1) Else Picture1.Line (x(i), y(i)-(x(1), y(1), QBColor(1) End If Next iEnd SubPrivate Sub Command2_Click() 计算模数 Dim i As Integer Dim m As Integer Dim Ra() As Single Dim rr As Single Dim sum As Single Call DXY(QX, QY, T) For i = 1 To z ReDim Preserve Ra(i) Ra(i) = Sqr(QX(i) - X0) 2 + (QY(i) - Y0) 2) sum = sum + Ra(i) Next i rr = sum / z MS = 2 * rr / (z + 2) Select Case MS Case 0 To 0.28 MS = (Int(MS * 20 + 0.5) / 20 Case 0.28 To 0.9 MS = (Int(MS * 10 + 0.5) / 10 Case 0.9 To 2.8 MS = (Int(MS * 4 + 0.5) / 4 Case 2.8 To 51 MS = Int(MS + 0.5) End Select c = MS * z / 2 Picture1.Circle (X0, Y0), c, QBColor(8) Text1.Text = 模数m= & MS & mm & Chr(13) & Chr(10) & 分度圆半径r= & c & mm Command2.Enabled = False Command3.SetFocusEnd SubPrivate Sub Command3_Click() 计算交点 Dim i As Int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论