注册 登录
编程论坛 VB6论坛

什么都有了,就缺您了,元芳你怎么看???,,谢谢了

V菜鸟V 发布于 2014-12-14 01:49, 1285 次点击
谢谢了,期望您的指导。附件中有1.机构运动视频2.机构视图分析3.机构简化图4.代码5.各部分运动计算6.自我分析
谢谢了,怎么运动起来那?什么都有了。(视频)(简化图)(代码),谢谢了,期望得到您的指导了,谢谢。
只有本站会员才能查看附件,请 登录
18 回复
#2
V菜鸟V2014-12-14 01:51
机构界面(有问题)
只有本站会员才能查看附件,请 登录
#3
V菜鸟V2014-12-14 01:52
具体机构图
只有本站会员才能查看附件,请 登录
#4
V菜鸟V2014-12-14 01:53
机构简化图
只有本站会员才能查看附件,请 登录
#5
V菜鸟V2014-12-14 02:02
这个附件里面什么都有的,前面那俩没视频的,谢谢了。
#6
xzlxzlxzl2014-12-14 09:14
在Timer1_Timer事件里加一句k2=k2+1就动起来了,另你在子程序jigoujisuan的a至f的运算没起作用,简化后代码如下:(全部覆盖你原代码运行即可)
程序代码:
Option Explicit
Const PI = 3.14159
Dim xa(0 To 360) As Double
Dim ya(0 To 360) As Double
Dim xb(0 To 360) As Double
Dim yb(0 To 360) As Double
Dim xc(0 To 360) As Double
Dim yc(0 To 360) As Double
Dim afai1(0 To 360) As Double
Dim afai2(0 To 360) As Double
Dim afai3(0 To 360) As Double
Dim xd As Double
Dim yd As Double
Dim L1 As Double
Dim L2 As Double
Dim L3 As Double
Dim L4 As Double
Dim W As Integer
Dim a20 As Integer
Dim a2 As Integer


Public Sub readdate()
L1 = Val(Text1.Text)
L2 = Val(Text2.Text)
L3 = Val(Text3.Text)
L4 = Val(Text4.Text)
xd = Val(Text5.Text)
yd = Val(Text6.Text)
W = Val(Text7.Text)
a20 = Val(Text8.Text)

End Sub
Public Sub jigoujisuan()
Dim k1 As Integer
For k1 = 0 To 360
a2 = 2 * k1 * W + a20
xa(k1) = L1 * Cos(k1 * PI / 180)
ya(k1) = L1 * Sin(k1 * PI / 180)
xb(k1) = L1 * Cos(k1 * PI / 180) + L2 * Cos(a2)
xb(k1) = L1 * Sin(k1 * PI / 180) + L2 * Sin(a2)
Next k1
End Sub
Public Function arcsin(x) As Double
arcsin = Atn(x / Sqr(1 - x * x))
End Function
For k1 = 0 To 360
afai1(k1) = arcsin(e)
afai2(k1) = Atn(f)
afai3(k1) = afai1(k1) - afai2(k1)
Next k1

For k1 = 0 To 360
xc = xd + L4 * Cos(afai3(k1))

yc = yd + L4 * Sin(afai3(k1))
Next k1

Public Sub chushiweizhi()
Picture1.Scale (-72, 72)-(72, -72)
Picture1.Line (0, 0)-(xa(0), ya(0)), RGB(0, 0, 0)
Picture1.Line (xa(0), ya(0))-(xb(0), yb(0)), RGB(0, 0, 0)
Picture1.Line (xb(0), yb(0))-(xc(0), yc(0)), RGB(0, 0, 0)
Picture1.Line (xc(0), yc(0))-(xd, yd), RGB(0, 0, 0)
Picture1.Circle (0, 0), 1, RGB(0, 0, 0)
Picture1.Circle (xa(0), ya(0)), 2, RGB(0, 0, 0)
Picture1.Circle (xb(0), yb(0)), 5, RGB(0, 0, 0)
Picture1.Circle (xc(0), yc(0)), 5, RGB(0, 0, 0)
Picture1.Circle (xd, yd), 3, RGB(0, 0, 0)
Dim k4 As Integer
For k4 = 0 To 359
Picture1.Line (xb(k4), yb(k4))-(xb(k4 + 1), yb(k4 + 1)), RGB(0, 0, 0)
Next k4
End Sub
Private Sub Command1_Click()
Call readdate
Call jigoujisuan
Timer1.Enabled = False
Call chushiweizhi
End Sub

Private Sub Command2_Click()
Timer1.Enabled = True
Picture1.Cls
End Sub

Private Sub Timer1_Timer()
Picture1.Scale (-72, 72)-(72, -72)
Static k2 As Integer
Dim k3 As Integer

 If k2 = 0 Then
    k3 = 359

 Else
    k3 = k2 - 1

 End If
If k2 = 360 Then k2 = 0
Picture1.Line (0, 0)-(xa(k3), ya(k3)), Picture1.BackColor
Picture1.Line (xa(k3), ya(k3))-(xb(k3), yb(k3)), Picture1.BackColor
Picture1.Line (xb(k3), yb(k3))-(xc(k3), yc(k3)), Picture1.BackColor
Picture1.Line (xc(k3), yc(k3))-(xd, yd), Picture1.BackColor
Picture1.Circle (0, 0), 1, Picture1.BackColor
Picture1.Circle (xa(k3), ya(k3)), 2, Picture1.BackColor
Picture1.Circle (xb(k3), yb(k3)), 5, Picture1.BackColor
Picture1.Circle (xc(k3), yc(k3)), 10, Picture1.BackColor
Picture1.Circle (xd, yd), 3, Picture1.BackColor

Picture1.Line (0, 0)-(xa(k2), ya(k2)), RGB(0, 0, 0)
Picture1.Line (xa(k2), ya(k2))-(xb(k2), yb(k2)), RGB(0, 0, 0)
Picture1.Line (xb(k2), yb(k2))-(xc(0), yc(k2)), RGB(0, 0, 0)
Picture1.Line (xc(k2), yc(k2))-(xd, yd), RGB(0, 0, 0)
Picture1.Circle (0, 0), 1, RGB(0, 0, 0)
Picture1.Circle (xa(k2), ya(k2)), 2, RGB(0, 0, 0)
Picture1.Circle (xb(k2), yb(k2)), 5, RGB(0, 0, 0)
Picture1.Circle (xc(k2), yc(k2)), 5, RGB(0, 0, 0)
Picture1.Circle (xd, yd), 3, RGB(0, 0, 0)
k2 = k2 + 1
End Sub
#7
V菜鸟V2014-12-14 13:54
回复 6楼 xzlxzlxzl
哈哈 ,不过说真的,它这真的动起来了,怎么动的那么抽象呀,谢谢了,关键不是我想要的运动规律呀,还有你看那个视频了没?我的最终目标是那个样子的运动的,你能帮忙想一下不?的确不能呀,a-f还是有用的因为他运动了的,只是可能有些地方没写好,,,,,
#8
lianyicq2014-12-15 08:49
上次回复说让仔细看看控件的属性,可能被忽略了.最新的工程我没细看.上次就有两个问题你没解决:
1 图形控件的SCALE问题。仔细学一学,它不是万能的,如果连长宽比例都没有规划,随意画个控件大小。程序怎么能够如你所愿。
2 三角函数问题,度和弧度问题,自己试试,在缺省坐标系和自定义坐标系下,ATN在不同象限的值。如何符合你的要求。
先把这两个问题透彻了,再说其它的。
要想实现有意思的想法,写代码前,一定要有流程图。出了问题,逐个环节检查。


这是按你条件作出来的B点运动,其它约束条件你并没有透彻.
只有本站会员才能查看附件,请 登录


[ 本帖最后由 lianyicq 于 2014-12-15 17:24 编辑 ]
#9
V菜鸟V2014-12-15 20:17
回复 8楼 lianyicq
嗯呢,的确,我还带再看看,这差距也太大了,恩恩,谢了。哎,,,,
#10
xzlxzlxzl2014-12-15 21:22
不懂机械,也不大会做三角函数运算,根据你给的视频给你模拟了一个,看能否有帮助。
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


程序代码:
Private Type PointApi
  x As Double
  y As Double
End Type
Dim activeP As PointApi, slaveP As PointApi '主动点和从动点坐标
Dim noteScale As Double     '斜边节点比例
Dim Angle As Integer        '角度

Private Sub Drawl(oS As PointApi, oE As PointApi)
  Pic1.Line (oS.x, oS.y)-(oE.x, oE.y), vbBlack
  Pic1.Circle (oS.x, oS.y), 30, vbBlue
  Pic1.Circle (oE.x, oE.y), 30, vbBlue
End Sub

Private Sub Drawp(oA As PointApi, oS As PointApi, nS As Double, Ag As Integer)
  '根据输入参数画机械图,oA主动点坐标,oS从动点坐标,nS从动臂动点分割比例
  Const PI = 3.1415926
  Dim l As Double, l1 As Double, l2 As Double, l3 As Double, i As Integer
  Dim o1 As PointApi, o2 As PointApi, o3 As PointApi
  Pic1.Cls
  l1 = oS.x - oA.x
  l = Sqr(2 * l1 ^ 2)
  l2 = nS * l
  l3 = l - l2
  l1 = l1 * 0.5
  o1.x = oA.x + l1 * Cos(Ag * PI / 180)
  o1.y = oA.y - l1 * Sin(Ag * PI / 180)
  o2.x = o1.x + l1 * Cos((360 - Ag + 180) * PI / 180)
  o2.y = o1.y - l1 * Sin((360 - Ag + 180) * PI / 180)
  For i = 0 To -270 Step -1
    o3.x = oS.x + l2 * Cos(i * PI / 180)
    o3.y = oS.y - l2 * Sin(i * PI / 180)
    l = Sqr((o3.x - o2.x) ^ 2 + (o3.y - o2.y) ^ 2)
    If Abs(l - l3) < 15 Then Exit For
  Next
  Drawl o1, oA
  Drawl o1, o2
  Drawl o2, o3
  Drawl o3, oS
  o3.x = o2.x
  o3.y = o2.y + 450
  Pic1.Line (o3.x - 150, o3.y)-(o3.x + 150, o3.y + 300), vbRed, BF
  Drawl o3, o2
End Sub

Private Sub readCfg()
  '参数读取
  Dim l As Double
  activeP.x = Val(Text1) * 15
  activeP.y = Val(Text2) * 15
  slaveP.x = activeP.x + Val(Text3) * 15
  slaveP.y = activeP.y
  noteScale = Val(Text4)
  If noteScale > 0.5 Or noteScale < 0.15 Then noteScale = 0.3   '从动臂分割比例必须小于0.5大于0.15,否则转动会卡死
  Text4 = noteScale
End Sub

Private Sub Command1_Click()
  If Command1.Caption = "转动" Then
    Timer1.Interval = 10
    Timer1.Enabled = True
    Command1.Caption = "暂停"
  Else
    Timer1.Interval = 0
    Timer1.Enabled = False
    Command1.Caption = "转动"
  End If
End Sub

Private Sub Command2_Click()
  readCfg
  Drawp activeP, slaveP, noteScale, Angle
End Sub

Private Sub Form_Load()
  Command2_Click
  Angle = 270
  Drawp activeP, slaveP, noteScale, Angle
End Sub

Private Sub Timer1_Timer()
  Drawp activeP, slaveP, noteScale, Angle
  Angle = Angle + 1
  If Angle > 359 Then Angle = 0
End Sub
#11
xzlxzlxzl2014-12-16 07:22
回复 10楼 xzlxzlxzl
360度就是0度,以下两句:
  o2.x = o1.x + l1 * Cos((360 - Ag + 180) * PI / 180)
  o2.y = o1.y - l1 * Sin((360 - Ag + 180) * PI / 180)
修改为
  o2.x = o1.x + l1 * Cos((180 - Ag) * PI / 180)
  o2.y = o1.y - l1 * Sin((180 - Ag) * PI / 180)
结果是一样的,描述的是移栽臂和主动臂转动方向相反,相位隔180度。
之所以说本程序是虚拟机械动作,是因为我默认了移栽臂和主动臂(转动方向相反,相位隔180度)的这种转动关系,实际上,在这个机械运动中,只有主动臂的动作是确定的,其他臂的动作必须结合主动臂的动作进行拟合,移栽臂的动作是主动臂和约束臂共同作用的结果,同时默认了主动臂和移栽臂的动作是本木倒置的分析方法,可简化运算步骤,不影响结果的正确性。
#12
V菜鸟V2014-12-16 09:48
回复 11楼 xzlxzlxzl
,,,,疯了,,,,,,醉了,,,怎么就做出了那???疯了,,, 啊啊啊 啊,,,,厉害,,,,谢谢了,实在谢谢了,还是我太弱了,哎,还带在看看你的代码,,太难了,,,,谢了,厉害,给跪了,,,,,,
#13
lianyicq2014-12-16 11:32
回复 10楼 xzlxzlxzl
版主很快!很细心!很热心!很暴力!很强大!恐怕仔细拜读过代码的网友都受益非浅。
o3坐标是试探出来的,如果调整为正向计算得出,是否更能帮助运动分析。
#14
xzlxzlxzl2014-12-16 12:50
回复 13楼 lianyicq
嘿嘿,数学没学好,不愿再去复习三角函数。已知三角形三边边长和两个顶点坐标,求第三个顶点坐标,我推论的要解一元二次方程,肯定有两个解,我还要判断舍弃一个解。想着麻烦,不如一个循环求误差,误差最小的肯定就是正解了,方便。
能认真读并理解别人的代码,前途无可限量,加油!
#15
V菜鸟V2014-12-16 13:31
回复 14楼 xzlxzlxzl
我可以说看不懂??啊 啊啊 啊  ,差距呀,,,没学过呀,,,,,啊 啊啊 啊   ,无奈,您也鼓励我一下嘛,,,,,伤心了,,,哎,差距,,,
#16
V菜鸟V2014-12-16 13:34
回复 13楼 lianyicq
嘿嘿,加油,嘿嘿,,,,,好感动呀,,,哎,,,
#17
V菜鸟V2014-12-24 19:29
回复 14楼 xzlxzlxzl
大哥,我这几天仔细看了一下,有些地方不太明白,特别是l和l1和l2和l3的具体关系不清楚,还有具体的在图中不能相应找到,麻烦您具体标注一下,谢谢。

附件内容:1:具体自己分析图。2:疑难重点,不知道到底怎么运算规律,期望您能具体指点一下,谢谢了,VB新人实在看不懂,万分感谢。跪了,,,,
只有本站会员才能查看附件,请 登录
   
只有本站会员才能查看附件,请 登录
#18
xzlxzlxzl2014-12-24 23:04
只有本站会员才能查看附件,请 登录
#19
V菜鸟V2014-12-24 23:19
回复 18楼 xzlxzlxzl
谢谢,再看看,恩恩,谢谢了。
1