图3-10连杆机构动画程序
! 图3-10的动画程序
! 本TB 程序见“DONG3-10.TRU ”
! 若要输出图3-10连杆机构从动件的具体输出数值,见“图3-10连杆机构计算程序. DOC ”
SET WINDOW -22, 58, -35, 23 !窗口的长宽比应该与屏幕窗口的一样,大约为
4:3,这样画出来的图形才不会变形。
OPTION NOLET
W1=10 :XE=0:YE=0:XB=41:YB=0:XF=0:YF=-34:LED=14
LDA=39:LBA=28:ADC=35:LDC=15:LFG=55:R=0.5
FOR I =0 TO 3600 STEP 2 !准备转10圈,原动件每次转2度。
CALL LINK(XE, YE, 0, 0, 0, 0, I *PI/180, W1, 0, LED, XD, YD, VDX,
VDY , ADX, ADY)
CALL RRR(XD, YD, VDX, VDY, ADX, ADY, XB, YB, 0, 0, 0, 0, LDA, LBA,
QDA, W3, E3, QBA, W2, E2)
CALL LINK(XD, YD, VDX, VDY, ADX, ADY, QDA, W3, E3, LDA, XA, YA,
V AX, VAY , AAX, AAY) !为了画动画,必须求出A 点坐标
QDC=QDA+ADC*PI/180
CALL LINK(XD, YD, VDX, VDY, ADX, ADY, QDC, W3, E3, LDC, XC, YC,
VCX, VCY, ACX, ACY)
CALL RPR(0, XF,YF,0,0,0,0, XC,YC,VCX,VCY, ACX, ACY, 0, QFG, W4, E4) CALL LINK(XF,YF,0,0,0,0,QFG,W4,E4, LFG, XG,YG ,VGX,VGY ,AGX, AGY) CLEAR ! 清屏幕
PLOT XE,YE;XD,YD;XA,YA;XB,YB ! 画折线 EDAB
PLOT XD,YD;XC,YC;XA,YA ! 画折线DCA
PLOT XF,YF;XG,YG ! 画折线FG
BOX CIRCLE -R,R,-R,R ! 在Xmin=-R, Xmax=R,Ymin=-R,Ymax=R的矩形内画椭圆, 即:以(0,0)为圆心, 以R 为半径画圆(转动副)
PLOT TEXT, AT XE+1,YE:"E" ! 在E 处写字符E
BOX CIRCLE XD-R,XD+R,YD-R,YD+R ! 在Xmin=XD-R, Xmax=XD+R,Ymin=YD-R,Ymax=YD+R的矩形内画椭圆, 即:以(XD,YD)为圆心, 以R 为半径画圆.
PLOT TEXT, AT XD+1,YD:"D" ! 在D 处写字符D
BOX CIRCLE XA-R,XA+R,YA-R,YA+R
PLOT TEXT, AT XA+1,YA:"A"
BOX CIRCLE XB-R,XB+R,YB-R,YB+R
PLOT TEXT, AT XB+1,YB:"B"
BOX CIRCLE XF-R,XF+R,YF-R,YF+R
PLOT TEXT, AT XF+1,YF:"F"
BOX CIRCLE XC-R,XC+R,YC-R,YC+R
PLOT TEXT, AT XC+1,YC:"C"
PLOT TEXT, AT XG+1,YG:"G"
PAUSE 0.2 ! 画完每幅图后, 暂停0.2秒.
NEXT I
END
SUB LINK(XA, YA, VAX, VAY , AAX, AAY, QAB, W, E, L, XB, YB, VBX, VBY,
ABX, ABY)
XB=XA+L*COS(QAB)
YB=YA+L*SIN(QAB)
VBX=VAX-L*SIN(QAB)*W
VBY=VAY+L*COS(QAB)*W
ABX=AAX-L*COS(QAB)*W^2-L*SIN(QAB)*E
ABY=AAY-L*SIN(QAB)*W^2+L*COS(QAB)*E
END SUB
SUB RRR(XA, YA, VAX, VAY , AAX, AAY, XC, YC, VCX, VCY, ACX, ACY, LAB,
LCB, QAB, WAB, EAB, QCB, WCB, ECB)
LAC=SQR((XC-XA)^2+(YC-YA)^2)
COSQAC=(XC-XA)/LAC
SINQAC=(YC-YA)/LAC
QAC=ANGLE(COSQAC,SINQAC)
COSQCBA=(LAB^2+LAC^2-LCB^2)/(2*LAB*LAC)
SINQCBA=SQR(1-COSQCBA^2)
QCBA=ANGLE(COSQCBA,SINQCBA)
QAB=QAC-QCBA
XB=XA+LAB*COS(QAB)
YB=YA+LAB*SIN(QAB)
COSQCB=(XB-XC)/LCB
SINQCB=(YB-YC)/LCB
QCB=ANGLE(COSQCB,SINQCB)
WAB=((VAX-VCX)*COSQCB+(VAY-VCY)*SINQCB)/LAB/SIN(QAB-QCB) WCB=((VAX-VCX)*COS(QAB)+(VAY-VCY)*SIN(QAB))/LCB/SIN(QAB-QCB) G=AAX-ACX-LAB*COS(QAB)*WAB^2+LCB*COSQCB*WCB^2 F=AAY-ACY-LAB*SIN(QAB)*WAB^2+LCB*SINQCB*WCB^2
EAB=(G*COSQCB+F*SINQCB)/LAB/SIN(QAB-QCB)
ECB=(G*COS(QAB)+F*SIN(QAB))/LCB/SIN(QAB-QCB)
END SUB
SUB RPR(M, XA, YA, VAX, VAY , AAX, AAY, XC, YC, VCX, VCY, ACX, ACY,
LAB, QBD, W, E)
LAC=SQR((XC-XA)^2+(YC-YA)^2)
COSQAC=(XC-XA)/LAC
SINQAC=(YC-YA)/LAC
QAC=ANGLE(COSQAC,SINQAC)
LBC=SQR(LAC^2-LAB^2)
QACB=ATN(LAB/LBC)
QBD=QAC+M*QACB
DELTA=-(YC-YA)*SIN(QBD)-(XC-XA)*COS(QBD)
DELTAW=(VCX-VAX)*SIN(QBD)-(VCY-VAY)*COS(QBD) DELTA V=-(YC-YA)*(VCY-VAY)-(XC-XA)*(VCX-VAX) W=DELTAW/DELTA
VLBC=DELTAV/DELTA
T1=(ACX-AAX)+(VCY-VAY)*W+SIN(QBD)*W*VLBC T2=(ACY-AAY)-(VCX-VAX)*W-COS(QBD)*W*VLBC DELTAE=T1*SIN(QBD)-T2*COS(QBD)
E=DELTAE/DELTA
END SUB