Matlab 版 (精华区)

发信人: ramjet (德芙), 信区: Matlab
标  题: [合集]怎么在 MatrixVB 中画曲线?
发信站: 哈工大紫丁香 (2001年06月29日08:44:57 星期五), 站内信件


────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月24日20:31:33 星期天 说道:

    就是我自己有一列 x 向量,y 向量,怎么画图?
    例如 x,y 是这么产生的
    Dim MyvarX as variant
    Dim MyvarY as variant
    Dim i
    Redim MyvarX(255)
    Redim MyvarY(255)
    for i = 1 to 255
        MyvarX(i) = i
        MyvarY(i) = i * rnd +3
    next i
    然后怎么以 MyvarX 为横坐标, MyvarY 为纵坐标
画图?多谢各位了!

────────────────────────────────────────
 ramjet (德芙)                        于 2001年06月25日15:14:18 星期一 说道:

把你的代码改一下:
    Dim X As Variant
    Dim Y As Variant
    X = linspace(1, 256)
    Y = plus(times(X, Rnd), 3)
    Call plot(X, Y)
说明:
我的感觉是 matrixvb中,凡是涉及到matlab的函数就一定要用矩阵运算,比如
乘就要用times而不是*,加就要用plus而不是+。
如果想使用plot函数,那就首先得到矩阵形式的X,Y。X,Y矩阵的产生可以使用
matlab
中的函数如linspace等(注意,这个时候就不能用x=1:256了),也可以使用
Creatmatrix()函数,然后再reshape一下。
关于matlabvb的使用,我也没有什么经验,欢迎大家一起交流。

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月25日20:35:07 星期一 说道:

    这里我还有一个问题,
    我一开始画了一个图,后来我打算在这个基础上重新再画
一条曲线,怎么能把以前的擦去? clg, clf?

────────────────────────────────────────
 ramjet (德芙)                        于 2001年06月26日07:37:58 星期二 说道:

yes
call clf

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月26日08:25:35 星期二 说道:

    我的代码是这么写的:
    Dim x as variant
    Dim y as variant
    Dim ax as variant
    ax = vbaxes(picture1.hWnd)
    x = linspace(0,8,100)
    y = msin(x)
    plot(x,y,"-o")
    '然后我想擦掉它,画一下 Cos 曲线
    y = mcos(x)
    call clg
    plot(x,y,"-*")
    程序执行到最后就出错误,说什么非法调用,整个程序
连同VB就退出了。
    问题出现在哪里?
    是不是应该在 clg 之后再用一个 figure 创建一幅图?
但是如果我仅在 clg 之后加上 Call figure,运行到这一步
时,提示说“Too few (0<1) inputs for figure”,输入少,
怎么解决?谢谢!

────────────────────────────────────────
 ramjet (德芙)                        于 2001年06月26日15:38:32 星期二 说道:

我忽然想起来以前在用matlab的GUI时的一点经验,那就是matlab
中的GUI的句柄总是在变的,所以你画了一个图,然后又去干了点
别的事,再回来的时候原来的对象的句柄就不是那个值了,解决的
方法很简单,只要再从新得到句柄就得了。如下:
      ax=vbaxes(picture1.hWnd)     '加上这一行就可以了
还有,我注意到你的代码在使用plot的时候没有写call,你是为了简便省略的
还是这样在你的机器上也能运行?
              在这个时代
              如果你要为社会做一点贡献的话
              那么就想办法
              让你和你爱的人
              好好的活着
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.237.3]

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月26日15:51:11 星期二 说道:

    我就是直接写的,实在不行,我就用 mmatrix.plot
不过我都是写成 plot 的,没有问题。
    我用你所说的方法试验了,真的好用。多谢!
    我还有一个需求,怎么用 ginput 读取鼠标点击的值呀?
    就是我想用户可以通过鼠标读出曲线的值,可是用了
ginput,没写出一个能读的 sub,ramjet 在你方便的时候
帮我看看吧!
    非常感谢!//bow

────────────────────────────────────────
 ramjet (德芙)                        于 2001年06月28日09:27:07 星期四 说道:

不好意思,现在才回。
这个问题我以前也没做过,我试了试,写了一个小例子,一看就明白,你可以参考
它来写你的程序。
添加一个按钮,按钮的click事件的代码如下:
Private Sub Command1_Click()
figure(1)
a = randM(20, 1)
plot (a)
b = ginput(1)
b1 = b(1).Simple
b2 = b(2).Simple
Debug.Print "x=";b1
Debug.Print "y=";b2
End Sub
当然我把画图和取点写到一起了,真正用的时候你可能要把你的曲线画到一个
picture里面,然后click这个picture的时候再执行取点的工作。

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月28日15:00:01 星期四 说道:

    我一开始用
    ax = vbaxes(picture1.hWnd)了,
    后来我想用 figure 重新创建一个图,
    h = mmatrix.figure(2)
    plot x,y
    程序非法退出了,VB 也退了。
    如果我光用 
    h = figure 来创建一个新图,非说输入参数过少。
    可是帮助文件中说
    h=figure(n) switches the graphic focus to the window n. If 
    the window did not exist, a new window is created. h=figure 
    creates a new figure window.
    另外:
    我怎么去设置图的属性呀?例如 MenuBar 我想设成"None"?

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月28日15:28:26 星期四 说道:

    最后一个我会了
    Matlab 中是用 set,VB中用
    mset h , "MenuBar","None"

────────────────────────────────────────
 ramjet (德芙)                        于 2001年06月28日16:09:50 星期四 说道:

我遇到过你说的这个问题,如果你在form或者pic中建立了一个axes之后,
再使用figure就很容易产生错误退出,具体什么规律我也说不清楚。
我建议你再建立一个窗体,在这个新窗体上创建一个新axes。
也就是vbaxes和figure尽量不要混用。
冬瓜怎么突然对matrixvb感冒了呢?

────────────────────────────────────────
 september (原本就是个冬瓜)           于 2001年06月28日16:37:44 星期四 说道:

    好像不同窗体之间也不行呀!:-(
    我的意思是如果这个窗体用了 vbaxes
    我在那个窗体上用 figure 不行。
    受人之托,麻烦事请呀!

────────────────────────────────────────
--
※ 修改:·ramjet 於 06月29日08:52:02 修改本文·[FROM: 202.118.237.3]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.933毫秒