目录

  • 题目要求
  • 公式推导和计算
  • 计算流程图
  • pyhton代码
  • 生成图表一览

题目要求

公式推导和计算

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210610210803488.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjM3NjE4OA==,size_16,color_FFFFFF,t_70#pic_center

计算流程图

pyhton代码

from abc import ABCMeta, abstractmethod
from mpl_toolkits import axisartist
import math
from matplotlib import pyplot as plt
import matplotlib.font_manager as font_manager
from matplotlib.pyplot import MultipleLocator
import numpy as npclass travel():__mata_class_=ABCMetadef __init__(self,**kwargs):self.h=kwargs.get("h")self.Phi=kwargs.get("Phi")@abstractmethoddef state_phi(self):passclass sin_travel(travel):def __init__(self,**kwargs):super().__init__(**kwargs)self.push_travel=kwargs.get("push_travel")def state_phi(self,phi):Phi=self.Phi*math.pi/180phi=phi*math.pi/180if (self.push_travel):return [self.h*(phi/Phi-math.sin(2*math.pi*phi/Phi)/(2*math.pi)),self.h*(1-math.cos(2*math.pi*phi/Phi))/Phi,self.h*2*math.pi*math.sin(2*math.pi*phi/Phi)/Phi**2]else:return [self.h*(1-phi/Phi+math.sin(2*math.pi*phi/Phi)/(2*math.pi)),-self.h*(1-math.cos(2*math.pi*phi/Phi))/Phi,-self.h*2*math.pi*math.sin(2*math.pi*phi/Phi)/Phi**2]class pause_travel(travel):def state_phi(self,phi):return [self.h,0,0]class cam():def __init__(self,Law_of_motion:list,**kwarg):self.travel=Law_of_motionself.e=kwarg.get("e")self.r_0=kwarg.get("r_0")self.r_r=kwarg.get("r_r")self.omega=kwarg.get("omega")if(self.r_0!=None and self.e!=None):self.s0=math.sqrt(self.r_0**2+self.e**2)#求位移类速度类加速度def get_motion_state_phi(self,phi)->list:i=0while(phi>self.travel[i].Phi):phi-=self.travel[i].Phii+=1return self.travel[i].state_phi(phi)def get_motion_state(self,phi)->list:def tf(i):i+=1 return i-1i=0return list(map(lambda x:x*self.omega**tf(i),self.get_motion_state_phi(phi)))def get_pressure_angle(self,phi):state_phi=self.get_motion_state_phi(phi)return math.atan(abs(state_phi[1]-self.e)/\(self.s0+state_phi[0]))*180/math.pidef get_theoretical_outline(self,phi)->tuple:t=self.s0+self.get_motion_state_phi(phi)[0]phi=phi*math.pi/180return (-t*math.sin(phi)-self.e*math.cos(phi),t*math.cos(phi)-self.e*math.sin(phi))def get_theoretical_outline_dphi(self,phi)->tuple:state=self.get_motion_state_phi(phi)t1=self.s0+state[0]t2=state[1]-self.ephi=phi*math.pi/180return (-t1*math.cos(phi)-t2*math.sin(phi),-t1*math.sin(phi)+t2*math.cos(phi))def get_theoretical_outline_ddphi(self,phi)->tuple:state=self.get_motion_state_phi(phi)phi=phi*math.pi/180t1=2*state[1]-self.et2=state[2]-self.s0-state[0]return (-t1*math.cos(phi)-t2*math.sin(phi),-t1*math.sin(phi)+t2*math.cos(phi))def get_rho(self,phi):(dx,dy)=self.get_theoretical_outline_dphi(phi)(ddx,ddy)=self.get_theoretical_outline_ddphi(phi)return math.sqrt(dx**2+dy**2)**3/(dx*ddy-dy*ddx)def get_partical_outline(self,phi)->tuple:t=math.sqrt(self.get_theoretical_outline_dphi(phi)[0]**2+\self.get_theoretical_outline_dphi(phi)[1]**2)t1=self.get_theoretical_outline_dphi(phi)[1]/tt2=self.get_theoretical_outline_dphi(phi)[0]/treturn (self.get_theoretical_outline(phi)[0]-self.r_r*t1,\self.get_theoretical_outline(phi)[1]+self.r_r*t2)def set_co_axis(ax:axisartist.Subplot,title="",xlabel="",ylabel="",pxl=(0,0),pyl=(0,0)):ax.axis[:].set_visible(False)ax.axis["x"] = ax.new_floating_axis(0,0)ax.axis["x"].set_axisline_style("->", size = 1.0)ax.axis["y"] = ax.new_floating_axis(1,0)ax.axis["y"].set_axisline_style("-|>", size = 1.0)ax.axis["x"].set_axis_direction("top")ax.axis["y"].set_axis_direction("right")ax.set_xticks([ 0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])ax.set_xticklabels([ "", 'π/2', 'π', '3π/2', '2π' ])ax.text(pxl[0],pxl[1],xlabel,ha="center",va="center")ax.text(pyl[0],pyl[1],ylabel,ha="center",va="center")ax.set_title(title)if (__name__=="__main__"):h=55Phi_0_1=115Phi_0_2=135Phi_s_1=80Phi_s_2=30alpha_1=30alpha_2=70omega=1Law_of_motion=[sin_travel(h=h,Phi=Phi_0_1,push_travel=True),pause_travel(h=h,Phi=Phi_s_1),sin_travel(h=h,Phi=Phi_0_2,push_travel=False),pause_travel(h=0,Phi=Phi_s_2)]Cam=cam(Law_of_motion,omega=1)mo_data=[[],[],[]]mo_dphi_data=[[],[],[]]for i in range(0,360):mo_dphi_data=list(map(lambda x,y:x+[y],mo_dphi_data,Cam.get_motion_state_phi(i)))mo_data=list(map(lambda x,y:x+[y],mo_data,Cam.get_motion_state(i)))y1=mo_dphi_data[0][i]-math.tan((90-alpha_1)*math.pi/180)*mo_dphi_data[1][i]y2=mo_dphi_data[0][i]-math.tan((90+alpha_2)*math.pi/180)*mo_dphi_data[1][i]if (i==0):py1,py2,f1,f2=y1,y2,0,0else:if(f1!=-1):if(f1==1 and py1<y1):f1,s_1,x_1=-1,mo_dphi_data[0][i-1],mo_dphi_data[1][i-1]elif(f1==0 and y1<py1):f1=1py1=y1if(f2!=-1):if(f2==1 and py2<y2):f2,s_2,x_2=-1,mo_dphi_data[0][i-1],mo_dphi_data[1][i-1]elif(f2==0 and y2<py2):f2=1py2=y2            fig1=plt.figure(figsize=(10,10),dpi=80)phi_x=np.linspace(0,2*math.pi,360)s_phi=axisartist.Subplot(fig1,3,1,1)v_phi=axisartist.Subplot(fig1,3,1,2)a_phi=axisartist.Subplot(fig1,3,1,3)s_phi.plot(phi_x,mo_data[0])v_phi.plot(phi_x,mo_data[1])a_phi.plot(phi_x,mo_data[2])set_co_axis(s_phi,"s(φ)","φ","s",(2.15*math.pi,3),(0.1,60))set_co_axis(v_phi,"v(φ)","φ","v",(2.15*math.pi,3),(0.1,65))set_co_axis(a_phi,"a(φ)","φ","a",(2.15*math.pi,3),(0.1,100))fig1.add_axes(s_phi)fig1.add_axes(v_phi)fig1.add_axes(a_phi)X_Phi=[0,Phi_0_1,Phi_0_1+Phi_s_1,Phi_0_1+Phi_s_1+Phi_0_2,360]for i in range(0,4):a_phi.arrow((X_Phi[i+1]+X_Phi[i])*math.pi/360, -100, (X_Phi[i+1]-X_Phi[i])*math.pi/360, 0,width=0.01,length_includes_head=True, head_width=3,head_length=0.1,fc='r',color='b',ec='b')a_phi.arrow((X_Phi[i+1]+X_Phi[i])*math.pi/360, -100, -(X_Phi[i+1]-X_Phi[i])*math.pi/360, 0,width=0.01,length_includes_head=True, head_width=3,head_length=0.1,fc='r',color='b',ec='b') for X in [Phi_0_1,Phi_0_1+Phi_s_1,Phi_0_1+Phi_s_1+Phi_0_2,360]:a_phi.plot([X*math.pi/180,X*math.pi/180],[-105,0],c="black",linewidth=1)a_phi.text((X_Phi[0]+X_Phi[1])*math.pi/360,-108,r"$Φ_0$",ha='center',va='center')a_phi.text((X_Phi[2]+X_Phi[1])*math.pi/360,-108,r"$Φ_s$",ha='center',va='center')a_phi.text((X_Phi[2]+X_Phi[3])*math.pi/360,-108,r"${Φ_0}^{'}$",ha='center',va='center')a_phi.text((X_Phi[3]+X_Phi[4])*math.pi/360,-108,r"${Φ_s}^{'}$",ha='center',va='center')fig2=plt.figure(figsize=(10,10),dpi=80)ds_dphi_s=axisartist.Subplot(fig2,1,1,1)set_co_axis(ds_dphi_s,"","ds/dφ","s",(67,3),(3,65))ds_dphi_s.set_xticks(np.linspace(-40,60,11))ds_dphi_s.set_yticks(np.linspace(-100,60,17))x1=np.linspace(0,60,600)x2=np.linspace(-50,50,1000)x3=x1s1=math.tan((90-alpha_1)*math.pi/180)*(x1-x_1)+s_1s2=math.tan((90+alpha_2)*math.pi/180)*(x2-x_2)+s_2s3=-math.tan((90-alpha_1)*math.pi/180)*x3ds_dphi_s.plot(mo_dphi_data[1],mo_dphi_data[0])ds_dphi_s.plot(x1,s1)ds_dphi_s.plot(x2,s2)ds_dphi_s.plot(x3,s3)ds_dphi_s.text(67,3,"ds/dφ",ha="center",va="center")ds_dphi_s.text(3,65,"s",ha="center",va="center")e=-(s_1-math.tan((90-alpha_1)*math.pi/180)*x_1)/(2*math.tan((90-alpha_1)*math.pi/180))s_0=(s_1-math.tan((90-alpha_1)*math.pi/180)*x_1)/2ds_dphi_s.plot(e,s_0,marker='o')ds_dphi_s.annotate("(%.2f,%.2f)" % (e,s_0), xy=(e,s_0),xytext=(5,0),textcoords='offset points')ds_dphi_s.set_aspect(1)ds_dphi_s.grid()fig2.add_axes(ds_dphi_s)Cam.e,Cam.s0,Cam.r_0=e,-s_0,math.sqrt(e**2+s_0**2)alpha_data=[]rho_data=[]for i in range(0,360):alpha_data.append(Cam.get_pressure_angle(i))rho_data.append(Cam.get_rho(i))if(i==0 or (rho_data[i]>0 and rho_data[i]<rho_min)):rho_min=rho_data[i]fig3=plt.figure(figsize=(10,10),dpi=80)alpha_phi=axisartist.Subplot(fig3,2,1,1)rho_phi=axisartist.Subplot(fig3,2,1,2)set_co_axis(alpha_phi,R"e=%.2f $r_0$=%.2f"%(e,math.sqrt(e**2+s_0**2)),"φ","α",(2.15*math.pi,0.5),(0.1,53))set_co_axis(rho_phi,'ρ(φ)',"φ","ρ",(2.15*math.pi,0.5),(0.1,1200))alpha_phi.plot(phi_x,alpha_data)rho_phi.plot(phi_x,rho_data)fig3.add_axes(alpha_phi)fig3.add_axes(rho_phi)Cam.r_r=rho_min*0.4x_data=[]y_data=[]px_data=[]py_data=[]for i in range(0,360):x_data.append(Cam.get_theoretical_outline(i)[0])y_data.append(Cam.get_theoretical_outline(i)[1])px_data.append(Cam.get_partical_outline(i)[0])py_data.append(Cam.get_partical_outline(i)[1])fig4=plt.figure(figsize=(10,10),dpi=80)x_y=plt.subplot(1,1,1)x_y.set_aspect(1)x_y.grid()x_y.xaxis.set_major_locator(MultipleLocator(10))x_y.yaxis.set_major_locator(MultipleLocator(10))l1,=x_y.plot(x_data,y_data,label="理论廓线",linestyle='--')l2,=x_y.plot(px_data,py_data,label='实际廓线')x_y.set_title(r'${ρ}_{min}=$'+'%.2f\n'%(rho_min)+r'${r}_{r}={ρ}_{min}*0.4=$'+'%.2f\n'%(rho_min*0.4))font=font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')fig4.legend(handles=[l1,l2],labels=['理论廓线','实际廓线'],loc=[0.15,0.72],prop=font)fig4.add_axes(x_y)plt.show()

生成图表一览





哈工大机械原理凸轮机构大作业相关推荐

  1. 哈工大机械原理连杆机构大作业

    目录 题目要求 公式推导和计算 计算流程图 python代码 生成图表一览 题目要求 公式推导和计算 计算流程图 python代码 import math from os import close, ...

  2. 哈工大2021春计算机系统大作业 程序人生-Hello’s P2P

          计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算机类 学     号 1190200613 班     级 1903004 学       生 ...

  3. 哈工大2022春计算机系统大作业:程序人生-Hello‘s P2P

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算机类 学   号 120L021305 班   级 2003002 学       生 李一凡 指 导 教 ...

  4. 哈工大2022春CSAPP大作业-程序人生(Hello‘s P2P)

    摘  要 本论文研究了hello.c这一简单c语言文件在Linux系统下的整个生命周期,以其原始程序开始,依次深入研究了编译.链接.加载.运行.终止.回收的过程,从而了解hello.c文件的" ...

  5. 哈工大 2021春 计算机系统 大作业程序人生

    计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机 学 号 1190200828 班 级 1936601 学 生 赵英帅 指 导 教 师 刘宏伟 计算机科学与技术学院 202 ...

  6. 哈工大2022秋计算机系统大作业——程序人生

    目录 第1章 概述 1.1 Hello简介 1.2 环境与工具 1.3 中间结果 1.4 本章小结 第2章 预处理 2.1 预处理的概念与作用 2.2在Ubuntu下预处理的命令 2.3 Hello的 ...

  7. 哈工大 2021春 计算机系统 大作业 L190201101-朴仁洪

    @ 计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机类 学 号 L190201101 班 级 1903005 学 生 朴仁洪 指 导 教 师 史先俊 计算机科学与技术学院 ...

  8. 编译原理分析器大作业之字幕分析器

    写这篇文章的主要目的呢是分享一下编译原理大作业--电影字幕分析器,分享一下我的做法,可能采用的做法不是特别好的用法,希望各位多多指点,觉得文章不错给点小赞赞喔!!! 题目介绍 写一个srt字幕解释器, ...

  9. 哈工大2022春计算机系统大作业

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算机类 学   号 班   级 学       生 指 导 教 师 计算机科学与技术学院 2021年5月 摘 ...

最新文章

  1. 从编译到执行,C++如何开发SIMD友好的代码?
  2. 【数据结构与算法】浅谈稀疏矩阵
  3. 转:[kipmi0]进程导致系统负载高
  4. MySQL 5.5 日志管理
  5. Hive架构及基础知识
  6. 三、VueJs 填坑日记之项目文件认识
  7. c#SqlServer总结
  8. Objective-C 基础,类和对象,方法和消息,已声明的属性和存取方法,块对象,协议和范畴类,预定义类型和编码策略...
  9. [2018.05.05 T2] 互质2
  10. mysql身份证唯一查询_Mysql查询SQL相关总结(根据生日以及身份证查询年龄以及性别区域等)...
  11. Linux下通过ODBC连接数据库及ODBC相关操作命令
  12. 苹果android投屏,iPhone苹果手机如何投屏到电视?三种方法亲测详解!
  13. mysql pdo连接不上_通过PDO连不上数据库
  14. qstring 字符串查找_怎样用QT查找字符串并标记要查找的内容
  15. nexus shell脚本批量上传-> http 405错误
  16. PCL笔记二:PCD解析;PCD读取;PCD与XYZ转换;
  17. excel表格打印每页都有表头_13个关于Excel表格的打印技巧
  18. 广东电大计算机绘图试题,电大CAD计算机绘图本实验1小抄参考
  19. chrome 本地文件 翻译工具
  20. IO_FILE hack FSOP

热门文章

  1. stlink制作(OSHW版)
  2. Latex输入罗马数字的最简便方法
  3. java calendar 2月份_Calendar.MONTH 2月29号加一个月 问题
  4. 数据库——SQL语句与数据库设计
  5. CAD外部参照文件的分解
  6. vue 两个数组数据对比
  7. BIM建模师考试试题及答案
  8. PPT模板制作色彩如何运用?
  9. siris 显著性排序网络代码解读(training过程)Inferring Attention Shift Ranks of Objects for Image Saliency
  10. html5与交互融媒体内容设计,“HTML5交互融媒体内容设计与制作”赛项