CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

画曲线

楼主dzgld(古道东风)2001-12-15 16:25:53 在 VB / 基础类 提问

各位帮帮忙,如何用VB画通过几个指定坐标点的平滑曲线?也就是说程序在输入几个点的坐标后就自动生成通过这几个点的XY散点图? 问题点数:20、回复次数:6Top

1 楼yangzhaoyu(老妖)回复于 2001-12-15 18:11:02 得分 0

WINDOWS的有API函数可以话曲线,但只是3点平滑.如果你是N点的话,建议你找本计算机常用算法看看,里面有求N点平滑的算法Top

2 楼enmity(灵感之源)回复于 2001-12-15 19:34:59 得分 10

到  
   
  http://caotang.myetang.com/temp/curve.zip  
   
  下载给你满意答复的例子Top

3 楼xxlroad(土八路)回复于 2001-12-15 19:48:45 得分 10

VERSION   5.00  
  Begin   VB.Form   huizhi    
        BorderStyle           =       1     'Fixed   Single  
        Caption                   =       "绘制三次参数样条插值曲线"  
        ClientHeight         =       3240  
        ClientLeft             =       45  
        ClientTop               =       330  
        ClientWidth           =       3285  
        LinkTopic               =       "Form1"  
        MaxButton               =       0       'False  
        MinButton               =       0       'False  
        ScaleHeight           =       3240  
        ScaleWidth             =       3285  
        StartUpPosition   =       2     '屏幕中心  
        Begin   VB.CommandButton   Command2    
              Caption                   =       "结束"  
              Height                     =       375  
              Left                         =       1620  
              TabIndex                 =       2  
              Top                           =       120  
              Width                       =       1395  
        End  
        Begin   VB.CommandButton   Command1    
              Caption                   =       "绘制曲线"  
              Height                     =       375  
              Left                         =       120  
              TabIndex                 =       1  
              Top                           =       120  
              Width                       =       1395  
        End  
        Begin   VB.PictureBox   Picture1    
              Align                       =       2     'Align   Bottom  
              BackColor               =       &H00FFFFFF&  
              FillColor               =       &H000000FF&  
              ForeColor               =       &H000000FF&  
              Height                     =       2655  
              Left                         =       0  
              ScaleHeight           =       2595  
              ScaleWidth             =       3225  
              TabIndex                 =       0  
              Top                           =       585  
              Width                       =       3285  
        End  
  End  
  Attribute   VB_Name   =   "huizhi"  
  Attribute   VB_GlobalNameSpace   =   False  
  Attribute   VB_Creatable   =   False  
  Attribute   VB_PredeclaredId   =   True  
  Attribute   VB_Exposed   =   False  
  '绘制三次参数样条插值曲线  
  '“VB天堂”http://vbskys.yeah.net  
  Dim   x(10)   As   Single,   y(10)   As   Single,   u1(4000)   As   Single,   v1(4000)   As   Single  
  Dim   num   As   Integer  
  Function   hypot(ByVal   x   As   Single,   ByVal   y   As   Single)  
    hypot   =   Sqr(x   ^   2   +   y   ^   2)  
  End   Function  
   
  Private   Sub   Command1_Click()  
    Picture1.Scale   (0,   0)-(640,   480)  
    x(0)   =   80:   y(0)   =   280  
    x(1)   =   350:   y(1)   =   200  
    x(2)   =   180:   y(2)   =   140  
    x(3)   =   200:   y(3)   =   200  
    DrawWidth   =   3  
    For   i   =   0   To   3  
      Picture1.PSet   (x(i),   y(i))  
    Next   i  
    DrawWidth   =   1  
    tspLine   3,   2,   0,   0,   0,   0  
    Picture1.PSet   (u1(0),   v1(0))  
      For   i   =   1   To   num   -   1  
        Picture1.Line   -(u1(i),   v1(i))  
      Next   i  
  End   Sub  
   
  Private   Sub   Command2_Click()  
    End  
  End   Sub  
  Sub   tspLine(ByVal   n   As   Integer,   ByVal   ch   As   Integer,   ByVal   tx1   As   Single,   ByVal   tx2   As   Single,   ByVal   ty1   As   Single,   ByVal   ty2   As   Single)  
  Dim   a(10)   As   Single,   b(10)   As   Single,   c(10)   As   Single,   dx(10)   As   Single,   dy(10)   As   Single  
  Dim   qx(10)   As   Single,   qy(10)   As   Single  
  Dim   tt   As   Single,   bx3   As   Single,   bx4   As   Single,   by3   As   Single,   by4   As   Single  
  Dim   cx   As   Single,   cy   As   Single,   t(10)   As   Single,   px(10)   As   Single,   py(10)   As   Single  
  Dim   u(3)   As   Single,   v(3)   As   Single,   i   As   Integer  
  num   =   0  
  For   i   =   1   To   n  
    t(i)   =   hypot(x(i)   -   x(i   -   1),   y(i)   -   y(i   -   1))  
  Next   i  
  Select   Case   ch  
    Case   0   '抛物条件  
        u(0)   =   (x(1)   -   x(0))   /   t(1):   u(1)   =   (x(2)   -   x(1))   /   t(2)  
        u(2)   =   (u(1)   -   u(0))   /   (t(2)   +   t(1))  
        tx1   =   u(0)   -   u(2)   *   t(1)  
        u(0)   =   (y(1)   -   y(0))   /   t(1):   u(1)   =   (y(2)   -   y(1))   /   t(2)  
        u(2)   =   (u(1)   -   u(0))   /   (t(2)   +   t(1))  
        ty1   =   u(0)   -   u(2)   *   t(1)  
        u(0)   =   (x(n)   -   x(n   -   1))   /   t(n):   u(1)   =   (x(n   -   1)   -   x(n   -   2))   /   t(n   -   1)  
        u(2)   =   (u(0)   -   u(1))   /   (t(n)   +   t(n   -   1))  
        tx2   =   u(0)   +   u(2)   *   t(n)  
        u(0)   =   (y(n)   -   y(n   -   1))   /   t(n):   u(1)   =   (y(n   -   1)   -   y(n   -   2))   /   t(n   -   1)  
        u(2)   =   (u(0)   -   u(1))   /   (t(n)   +   t(n   -   1))  
        ty2   =   u(0)   +   u(2)   *   t(n)  
    Case   1   '夹持条件  
      a(0)   =   1:   c(0)   =   0:   dx(0)   =   tx1:   dy(0)   =   ty1  
      a(n)   =   1:   b(n)   =   0:   dx(n)   =   tx2:   dy(n)   =   ty2  
    Case   2   '自由条件  
      a(0)   =   2:   c(0)   =   1  
      dx(0)   =   3   *   (x(1)   -   x(0))   /   t(1):   dy(0)   =   3   *   (y(1)   -   y(0))   /   t(1)  
      a(n)   =   2:   b(n)   =   1  
      dx(n)   =   3   *   (x(n)   -   x(n   -   1))   /   t(n):   dy(n)   =   3   *   (y(n)   -   y(n   -   1))   /   t(n)  
    Case   3   '循环条件  
      a(0)   =   2:   c(0)   =   1  
      dx(0)   =   3   *   (x(1)   -   x(0))   /   t(1)   -   (t(1)   *   (x(2)   -   x(1))   /   t(2)   -   x(1)   +   x(0))   /   (t(1)   +   t(2))  
      dy(0)   =   3   *   (y(1)   -   y(0))   /   t(1)   -   (t(1)   *   (y(2)   -   y(1))   /   t(2)   -   y(1)   +   y(0))   /   (t(1)   +   t(2))  
      a(n)   =   2:   b(n)   =   1  
      dx(n)   =   3   *   (x(n)   -   x(n   -   1))   /   t(n)  
      dx(n)   =   dx(n)   +   (x(n)   -   x(n   -   1)   -   t(n)   *   (x(n   -   1)   -   x(n   -   2))   /   t(n   -   1))   /   (t(n)   +   t(n   -   1))  
      dy(n)   =   3   *   (y(n)   -   y(n   -   1))   /   t(n)  
      dy(n)   =   dy(n)   +   (y(n)   -   y(n   -   1)   -   t(n)   *   (y(n   -   1)   -   y(n   -   2))   /   t(n   -   1))   /   (t(n)   +   t(n   -   1))  
  End   Select  
   
  '计算方程组系数阵和常数阵  
  For   i   =   1   To   n   -   1  
    a(i)   =   2   *   (t(i)   +   t(i   +   1)):   b(i)   =   t(i   +   1):   c(i)   =   t(i)  
    dx(i)   =   3   *   (t(i)   *   (x(i   +   1)   -   x(i))   /   t(i   +   1)   +   t(i   +   1)   *   (x(i)   -   x(i   -   1))   /   t(i))  
    dy(i)   =   3   *   (t(i)   *   (y(i   +   1)   -   y(i))   /   t(i   +   1)   +   t(i   +   1)   *   (y(i)   -   y(i   -   1))   /   t(i))  
  Next   i  
   
  '采用追赶法解方程组  
  c(0)   =   c(0)   /   a(0)  
  For   i   =   1   To   n   -   1  
    a(i)   =   a(i)   -   b(i)   *   c(i   -   1):   c(i)   =   c(i)   /   a(i)  
  Next   i  
  a(n)   =   a(n)   -   b(n)   *   c(i   -   1)  
  qx(0)   =   dx(0)   /   a(0):   qy(0)   =   dy(0)   /   a(0)  
  For   i   =   1   To   n  
      qx(i)   =   (dx(i)   -   b(i)   *   qx(i   -   1))   /   a(i)  
      qy(i)   =   (dy(i)   -   b(i)   *   qy(i   -   1))   /   a(i)  
  Next   i  
  px(n)   =   qx(n):   py(n)   =   qy(n)  
  For   i   =   n   -   1   To   0   Step   -1  
    px(i)   =   qx(i)   -   c(i)   *   px(i   +   1)  
    py(i)   =   qy(i)   -   c(i)   *   py(i   +   1)  
  Next   i  
  '计算曲线上点的坐标  
  For   i   =   0   To   n   -   1  
    bx3   =   (3   *   (x(i   +   1)   -   x(i))   /   t(i   +   1)   -   2   *   px(i)   -   px(i   +   1))   /   t(i   +   1)  
    bx4   =   ((2   *   (x(i)   -   x(i   +   1))   /   t(i   +   1)   +   px(i)   +   px(i   +   1))   /   t(i   +   1))   /   t(i   +   1)  
    by3   =   (3   *   (y(i   +   1)   -   y(i))   /   t(i   +   1)   -   2   *   py(i)   -   py(i   +   1))   /   t(i   +   1)  
    by4   =   ((2   *   (y(i)   -   y(i   +   1))   /   t(i   +   1)   +   py(i)   +   py(i   +   1))   /   t(i   +   1))   /   t(i   +   1)  
    tt   =   0  
    While   (tt   <=   t(i   +   1))  
      cx   =   x(i)   +   (px(i)   +   (bx3   +   bx4   *   tt)   *   tt)   *   tt  
      cy   =   y(i)   +   (py(i)   +   (by3   +   by4   *   tt)   *   tt)   *   tt  
      u1(num)   =   cx:   v1(num)   =   cy:   num   =   num   +   1:   tt   =   tt   +   0.5  
    Wend  
    u1(num)   =   x(i   +   1):   v1(num)   =   y(i   +   1):   num   =   num   +   1  
  Next   i  
  End   Sub  
   
  Top

4 楼xxlroad(土八路)回复于 2001-12-15 19:53:04 得分 0

请给: enmity(灵感之源) 加   20   分Top

5 楼dzgld(古道东风)回复于 2001-12-16 17:30:31 得分 0

谢谢帮助!等我调试通过后一定加分Top

6 楼liuks(大胖胖)回复于 2001-12-16 18:34:46 得分 0

个人认为,采用VBA,使用graph控件,要简单的多,起码绘图部分不用自己编,可直接调用Graph控件方法.Top

相关问题

  • 如何画曲线?
  • 网页画曲线
  • 如何用asp画曲线
  • 可以画曲线吗?
  • 关于VB.NET画曲线图
  • 小问题:曲线怎么画?
  • 寻找 :画三维曲线的软件
  • 请教关于画曲线的问题...
  • 已知坐标画曲线,帮忙
  • 怎样使用OWC画曲线图?

关键词

  • vb
  • 曲线
  • tabindex
  • caption
  • begin vb
  • height
  • left

得分解答快速导航

  • 帖主:dzgld
  • enmity
  • xxlroad

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo