c++飞剪机构轨迹绘制

在这里插入图片描述

1.	#include<iostream>  
2.	#include<math.h>  
3.	#include<conio.h>  
4.	#include<Windows.h>  
5.	#include<graphics.h>   
6.	#define PI 3.14159265358  
7.	using namespace std;  
8.	double radianch(double theta)  
9.	{  
10.	    return PI * theta/180;  
11.	}  
12.	double anglech(double theta)  
13.	{  
14.	    return 180 * theta/PI;  
15.	}  
16.	double sins(double theta)  
17.	{  
18.	    return sin(radianch(theta));  
19.	}  
20.	double coss(double theta)  
21.	{  
22.	    return cos(radianch(theta));  
23.	}  
24.	//平方  
25.	double ecf(double L)  
26.	{  
27.	    return L * L;  
28.	}  
29.	double chg(double L)  
30.	{  
31.	    return L * 1000;  
32.	}  
33.	  
34.	void codinates(double a, double b, double c, double d, double e, double f, double alpha2, double alpha3, double alpha4)  
35.	{  
36.	    double fai1;  
37.	    double xAD, xBD, yAD, yBD, Jdbx, LBD, Jdbc, Jbdc, Jbdy;  
38.	    double xE, yE, xF, yF;  
39.	    //int graphdriver = DETECT;  
40.	    //int graphmode, x;  
41.	    initgraph(640, 480);  
42.	    for (fai1 = 0; fai1 <= 360; fai1+=0.1)  
43.	    {     
44.	        yAD = d * sins(alpha4);  
45.	        xAD = d * coss(alpha4);  
46.	        xBD = xAD - a * coss(fai1);  
47.	        yBD = yAD - a * sins(fai1);  
48.	        Jdbx = anglech(atan(yBD / xBD));  
49.	        LBD = yBD / sins(Jdbx);  
50.	        Jdbc = anglech(acos((ecf(LBD) + ecf(b) - ecf(c)) / (2 * LBD * b)));  
51.	        Jbdc = anglech(acos((ecf(LBD) + ecf(c) - ecf(b)) / (2 * LBD * c)));  
52.	        Jbdy = anglech(atan(xBD / yBD));  
53.	        //真实坐标值  
54.	        //xE = a * coss(fai1) + e * coss(alpha2 - Jdbc + Jdbx);  
55.	        //yE = a * sins(fai1) + e * sins(alpha2 - Jdbc + Jdbx);  
56.	        //xF = d * coss(alpha4) + f * coss(270 - alpha3 - Jbdy + Jbdc);  
57.	        //yF = d * sins(alpha4) + f * sins(270 - alpha3 - Jbdy + Jbdc);  
58.	        //除以5是为了缩小轨迹,不然所需要的图框范围过大  
59.	        //因为画图坐标是以窗口为原点,无负坐标,加200是为了是坐标都在第一象限  
60.	        xE = 200 + (a * coss(fai1) + e * coss(alpha2 - Jdbc + Jdbx)) / 5;  
61.	        yE = 200 + (a * sins(fai1) + e * sins(alpha2 - Jdbc + Jdbx)) / 5;  
62.	        xF = 200 + (d * coss(alpha4) + f * coss(270 - alpha3 - Jbdy + Jbdc)) / 5;  
63.	        yF = 200 + (d * sins(alpha4) + f * sins(270 - alpha3 - Jbdy + Jbdc)) / 5;  
64.	        //cout << xF;  
65.	        //横向x轴,纵向y轴  
66.	        putpixel(xE, yE, RED);  
67.	        putpixel(xF, yF, YELLOW);  
68.	    }  
69.	    circle(200, 200, 2);  
70.	    circle(311.4738, 421.8746, 2);  
71.	    circle(264.3488, 111.1246, 2);  
72.	    circle(238.691, 200, 2);  
73.	    line(200, 200, 238.691, 200);  
74.	    line(311.4738, 421.8746, 253.7075, 294.64961);  
75.	    line(238.691, 200, 244.953, 293.9333);  
76.	    line(311.4738, 421.8746, 264.3488, 111.1246);  
77.	    line(238.691, 200, 264.3488, 111.1246);  
78.	    getchar();  
79.	    closegraph();          // 关闭绘图窗口  
80.	}  
81.	  
82.	void calculate(double k, double gamma2, double fai, double alpha4)  
83.	{  
84.	    //四杆机构相对尺寸计算  
85.	    double theta, theta0, gamma1, A, B, N, a0, b0, c0;  
86.	    theta = 180 * (k - 1) / (k + 1);  
87.	    gamma1 = fai + gamma2 - theta;  
88.	    theta0 = anglech( atan((sins(gamma2) * sins(theta))/ (sins(gamma1) - sins(gamma2) * coss(theta))));  
89.	    A = coss(theta + theta0) * sins(gamma2 + theta0);  
90.	    B = sins(gamma2) + sins(theta0) * coss(gamma1 + theta + theta0);  
91.	    N = 2 * sins(gamma2) * coss(theta + theta0);  
92.	    a0 = (A - B) / N;  
93.	    b0 = (A + B) / N;  
94.	    c0 = sins(theta0) / sins(gamma2);  
95.	    //检查调试  
96.	    //cout << a0 <<" "<< b0 <<" "<< c0 << endl;  
97.	    //计算四杆机构的绝对尺寸  
98.	    int L = 1,t;  
99.	    double Vt = 2, delta = 1.02, k1 = 1.1,n1,omega1,a,b,c,d,mu_L;  
100.	    t = L / Vt;  
101.	    n1 = 60 * Vt / L;  
102.	    omega1 = 2 * PI * Vt / L;  
103.	    a = k1 * delta * L / (2 * PI);  
104.	    mu_L = a / a0;  
105.	    b = mu_L * b0;  
106.	    c = mu_L * c0;  
107.	    d = mu_L;  
108.	    //cout << a <<" "<< b <<" "<< c << endl;  
109.	    //刀刃位置确定  
110.	    int h = 250, deta_h = 5, deta_b = 1;  
111.	    double f, e, deta_alpha, alpha3, Lce, Lcf, alpha2, Lcef, alpha2_x, alpha3_x;  
112.	    f = 1000*d * coss(alpha4) - h;//乘1000是为了单位转换  
113.	    e = sqrt(ecf(f - deta_h) + ecf(chg(d)- chg(a)) - 2 * (f - deta_h) * (chg(d) - chg(a))*coss(alpha4));  
114.	    deta_alpha = anglech(acos((ecf(c) + ecf(d - a) - ecf(b)) / (2 * c * (d - a))));  
115.	    alpha3 = deta_alpha + alpha4;  
116.	    Lce = sqrt(ecf(chg(c)) + ecf(f - deta_h) - 2 * chg(c) * (f - deta_h) * coss(alpha3));  
117.	    Lcf = sqrt(ecf(chg(c)) + ecf(f) - 2 * chg(c) * (f) * coss(alpha3));  
118.	    Lcef = (Lce + Lcf) / 2;  
119.	    alpha2_x = anglech(acos((ecf(chg(b)) + ecf(e) - ecf(Lcef)) / (2 * chg(b) * e)));  
120.	    alpha3_x = anglech(acos((ecf(chg(c)) + ecf(f) - ecf(Lcef)) / (2 * chg(c) * f)));  
121.	    //cout << alpha2_x << " " << alpha3_x << endl;  
122.	    //剪切角φ1(0)的确定  
123.	    double Jbec, Jdec, Jbed, Jdab, Lbd, fai10;  
124.	    Jbec = anglech(acos((ecf(e) + ecf(Lcef) - ecf(chg(b))) / (2 * e * Lcef)));  
125.	    Jdec = anglech(acos((ecf(f) + ecf(Lcef) - ecf(chg(c))) / (2 * f * Lcef)));  
126.	    Jbed = Jbec + Jdec;  
127.	    Lbd = sqrt(ecf(e) + ecf(f) - 2 * e * f * coss(Jbed));  
128.	    Jdab = anglech(acos((ecf(chg(a)) + ecf(chg(d)) - ecf(Lbd)) / (2 * chg(a) * chg(d))));  
129.	    fai10 = alpha4 - Jdab;  
130.	    //cout << fai10;  
131.	    //调整上下刀刃水平速度误差  
132.	    double faii, fai3, fai2, faiE, deta_faiE, alpha4_x, fai10_x, fai2_x, fai3_x;  
133.	    faii = anglech(atan((d * sins(alpha4) - a * sins(fai10)) / (d * coss(alpha4) - a * coss(fai10))));  
134.	    fai3 = faii + (360-anglech(acos((ecf(chg(b)) - ecf(Lbd) - ecf(chg(c))) / (2 * Lbd * chg(c)))));  
135.	    fai2 = anglech(atan((Lbd * sins(faii) + chg(c) * sins(fai3)) / (Lbd * coss(faii) + chg(c) * coss(fai3))));  
136.	    faiE = anglech(atan((e * sins(fai2 + alpha2_x) - chg(b) * sins(fai2)) / (e * coss(fai2 + alpha2_x) - chg(b) * coss(fai2))));  
137.	    deta_faiE = faiE - 90;  
138.	    alpha4_x = alpha4 - deta_faiE;  
139.	    fai10_x = fai10 - deta_faiE;  
140.	    fai2_x = fai2 - deta_faiE;  
141.	    fai3_x = fai3 - deta_faiE;  
142.	    //cout << fai3_x;  
143.	    //调整刀刃与钢材运动速度同步  
144.	    double omega2, omega3, VEt, VFt, Vdao, detlai, k1_x, a_x, mu_x, b_x, c_x, d_x, e_x, f_x;  
145.	    omega2 = (-chg(a) * omega1 * sins(fai10_x - fai3_x)) / (chg(b) * sins(fai2_x - fai3_x));  
146.	    omega3 = (chg(a) * omega1 * sins(fai10_x - fai2_x)) / (chg(c) * sins(fai3_x - fai2_x));  
147.	    VEt = chg(a) * omega1 * coss(fai10_x) + e * omega2 * coss(fai2_x + alpha2_x);  
148.	    VFt = f * omega3 * coss(fai3_x - alpha3_x);  
149.	    Vdao = (VEt + VFt) / 2;  
150.	    detlai = Vdao / Vt;  
151.	    k1_x = chg(a) * omega1 / Vdao;  
152.	    a_x = chg(k1_x * delta * Vt / omega1);  
153.	    mu_x = a_x / chg(a);  
154.	    b_x = chg(mu_x * b);  
155.	    c_x = chg(mu_x * c);  
156.	    d_x = chg(mu_x * d);  
157.	    f_x = mu_x * f;  
158.	    e_x = mu_x * e;  
159.	    //cout << alpha2_x;     
160.	    //计算坐标  
161.	    codinates(a_x, b_x, c_x, d_x, e_x, f_x, alpha2_x, alpha3_x, alpha4_x);  
162.	}  
163.	  
164.	int main()  
165.	{  
166.	    double k, gamma2, fai, alpha4;  
167.	    //cin >> k >> gamma2 >> fai >> alpha4;  
168.	    k = 1.16; gamma2 = 72; fai = 18; alpha4 = 26;  
169.	    calculate(k, gamma2, fai, alpha4);  
170.	    system("pause");  
171.	    return 0;  
172.	}  

其他点的坐标,我直接上的数据,直接算出来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值