哈工大机械原理凸轮机构大作业

题目要求

在这里插入图片描述

公式推导和计算

![在这里插入图片描述](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 np

class travel():
    __mata_class_=ABCMeta
    def __init__(self,**kwargs):
        self.h=kwargs.get("h")
        self.Phi=kwargs.get("Phi")
    @abstractmethod
    def state_phi(self):
        pass

class 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/180
        phi=phi*math.pi/180
        if (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_motion
        self.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=0
        while(phi>self.travel[i].Phi):
            phi-=self.travel[i].Phi
            i+=1
        return self.travel[i].state_phi(phi)
    
    def get_motion_state(self,phi)->list:
        def tf(i):
            i+=1 
            return i-1
        i=0
        return 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.pi

    def get_theoretical_outline(self,phi)->tuple:
        t=self.s0+self.get_motion_state_phi(phi)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值