{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter 6 Friction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 6.1 Friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The required pull force P1 is 18.345820 N \n",
      "The required push force P2 is 22.750511 N \n"
     ]
    }
   ],
   "source": [
    "import math,numpy\n",
    "# Initilization of variables\n",
    "m=5 #kg # mass of the bock\n",
    "g=9.81 # m/s**2 # acceleration due to gravity\n",
    "theta=15 # degree # angle made by the forces (P1 & P2) with the horizontal of the block\n",
    "de=theta*math.pi/180\n",
    "mu=0.4 #coefficient of static friction\n",
    "#Calculations\n",
    "# Case 1. Where P1 is the force required to just pull the bock\n",
    "# Solving eqn's 1 & 2 using matrix\n",
    "A=numpy.matrix([[math.cos(de),-mu],[math.sin(de),1]])\n",
    "B=numpy.matrix([[0],[m*g]])\n",
    "C=numpy.linalg.inv(A)*B\n",
    "# Calculations \n",
    "# Case 2. Where P2 is the force required to push the block\n",
    "# Solving eqn's 1 & 2 using matrix\n",
    "P=numpy.matrix([[-math.cos(de),mu],[-math.sin(de),1]])\n",
    "Q=numpy.matrix([[0],[m*g]])\n",
    "R=numpy.linalg.inv(P)*Q\n",
    "# Results\n",
    "print('The required pull force P1 is %f N '%C[0])\n",
    "print('The required push force P2 is %f N '%R[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 6.4 Friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The inclination of the plane is 14.036243 degree\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "# Initilization of variables\n",
    "W1=50 # N # weight of the first block\n",
    "W2=50 # N # weight of the second block\n",
    "mu_1=0.3 # coefficient of friction between the inclined plane and W1\n",
    "mu_2=0.2 # coefficient of friction between the inclined plane and W2\n",
    "# Calculations\n",
    "# On adding eq'ns 1&3 and substuting the values of N1 & N2 from eqn's 2&4 in this and on solving for alpha we get,\n",
    "alpha=math.atan((((mu_1*W1)+(mu_2*W2))/(W1+W2))) # degrees\n",
    "a=math.degrees(alpha)\n",
    "# Results\n",
    "print('The inclination of the plane is %f degree'%a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 6.7 Friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The angle of inclination is 16.699244 degree \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Initilization of variables\n",
    "M=2000 # kg # mass of the car\n",
    "mu=0.3 # coefficient of static friction between the tyre and the road\n",
    "g=9.81 # m/s**2 # acc. due to gravity\n",
    "# Calculations\n",
    "# Divide eqn 1 by eqn 2, We get\n",
    "theta=math.atan(mu) #degree\n",
    "t=math.degrees(theta)\n",
    "# Results\n",
    "print('The angle of inclination is %f degree \\n'%t)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 6.9 Friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The minimum horizontal force (P) which should be applied to raise the block is 870.844400 N \n",
      "\n",
      "The required coefficient for the wedge to be self locking is 0.130900 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import math \n",
    "# Initilization of variabes\n",
    "Wa=1000 #N # weight of block A\n",
    "Wb=500 #N # weight of block B\n",
    "theta=15 # degree # angle of the wedge\n",
    "mu=0.2 # coefficient of friction between the surfaces in contact\n",
    "phi=7.5 # degrees # used in case 2\n",
    "# Caculations \n",
    "# CASE (a)\n",
    "# consider the equilibrium of upper block A\n",
    "# rearranging eq'ns 1 &2 and solving them using matrix for N1 & N2\n",
    "A=np.matrix('1 -0.4522;-0.2 0.914')\n",
    "B=np.matrix('0;1000')\n",
    "C=np.linalg.inv(A)*B\n",
    "# Now consider the equilibrium of lower block B\n",
    "# From eq'n 4\n",
    "N3=Wb+(C[1]*math.cos(theta*math.pi/180))-(mu*C[1]*math.sin(theta*math.pi/180)) #N\n",
    "# Now from eq'n 3\n",
    "P=(mu*N3)+(mu*C[1]*math.cos(theta*math.pi/180))+(C[1]*math.sin(theta*math.pi/180)) # N\n",
    "# CASE (b)\n",
    "# The eq'n for required coefficient for the wedge to be self locking is,\n",
    "mu_req=(theta*math.pi)/(360) # multiplying with (pie/180) to convert it into radians\n",
    "# Results\n",
    "print('The minimum horizontal force (P) which should be applied to raise the block is %f N \\n'%P)\n",
    "print('The required coefficient for the wedge to be self locking is %f \\n'%mu_req)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 6.13 Friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The minimum value of x at which the load Q=200 N may be applied before slipping impends is 0.350000 m\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import math\n",
    "# Initilization of variables\n",
    "P=100 #N # force acting at 0.2 m from A\n",
    "Q=200 #N # force acting at any distance x from B\n",
    "l=1 #m # length of the bar\n",
    "theta=45 #degree #angle made by the normal reaction at A&B with horizontal\n",
    "# Calculations\n",
    "# solving eqn's 1 & 2 using matrix for Ra & Rb,\n",
    "A=np.matrix([[1,-1],[math.sin(theta*math.pi/180),math.sin(theta*math.pi/180)]])\n",
    "B=np.matrix([[0],[P+Q]])\n",
    "C=np.linalg.inv(A)*B\n",
    "# Now take moment about B\n",
    "x=((C[0]*l*math.sin(theta*math.pi/180))-(P*(l-0.2)))/200 #m # here 0.2 is the distance where 100 N load lies from A\n",
    "# Results\n",
    "print('The minimum value of x at which the load Q=200 N may be applied before slipping impends is %f m'%x)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}