三次Bezier曲线_第1页
三次Bezier曲线_第2页
三次Bezier曲线_第3页
三次Bezier曲线_第4页
三次Bezier曲线_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、三次Bezier曲线一、程序设计功能:1.设计绘图窗口,能实现数据的多次输入;2.具有多次绘图功能,能实现不同数据的绘图;3.具有清屏功能,在画完该次图形后,清除图像并重建坐标系,4.具有数据完整性检测功能,当数据输入不完整时,通过弹窗提示用户数据输入不完整。二、程序设计思想:先在草稿纸上求出三次Bezier曲线的各坐标参数前的系数表达式:a1 = -px(0) + 3 * px(1) - 3 * px(2) + px(3) b1 = 3 * px(0) - 6 * px(1) + 3 * px(2) c1 = -3 * px(0) + 3 * px(1) d1 = px(0) a2 = -p

2、y(0) + 3 * py(1) - 3 * py(2) + py(3) b2 = 3 * py(0) - 6 * py(1) + 3 * py(2) c2 = -3 * py(0) + 3 * py(1) d2 = py(0)然后根据三次Bezier曲线的特点来定义为以u为变量的函数,然后根据取点速率的不同来绘制相应四个顶点的曲线。三、程序代码:Private Sub Command1_Click()Picture1.DrawWidth = 2Picture1.FontSize = 12 '此处定义绘制坐标系时的字体大小,因为后面程序要用到字体设置,故此处字体设置要重新声明,不可用系

3、统默认的字体,否则再次绘制图形时,坐标由于字体过大而很难看Picture1.Scale (-300, 300)-(300, -300) '定义PictureBox坐标系Picture1.Line (-300, 0)-(300, 0)Picture1.Line (0, 300)-(0, -300) 'VB编译系统中,其默认的是在Form(窗体)中画图,当需要在其他属性框中画图时,需要加上其对应的属性框名称Picture1.CurrentX = 270: Picture1.CurrentY = 40: Picture1.Print "X"Picture1.Cur

4、rentX = 15: Picture1.CurrentY = 285: Picture1.Print "Y"Picture1.FontSize = 9 '坐标上的数字字体小一些For i = -280 To 280 Step 40Picture1.Line (i, 0)-(i, 8)Picture1.CurrentX = i - 12: Picture1.CurrentY = -5: Picture1.Print iNext iFor j = -280 To -40 Step 40Picture1.Line (0, j)-(8, j)Picture1.Curren

5、tX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext jFor j = 40 To 280 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext j Dim px(4) As Double '定义控制点的x坐标的数组 Dim py(4) As Double '定义控制点的y坐标的数组 Dim a1, b1, c1, d1 As Double '定义

6、x系数 Dim a2, b2, c2, d2 As Double '定义y系数 Dim x, y, u As Double '定义曲线中的自变量u和变量x,y If (Not IsNumeric(Text1) Or Not IsNumeric(Text2) Or Not IsNumeric(Text3) Or Not IsNumeric(Text4) _ Or Not IsNumeric(Text5) Or Not IsNumeric(Text6) Or Not IsNumeric(Text7) Or Not IsNumeric(Text8) ThenMsgBox "

7、对不起!系统检测到数据输入不完整,请您输入完整后绘图。谢谢配合!", , "友情提示"Else px(0) = Text1.Text: py(0) = Text2.Text px(1) = Text3.Text: py(1) = Text4.Text px(2) = Text5.Text: py(2) = Text6.Text px(3) = Text7.Text: py(3) = Text8.Text Picture1.FontSize = 18 '设置字体,为显示输入的四个点设置字体大小 Picture1.CurrentX = px(0): Pictu

8、re1.CurrentY = py(0): Picture1.Print "P" 0 'P0单独打印 For i = 0 To 2 Picture1.DrawWidth = 1.5 Picture1.Line (px(i), py(i)-(px(i + 1), py(i + 1), vbGreen: Picture1.Print "P" i + 1 'P1,P2,P3用for循环打印 Next i For i = 0 To 3 '绘制四个圆点,此处代码可优化,亦可用circle语句画小圆后填充颜色 Picture1.DrawWid

9、th = 7 Picture1.Line (px(i), py(i)-(px(i) + 1, py(i) - 1) Next i a1 = -px(0) + 3 * px(1) - 3 * px(2) + px(3) '计算x和y的参数 b1 = 3 * px(0) - 6 * px(1) + 3 * px(2) c1 = -3 * px(0) + 3 * px(1) d1 = px(0) a2 = -py(0) + 3 * py(1) - 3 * py(2) + py(3) b2 = 3 * py(0) - 6 * py(1) + 3 * py(2) c2 = -3 * py(0)

10、+ 3 * py(1) d2 = py(0) For u = 0 To 1 Step 0.00001'每当u增加0.00001求一次x和y x = a1 * u 3 + b1 * u * u + c1 * u + d1 '求x的值 y = a2 * u 3 + b2 * u * u + c2 * u + d2 '求y的值 If u = 0 Then Picture1.CurrentX = x '设置画线起点 Picture1.CurrentY = y Else Picture1.DrawWidth = 3 Picture1.Line -(x, y), RGB(2

11、55, 0, 0)'连点成线 End If Next uEnd IfEnd SubPrivate Sub Command2_Click() '用于清空输入数据 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" Text6.Text = "" Text7.Text = "" Text8.Text = ""End S

12、ubPrivate Sub Command3_Click() '清屏后再次绘制坐标系Picture1.ClsPicture1.DrawWidth = 2Picture1.FontSize = 12 '此处定义绘制坐标系时的字体大小,因为后面程序要用到字体设置,故此处字体设置要重新声明,不可用系统默认的字体,否则再次绘制图形时,坐标由于字体过大而很难看Picture1.Scale (-300, 300)-(300, -300) '定义PictureBox坐标系Picture1.Line (-300, 0)-(300, 0)Picture1.Line (0, 300)-(0

13、, -300) 'VB编译系统中,其默认的是在Form(窗体)中画图,当需要在其他属性框中画图时,需要加上其对应的属性框名称Picture1.CurrentX = 270: Picture1.CurrentY = 40: Picture1.Print "X"Picture1.CurrentX = 15: Picture1.CurrentY = 285: Picture1.Print "Y"Picture1.FontSize = 9For i = -280 To 280 Step 40Picture1.Line (i, 0)-(i, 8)Pictu

14、re1.CurrentX = i - 12: Picture1.CurrentY = -5: Picture1.Print iNext iFor j = -280 To -40 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 10: Picture1.Print jNext jFor j = 40 To 280 Step 40Picture1.Line (0, j)-(8, j)Picture1.CurrentX = -28: Picture1.CurrentY = j + 1

15、0: Picture1.Print jNext jEnd SubPrivate Sub Form_Load() '预输入数据,避免调试时多次输入数据,其随窗体运行而显示 Text1.Text = -260: Text2.Text = -230 '冒号用于多条语句并行书写,以减小代码所占空间 Text3.Text = 260: Text4.Text = -230 Text5.Text = 200: Text6.Text = 230 Text7.Text = -260: Text8.Text = 230End SubVB程序运行结果图片展示:第三次程序设计心得在三次Bezier曲线的程序设计中,明白了计算机对于图行处理的能力是相当强的。对于VB而言,其能根据取点速率的不同而精确确定相应图形的图像,能很好的满足人们在日常工作中的图像需求。在本次程序设计中花费了大量时间在程序优化上,特别是在界面美化上。因为我始终觉得一个良好的可执行程序不仅要具有精确计算的能力及绘图能力,还应该具有良好的用户体验界面,真正

温馨提示

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

评论

0/150

提交评论