标题:使用 VB 做一个曲柄滑块机构!求帮助!
只看楼主
泪雨烟云8642
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-11-24
结帖率:0
已结贴  问题点数:20 回复次数:10 
使用 VB 做一个曲柄滑块机构!求帮助!
搜索更多相关主题的帖子: 机构 
2014-11-24 21:30
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:735
专家分:3478
注 册:2013-1-26
得分:7 
这个可否用?
工程1.zip (5.3 KB)

大开眼界
2014-11-25 10:04
泪雨烟云8642
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-11-24
得分:0 
回复 2 楼 lianyicq
确实不错,但是仍然有一点小缺陷!请问可以把代码给我一下吗?还有,线段的长度是那个图形里的吗?请帮我一下,多谢您了!
2014-11-25 20:48
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:7 

活塞运动.rar (2.65 KB)


程序代码:
Dim Coner As Single, cTurn As Integer

Private Sub Command1_Click()
  If Command1.Caption = "转动" Then
    Timer1.Interval = 100
    Command1.Caption = "停止"
  Else
    Timer1.Interval = 0
    Command1.Caption = "转动"
  End If
End Sub

Private Sub Command2_Click()
  If cTurn = 1 Then
    cTurn = -1
    Command2.Caption = "顺时针"
  Else
    cTurn = 1
    Command2.Caption = "逆时针"
  End If
End Sub

Private Sub Command3_Click()
  Text1 = Val(Text1) - 1
  If Val(Text1) < 1 Then Text1 = 1
End Sub

Private Sub Command4_Click()
  Text1 = Val(Text1) + 1
End Sub

Private Sub Form_Load()
  Me.ScaleMode = 3       '设置为像素
  Coner = 0              '转角为0
  cTurn = 1              '旋转方向为顺时针
  Text1 = 10             '旋转速度为10
  Timer1.Interval = 0    '定时器暂停
  Timer1_Timer           '根据初始值画图
End Sub

Private Sub Timer1_Timer()
  Dim ox As Integer, oy As Integer, r As Integer, l As Integer
  Dim x As Single, y As Single, lx As Single, ly As Single
  Dim i As Integer, Devia As Single, oldDev As Single
  If Timer1.Interval > 0 Then
    Coner = Coner + Val(Text1) * cTurn
    If cTurn > 0 And Coner > 360 Then Coner = Coner - 360
    If cTurn < 0 And Coner < 0 Then Coner = Coner + 360
  End If
  Me.Cls
  r = 0.1 * Me.ScaleWidth                                 '根据窗体宽度计算半径
  l = 3 * r                                               '连杆长度为半径3倍(必须大于2倍半径)
  oy = Me.ScaleHeight * 0.5
  ox = Me.ScaleWidth - r - 10
  Shape1.Top = oy - Shape1.Height * 0.5
  Shape1.Left = ox - Shape1.Width * 0.5                   '计算圆心位置ox、oy并定位显示圆心
  x = ox - r * Cos(Coner * 3.1415926 / 180)
  y = oy - r * Sin(Coner * 3.1415926 / 180)               '根据半径和转角计算圆上点坐标x、y
  ly = oy                                                 '活塞和圆心同轴(在x轴运动,y轴相同)
  oldDev = l                                              '给一个最大的误差值,以精确计算活塞在x轴上的运动位置
  For i = ox - 4 * r To ox - r
    Devia = Abs(l - Sqr((x - i) ^ 2 + (y - oy) ^ 2))
    If Devia > oldDev Then Exit For                       '误差应该越来越小,如果变大说明上一次i值就是正确的x坐标值
    oldDev = Devia
  Next
  '上述循环是用笨办法计算误差变化取得活塞运动坐标,其实可以解一元二次方程取一个有意义的根作为x坐标值
  lx = i - 1
  Label1.Left = lx - Label1.Width
  Label1.Top = ly - Label1.Height * 0.5                   '显示活塞
  Me.Line (ox, oy)-(x, y), vbBlue                         '显示曲轴
  Me.Line (x, y)-(lx, ly), vbRed                          '显示连杆
End Sub
收到的鲜花
  • 泪雨烟云86422014-11-26 12:30 送鲜花  3朵   附言:我很赞同
2014-11-25 23:43
泪雨烟云8642
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-11-24
得分:0 
回复 4 楼 xzlxzlxzl
您好,非常感谢您的帮助!不过,还有一点我想请教一下。那个L1、L2、S、E的距离是图上标的吗?如何让它显示在图上?还有,为什么进入那个窗体就看到两个shape,而看不到直线,请您再花点时间帮我修改一下好吗?多谢了!
2014-11-26 07:26
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:735
专家分:3478
注 册:2013-1-26
得分:0 
回复 3 楼 泪雨烟云 8642
代码自己写吧,不麻烦.圆心坐标为O(0,0).定义OA为半径。A为圆周上连接连杆的点,连杆另一点为B,约束B点纵坐标恒为0,angle为转动角度。顺时针时angle递减,反时针时反之。angle为原变量,用COS/SINA求A点横纵坐标,再解三角形求B点坐标。仅此而已。其它都是花边
另外长度都是些定值,比如半径和连杆长度。旋转角速度、活塞行程及速度应该有意义。
有了思路,自己解决。想加什么花就加什么花。

[ 本帖最后由 lianyicq 于 2014-11-26 08:56 编辑 ]

大开眼界
2014-11-26 08:53
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
回复 5 楼 泪雨烟云 8642
哦,这样啊!那你该干嘛就干嘛去吧,编程于你实在不合适。
2014-11-26 10:56
泪雨烟云8642
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-11-24
得分:0 
回复 7 楼 xzlxzlxzl
我只是一个职校的学生,刚刚接触VB的基础,就是控件啊,窗体啊什么的属性!还有IF THEN,DO,FOR循环这些,都没涉及到深层次的东西,所以!要求助各位!我一直在研究!
2014-11-26 11:50
丑八怪先森CR
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2014-11-26
得分:7 
利用vb做个验证码 怎么做?
初学者 请多多帮忙。谢谢
2014-11-26 13:43
hpwangcheng
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-2-10
得分:0 
高手啊,这个需要学习一下.
2015-01-06 21:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-439110-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.537685 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved