看看四杆机构将VB程序改成C语言

nanlan1984 2005-04-25 09:53:05
我这里有一个关于四杆机构的VB程序请将它改成VC语言
Private Sub FANGZHEN_Click()
'确定绘图比例尺及运动时钟
jlsgjg.Cls
X = 6600
Y = 2300
CurrentX = X
CurrentY = Y
'寻找最长杆
XBMax = Abs(XB(0))
XCMax = Abs(XC(0))
XDMax = Abs(XD)
XMMax = Abs(XM(0))
YBMax = Abs(YB(0))
YCMax = Abs(YC(0))
YDMax = Abs(YD)
YMMax = Abs(YM(0))
For j = 1 To N - 1
If Abs(XB(j)) > XBMax Then XBMax = Abs(XB(j))
If Abs(XC(j)) > XCMax Then XCMax = Abs(XC(j))
If Abs(XM(j)) > XMMax Then XMMax = Abs(XM(j))
If Abs(YB(j)) > YBMax Then YBMax = Abs(YB(j))
If Abs(YC(j)) > YCMax Then YCMax = Abs(YC(j))
If Abs(YM(j)) > YMMax Then YMMax = Abs(YM(j))
Next j
XMax = XBMax
YMax = YBMax
If XCMax > XMax Then XMax = XCMax
If XDMax > XMax Then XMax = XDMax
If XMMax > XMax Then XMax = XMMax
If YCMax > YMax Then YMax = YCMax
If YDMax > YMax Then YMax = YDMax
If YMMax > YMax Then YMax = YMMax
'确定比例及运动时钟
XBL = X / XMax
YBL = Y / YMax
BL = XBL
If YBL < XBL Then BL = YBL
BL = BL * 0.9
TI = 1
If N <= 180 Then TI = 0.05
If N > 180 And N <= 360 Then TI = 0.5
'开始绘图
For j = 0 To N
'绘制机构最初位置图
ForeColor = RGB(0, 255, 0)
DrawWidth = 2
Line (X, Y)-(XB(j) * BL + X, Y - YB(j) * BL)
ForeColor = RGB(0, 100, 255)
Line (XB(j) * BL + X, Y - YB(j) * BL)-(XC(j) * BL + X, Y - YC(j) * BL)
ForeColor = RGB(100, 0, 255)
Line (XB(j) * BL + X, Y - YB(j) * BL)-(XM(j) * BL + X, Y - YM(j) * BL)
ForeColor = RGB(255, 100, 0)
Line (XC(j) * BL + X, Y - YC(j) * BL)-(XD * BL + X, Y - YD * BL)
ForeColor = RGB(100, 100, 100)
Line (X, Y)-(XD * BL + X, Y - YD * BL)
ForeColor = RGB(0, 0, 0)
DrawWidth = 1
Circle (X, Y), 60
Circle (XB(j) * BL + X, Y - YB(j) * BL), 60
Circle (XC(j) * BL + X, Y - YC(j) * BL), 60
Circle (XD * BL + X, Y - YD * BL), 60
'绘制机构运动图
For k = 0 To j - 1
XMM1 = XM(k) * BL + X
YMM1 = Y - YM(k) * BL
XMM2 = XM(k + 1) * BL + X
YMM2 = Y - YM(k + 1) * BL
If k = N - 1 Then XMM2 = XM(0) * BL + X: YMM2 = Y - YM(0) * BL
DrawWidth = 1
ForeColor = RGB(255, 0, 0)
Line (XMM1, YMM1)-(XMM2, YMM2)
Next k
'利用空循环来控制运动速度
For WAITE = 1 To 50000 Step TI
Next WAITE
'擦去原机构图
ForeColor = &H8000000F
DrawWidth = 2
Line (X, Y)-(XB(j) * BL + X, Y - YB(j) * BL)
Line (XB(j) * BL + X, Y - YB(j) * BL)-(XC(j) * BL + X, Y - YC(j) * BL)
Line (XB(j) * BL + X, Y - YB(j) * BL)-(XM(j) * BL + X, Y - YM(j) * BL)
Line (XC(j) * BL + X, Y - YC(j) * BL)-(XD * BL + X, Y - YD * BL)
DrawWidth = 1
Circle (X, Y), 60
Circle (XB(j) * BL + X, Y - YB(j) * BL), 60
Circle (XC(j) * BL + X, Y - YC(j) * BL), 60
Circle (XD * BL + X, Y - YD * BL), 60
Next j
'绘制最后位置机构图
ForeColor = RGB(0, 255, 0)
DrawWidth = 2
Line (X, Y)-(XB(j) * BL + X, Y - YB(j) * BL)
ForeColor = RGB(0, 100, 255)
Line (XB(0) * BL + X, Y - YB(0) * BL)-(XC(0) * BL + X, Y - YC(0) * BL)
ForeColor = RGB(100, 0, 255)
Line (XB(0) * BL + X, Y - YB(0) * BL)-(XM(0) * BL + X, Y - YM(0) * BL)
ForeColor = RGB(255, 100, 0)
Line (XC(0) * BL + X, Y - YC(0) * BL)-(XD * BL + X, Y - YD * BL)
ForeColor = RGB(100, 100, 100)
Line (X, Y)-(XD * BL + X, Y - YD * BL)
ForeColor = RGB(0, 0, 0)
DrawWidth = 1
Circle (X, Y), 60
Circle (XB(0) * BL + X, Y - YB(0) * BL), 60
Circle (XC(0) * BL + X, Y - YC(0) * BL), 60
Circle (XD * BL + X, Y - YD * BL), 60
End Sub



Private Sub Form_Load()
FANGZHEN.Enabled = False
TUICHU.Enabled = False
JISUAN.Enabled = False
End Sub



Private Sub JISUAN_Click()
'确定数据输出表格名称
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "FI1"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "FI2"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "FI3"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "W2"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "W3"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "E2"
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = "E3"
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = "XM"
MSFlexGrid1.Col = 8
MSFlexGrid1.Text = "YM"
MSFlexGrid1.Col = 9
MSFlexGrid1.Text = "VM"
MSFlexGrid1.Col = 10
MSFlexGrid1.Text = "BV"
MSFlexGrid1.Col = 11
MSFlexGrid1.Text = "AM"
MSFlexGrid1.Col = 12
MSFlexGrid1.Text = "BA"



...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdy_8212 2005-04-28
  • 打赏
  • 举报
回复
过程化居多,但主要还是没有优化。不过有程序的概念。
zhuhuning 2005-04-27
  • 打赏
  • 举报
回复
我认为不错 大家如果只是说不是那永远自己做不好 在别人基础上修改 我接下这个工程
withc 2005-04-27
  • 打赏
  • 举报
回复
不要这么说吗,口气不礼貌。
wachel 2005-04-26
  • 打赏
  • 举报
回复
搂主不厚到
fibbery 2005-04-26
  • 打赏
  • 举报
回复
工欲善其事必先利其器。
Salam2001 2005-04-26
  • 打赏
  • 举报
回复
看着 VB 的语法,觉得反胃...
xiaonian_3654 2005-04-26
  • 打赏
  • 举报
回复
垃圾代码,写的烂不说,什么用都没有,连求速度都没有,太垃圾了
nanlan1984 2005-04-25
  • 打赏
  • 举报
回复
是一个机械原理的小软件
nanlan1984 2005-04-25
  • 打赏
  • 举报
回复
我还有个效果图但是发不上来
nanlan1984 2005-04-25
  • 打赏
  • 举报
回复
程序太长了接如下
'开始计算数据
PI = 3.141592654
P = PI / 180
Sita2 = Sita2 * P
Sita4 = Sita4 * P
For I = 0 To N - 1
FI1(I) = I * (360 / N) * P
If L1 = L4 And FI1(I) = Sita4 Then FI1(I) = FI1(I) + 0.000001
L = Sqr(L1 * L1 + L4 * L4 - 2 * L1 * L4 * Cos(FI1(I) - Sita4))
S = L4 * Sin(Sita4) - L1 * Sin(FI1(I))
X = L4 * Cos(Sita4) - L1 * Cos(FI1(I))
'角度判断需要改进,下同。
If S > 0 And X = 0 Then FI = PI / 2: GoTo 111
If S < 0 And X = 0 Then FI = 3 * PI / 2: GoTo 111
If S = 0 And X = 0 Then FI = 0: GoTo 111
FI = Atn(Abs(S) / Abs(X))
If S >= 0 And X < 0 Then FI = PI - FI
If S < 0 And X < 0 Then FI = FI + PI
If S <= 0 And X > 0 Then FI = 2 * PI - FI
111 X = (L2 * L2 - L * L - L3 * L3) / (2 * L * L3)
FI3(I) = Atn(Sqr(1 - X * X) / Abs(X))
If X < 0 Then FI3(I) = PI - FI3(I)
FI3(I) = FH * FI3(I) + FI
If FI3(I) < 0 Then FI3(I) = 2 * PI + FI3(I)
If FI3(I) > (2 * PI) Then FI3(I) = FI3(I) - 2 * PI
S = L * Sin(FI) + L3 * Sin(FI3(I))
X = L * Cos(FI) + L3 * Cos(FI3(I))
If S > 0 And X = 0 Then FI2(I) = PI / 2: GoTo 222
If S < 0 And X = 0 Then FI2(I) = 3 * PI / 2: GoTo 222
If S = 0 And X = 0 Then FI2(I) = 0: GoTo 222
FI2(I) = Atn(Abs(S) / Abs(X))
If S >= 0 And X < 0 Then FI2(I) = PI - FI2(I)
If S < 0 And X < 0 Then FI2(I) = FI2(I) + PI
If S <= 0 And X > 0 Then FI2(I) = 2 * PI - FI2(I)
222 XM(I) = L1 * Cos(FI1(I)) + R2 * Cos(FI2(I) + Sita2)
YM(I) = L1 * Sin(FI1(I)) + R2 * Sin(FI2(I) + Sita2)
S = -L1 * W1 * Sin(FI1(I) - FI3(I))
X = L2 * Sin(FI2(I) - FI3(I))
W2(I) = S / X
S = L1 * W1 * Sin(FI1(I) - FI2(I))
X = L3 * Sin(FI3(I) - FI2(I))
W3(I) = S / X
S = -L1 * W1 * W1 * Cos(FI1(I) - FI3(I)) - L2 * W2(I) * W2(I) * Cos(FI2(I) - FI3(I)) + L3 * W3(I) * W3(I)
X = L2 * Sin(FI2(I) - FI3(I))
E2(I) = S / X
S = L1 * W1 * W1 * Cos(FI1(I) - FI2(I)) - L3 * W3(I) * W3(I) * Cos(FI3(I) - FI2(I)) + L2 * W2(I) * W2(I)
X = L3 * Sin(FI3(I) - FI2(I))
E3(I) = S / X
VMX = -L1 * W1 * Sin(FI1(I)) - R2 * W2(I) * Sin(FI2(I) + Sita2)
VMY = L1 * W1 * Cos(FI1(I)) + R2 * W2(I) * Cos(FI2(I) + Sita2)
VM(I) = Sqr(VMX * VMX + VMY * VMY)
BV(I) = Atn(Abs(VMY) / Abs(VMX))
If VMX = 0 And VMY > 0 Then BV(I) = PI / 2
If VMX = 0 And VMY < 0 Then BV(I) = 3 * PI / 2
If VMY >= 0 And VMX < 0 Then BV(I) = PI - BV(I)
If VMY < 0 And VMX < 0 Then BV(I) = BV(I) + PI
If VMY <= 0 And VMX > 0 Then BV(I) = 2 * PI - BV(I)
AMX = -L1 * W1 * W1 * Cos(FI1(I)) - R2 * W2(I) * W2(I) * Cos(FI2(I) + Sita2) - R2 * E2(I) * Sin(FI2(I) + Sita2)
AMY = -L1 * W1 * W1 * Sin(FI1(I)) - R2 * W2(I) * W2(I) * Sin(FI2(I) + Sita2) + R2 * E2(I) * Sin(FI2(I) + Sita2)
AM(I) = Sqr(AMX * AMX + AMY * AMY)
BA(I) = Atn(Abs(AMY) / Abs(AMX))
If AMX = 0 And AMY > 0 Then BA(I) = PI / 2
If AMX = 0 And AMY < 0 Then BA(I) = 3 * PI / 2
If AMY >= 0 And AMX < 0 Then BA(I) = PI - BA(I)
If AMY < 0 And AMX < 0 Then BA(I) = BA(I) + PI
If AMY <= 0 And AMX > 0 Then BA(I) = 2 * PI - BA(I)
'输出计算所的数据
MSFlexGrid1.Col = 0
MSFlexGrid1.Row = I + 1
MSFlexGrid1.Text = Str(Format(FI1(I) / P, "000.00"))
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = Str(Format(FI2(I) / P, "000.00"))
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = Str(Format(FI3(I) / P, "000.00"))
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = Str(Format(W2(I), "000.00"))
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = Str(Format(W3(I), "000.00"))
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = Str(Format(E2(I), "000.00"))
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = Str(Format(E3(I), "000.00"))
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = Str(Format(XM(I), "000.00"))
MSFlexGrid1.Col = 8
MSFlexGrid1.Text = Str(Format(YM(I), "000.00"))
MSFlexGrid1.Col = 9
MSFlexGrid1.Text = Str(Format(VM(I), "000.00"))
MSFlexGrid1.Col = 10
MSFlexGrid1.Text = Str(Format(BV(I), "000.00"))
MSFlexGrid1.Col = 11
MSFlexGrid1.Text = Str(Format(AM(I), "000.00"))
MSFlexGrid1.Col = 12
MSFlexGrid1.Text = Str(Format(BA(I), "000.00"))
'存储各个点数据用于计算
XB(I) = L1 * Cos(FI1(I))
YB(I) = L1 * Sin(FI1(I))
XC(I) = XB(I) + L2 * Cos(FI2(I))
YC(I) = YB(I) + L2 * Sin(FI2(I))
XD = L4 * Cos(Sita4)
YD = L4 * Sin(Sita4)
Next I
FANGZHEN.Enabled = True
TUICHU.Enabled = True
JISUAN.Enabled = False
End Sub

Private Sub QUEDING_Click()
jlsgjg.Cls
FANGZHEN.Enabled = False
TUICHU.Enabled = False
L1 = Val(TexL1.Text)
L2 = Val(TexL2.Text)
L3 = Val(TexL3.Text)
L4 = Val(TexL4.Text)
R2 = Val(TexR2.Text)
Sita2 = Val(TexS2.Text)
Sita4 = Val(TexS4.Text)
W1 = Val(TexW1.Text)
N = Val(TexN.Text)
FH = Val(TexFH.Text)
If L1 > (L2 + L3 + L4) Or L2 > (L1 + L3 + L4) Or L3 > (L1 + L2 + L4) Or L4 > (L1 + L2 + L3) Then MsgBox ("对不起,不满足杆长之和条件,请重新输入机构尺寸!"): GoTo 100
If L1 = L4 Then MsgBox ("对不起,暂时无法计算该机构,请重新输入机构尺寸。"): GoTo 100 '角度判断问题
LMAX = L1
LMIN = L1
imax = 1
imin = 1
If L2 > LMAX Then LMAX = L2: imax = 2
If L3 > LMAX Then LMAX = L3: imax = 3
If L4 > LMAX Then LMAX = L4: imax = 4
If L2 < LMIN Then LMIN = L2: imin = 2
If L3 < LMIN Then LMIN = L3: imin = 3
If L4 < LMIN Then LMIN = L4: imin = 4
If (LMIN + LMAX) <= (L1 + L2 + L3 + L4 - LMIN - LMAX) Then
If imin = 2 Then MsgBox ("对不起,暂时无法计算该机构,请重新输入机构尺寸。"): GoTo 100
Else
MsgBox ("对不起,暂时无法计算该机构,请重新输入机构尺寸。"): GoTo 100
End If
JISUAN.Enabled = True
'确定数据输出表格大小
MSFlexGrid1.Rows = N + 1
MSFlexGrid1.Cols = 13
MSFlexGrid1.Row = 0
MSFlexGrid1.ColWidth(0) = 720
MSFlexGrid1.ColWidth(1) = 720
MSFlexGrid1.ColWidth(2) = 720
MSFlexGrid1.ColWidth(3) = 720
MSFlexGrid1.ColWidth(4) = 720
MSFlexGrid1.ColWidth(5) = 720
MSFlexGrid1.ColWidth(6) = 720
MSFlexGrid1.ColWidth(7) = 720
MSFlexGrid1.ColWidth(8) = 720
MSFlexGrid1.ColWidth(9) = 720
MSFlexGrid1.ColWidth(10) = 720
MSFlexGrid1.ColWidth(11) = 720
MSFlexGrid1.ColWidth(12) = 720
100 End Sub


Private Sub TUICHU_Click()
QE = MsgBox("真的要退出吗?", vbQuestion + vbOKCancel + vbDefaultButton2, "警告!")
If QE = vbOK Then End
End Sub

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧