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毫秒