50分!VB程序高手进!用VB程序实现曲柄连杆机构运动

50分!VB程序高手进!用VB程序实现曲柄连杆机构运动,第1张

'新建弊唤慧窗体,添加command1,label1,hscroll1,timer1,picture1

const

pi

=

3.1415926

dim

angle

as

integer

private

sub

form_load()

'调整空间尺寸,位置及初始参数

me.scalemode

=

3

me.caption

=

"曲柄滑块机构的演示"

me.width

=

5000

me.height

=

3500

picture1.scalemode

=

3

picture1.autoredraw

=

true

picture1.move

0,

0,

me.scalewidth,

150

command1.caption

=

"开始(&b)"

command1.move

20,

160,

70,

30

label1.caption

=

"速度:"

label1.move

120,

170,

100,

30

hscroll1.min

=

1

hscroll1.max

=

20

hscroll1.move

160,

160,

140,

30

timer1.interval

=

20

timer1.enabled

=

false

end

sub

private

sub

command1_click()

timer1.enabled

=

not

timer1.enabled

if

timer1.enabled

then

command1.caption

=

"暂停(&s)"

else

command1.caption

=

"开始(&b)"

end

if

end

sub

sub

draw(byval

ox

as

integer,

byval

oy

as

integer,

byval

orad

as

integer)

'ox,oy圆链慧心坐标,orad半径

angle

=

(angle

+

hscroll1.value)

mod

360

xo

=

ox

+

orad

*

cos(angle

*

pi

/

180)

'圆周上的铰链点坐标租答(xo,yo)

yo

=

oy

+

orad

*

sin(angle

*

pi

/

180)

xs

=

sqr((4

*

orad)

^

2

-

10

^

2)

+

xo

'滑块的左边界x坐标,连杆长度取4*orad,滑块高度取20(像素)

picture1.backcolor

=

picture1.backcolor

picture1.drawstyle

=

0

'实线

picture1.drawwidth

=

2

'线宽2

picture1.line

(ox

+

2

*

orad,

oy)-(ox

+

6

*

orad,

oy)

'壁面

picture1.line

(ox,

oy)-(xo,

yo)

'连接圆心与圆周上的铰链点

picture1.line

(xs,

oy

-

10)-(xo,

yo),

vbblue

'连接滑块与圆周上的铰链点

picture1.fillstyle

=

1

'透明填充

picture1.circle

(ox,

oy),

orad

'画圆

picture1.fillstyle

=

0

'实体填充

picture1.fillcolor

=

vbwhite

'圆心

picture1.circle

(ox,

oy),

5

picture1.fillcolor

=

vbgreen

'圆周上的铰链点

picture1.circle

(xo,

yo),

4

picture1.fillcolor

=

vbred

'滑块

picture1.line

(xs,

oy

-

20)-(xs

+

30,

oy),

,

b

picture1.drawstyle

=

2

'虚线

picture1.drawwidth

=

1

'线宽1

for

i

=

0

to

9

'表示壁面的虚线

picture1.line

(i

*

4

*

orad

/

10

+

ox

+

2

*

orad,

oy)-(i

*

4

*

orad

/

10

+

ox

+

2

*

orad

+

20,

oy

+

20)

next

end

sub

private

sub

timer1_timer()

'画

draw

60,

60,

40

end

sub

实际上,程序代码比较简单。

最复杂的应该是几何问题。

我们设,轮是主动地,是匀速运动的,初始位置为水平向右隐羡脊,方向为正方向。

运动速率为Alhpa弧度美秒。

时刻t,L1与水平线的灶渗夹角为:t*Alhpa

以轮心为原点,建立直角坐标系。

那么,L1和L2铰接点的坐标就是(L1*cos(t*alhpa),L1*sin(t*alhpa)),表示为(X1,Y1)

剩下的问题,就是计算滑块上的铰接点的坐标了。

设这点的坐标是(x,e)

那么有方程:

[x-L1*cos(t*alhpa)]*[x-L1*cos(t*alhpa)]+[L1*sin(t*alhpa)-e]*[L1*sin(t*alhpa)-e]=L2*L2

这个方程里面只有x是未知数,是一个典型的一元二次方程,可以用公式法求解。舍弃小于L1与L2交接点横坐标的一个解,其余一个就是我们的目标。

至此,任意时刻的位置,我们都可以确定派宴了。

下面就是怎么用vb来画图了。

这里运动的有三件:L1、L2和滑块。

不运动的有圆、圆轴、基准线、滑块的移动平面。

不运动的,我们用窗体的方法line、Circle来实现(注意:滑块的移动平面不要画那么高,画到滑块下面)。

移动的用两个line控件和一个shape控件来表示。

另外就是辅助的控件了,例如设置、开始、数据输出等等这些就不说了,核心的辅助控件就是计时器。

设置好参数之后,在开始的地方

Me.Scale (-L1 - L1, L1 + L1 + e)-(L1 + L1 + L2, -L1 - L1)

line1.x2=0

line1.y2=0

shape.top=e+shape1.height/2

画上不运动的部分。

在计时器的事件里

1、计算当前角度

2、计算(x1,y1)

3、计算x

上面三个计算代码你自己写。

line1.x1=x1

line1.y1=y1

line2.x1=x1

line2.y1=y1

line2.x2=x

line2.y2=e

shape1.left=x-shape1.width/2

如果还有问题,我们以后再讨论。

可以。

运动组件侍族的代码可以查到。

不过我手头没有。

你用录制宏查看一下添加约束、添加扭转力的指令

然后调取函数赋值就可以了。

因为如果曲柄滑块机构的各零部件伍清装配完全,应该不需要用到遍历技术,也不需要事件触发,所以只要一条程序链就够了。

关键还是在添加扭转力的指令,你用录制宏查看完之后,在帮助里对该指令查找一下就没什么大问题了。

顺便提一句,以上内容至对熟悉API的人老橘弊适用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12212748.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存