joules 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73cc9f5843a96d24a698edd34d88f242df38678a
4
- data.tar.gz: 76ca90cf9af87effc2f4adbaab64e5e1145c6925
3
+ metadata.gz: 98b2e0c6df0fd3755eb58eaad979471c569ac1a6
4
+ data.tar.gz: 275a48df9e2c4dff48105fbecfa35edb20b4c442
5
5
  SHA512:
6
- metadata.gz: 6ac9efd15828c56da8c5268a7cb67de5f71325fee00e971c512cbd9f5963ed245b9f1a0e0285cd6883f24b3b4e12afa0e5ffbcc718d47bf3b1fe446fe360ba53
7
- data.tar.gz: 0ac87b0cb54ccdb32d99cd1a53144f43539e6a2c3fcd5c814e634bd0d3f0a2306016e8a65e60377b2e549b8a0e555133c699188b6e3b553117211b066c0207a5
6
+ metadata.gz: 37eb1b3cdd2c77fde36b2a2873cad5386885a2d2e5adb9410a943e784078a7e7def52dde7f661c132ff0059d67aacb03ee12b638d361666a38e17eb04f390f74
7
+ data.tar.gz: 6ab629ad3ea3ab4b4f87a520c2a524176dc6a37b8ff908e062572c53f3226961031ad9001ac3f1305d47e4d2d3d21ddd50e90de26c486c01df4ad53f08ba940a
data/README.md CHANGED
@@ -15,7 +15,7 @@ gem build joules.gemspec
15
15
 
16
16
  ### Library Installation
17
17
  ```Bash
18
- gem install joules-0.3.2.gem
18
+ gem install joules-0.4.0.gem
19
19
  ```
20
20
 
21
21
  ### Library Import
@@ -64,8 +64,10 @@ This would return 23.4.
64
64
  * Added Physics formulas in gravitational fields and electric fields
65
65
 
66
66
  #### Version 0.3.2
67
- * Added Physics formulas in magnetic fields
68
- * Added Physics formulas in stress and strain
67
+ * Added Physics formulas in magnetic fields, stress, and strain
68
+
69
+ #### Version 0.4.0
70
+ * Added Physics formulas in circular motion
69
71
 
70
72
  ### Contribution
71
73
  Please feel free to submit any ideas, questions, or problems by reporting an issue.
data/lib/joules.rb CHANGED
@@ -3,13 +3,14 @@
3
3
  #
4
4
  # @description: Module for providing Physics formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Joules module (joules.rb)
10
10
 
11
11
  require 'joules/constants'
12
12
  require 'joules/kinematics'
13
+ require 'joules/circular_motion'
13
14
  require 'joules/mass_weight'
14
15
  require 'joules/density'
15
16
  require 'joules/forces'
@@ -0,0 +1,160 @@
1
+ #==============================================================================
2
+ # Joules
3
+ #
4
+ # @description: Module for providing circular motion formulas
5
+ # @author: Elisha Lai
6
+ # @version: 0.4.0 06/06/2015
7
+ #==============================================================================
8
+
9
+ # Circular motion module (circular_motion.rb)
10
+
11
+ module Joules
12
+ module_function
13
+
14
+ # Calculates the angular velocity given linear velocity and radius.
15
+ # @param linear_velocity [Int, Float]
16
+ # linear_velocity is in metres per second
17
+ # @param radius [Int, Float]
18
+ # radius > 0; radius is in metres
19
+ # @return [Float]
20
+ # return value is in radians per second
21
+ # @raise [ZeroDivisionError] if radius = 0
22
+ # @example
23
+ # Joules.angular_velocity_v1(9, 3) #=> 3.0
24
+ # @note There is one other method for calculating angular velocity.
25
+ def angular_velocity_v1(linear_velocity, radius)
26
+ if radius.zero?
27
+ raise ZeroDivisionError.new('divided by 0')
28
+ else
29
+ return linear_velocity / radius.to_f
30
+ end
31
+ end
32
+
33
+ # Calculates the angular velocity given frequency of rotation.
34
+ # @param frequency_of_rotation [Int, Float]
35
+ # frequency_of_rotation >= 0; frequency_of_rotation is in hertz
36
+ # @return [Float]
37
+ # return value >= 0; return value is in radians per second
38
+ # @example
39
+ # Joules.angular_velocity_v2(1.5) #=> 9.42477796076938
40
+ # @note There is one other method for calculating angular velocity.
41
+ def angular_velocity_v2(frequency_of_rotation)
42
+ return 2 * Math::PI * frequency_of_rotation
43
+ end
44
+
45
+ # Calculates the angular acceleration given initial angular velocity, final angular velocity, and time.
46
+ # @param initial_angular_velocity [Int, Float]
47
+ # initial_angular_velocity is in radians per second
48
+ # @param final_angular_velocity [Int, Float]
49
+ # final_angular_velocity is in radians per second
50
+ # @param time [Int, Float]
51
+ # time > 0; time is in seconds
52
+ # @return [Float]
53
+ # return value is in radians per second squared
54
+ # @raise [ZeroDivisionError] if time = 0
55
+ # @example
56
+ # Joules.angular_acceleration(20, 35, 2.4) #=> 6.25
57
+ def angular_acceleration(initial_angular_velocity, final_angular_velocity, time)
58
+ if time.zero?
59
+ raise ZeroDivisionError.new('divided by 0')
60
+ else
61
+ return (final_angular_velocity - initial_angular_velocity) / time.to_f
62
+ end
63
+ end
64
+
65
+ # Calculates the centripetal acceleration given linear velocity and radius.
66
+ # @param linear_velocity [Int, Float]
67
+ # linear_velocity is in metres per second
68
+ # @param radius [Int, Float]
69
+ # radius > 0; radius is in metres
70
+ # @return [Float]
71
+ # return value >= 0; return value is in metres per second squared
72
+ # @raise [ZeroDivisionError] if radius = 0
73
+ # @example
74
+ # Joules.centripetal_acceleration_v1(9, 3) #=> 27.0
75
+ # @note There is one other method for calculating centripetal acceleration.
76
+ def centripetal_acceleration_v1(linear_velocity, radius)
77
+ if radius.zero?
78
+ raise ZeroDivisionError.new('divided by 0')
79
+ else
80
+ return (linear_velocity ** 2.0) / radius
81
+ end
82
+ end
83
+
84
+ # Calculates the centripetal acceleration given angular velocity and radius.
85
+ # @param angular_velocity [Int, Float]
86
+ # angular_velocity is in radians per second
87
+ # @param radius [Int, Float]
88
+ # radius >= 0; radius is in metres
89
+ # @return [Float]
90
+ # return value >= 0; return value is in metres per second squared
91
+ # @example
92
+ # Joules.centripetal_acceleration_v2(3, 3) #=> 27.0
93
+ # @note There is one other method for calculating centripetal acceleration.
94
+ def centripetal_acceleration_v2(angular_velocity, radius)
95
+ return (angular_velocity ** 2.0) * radius
96
+ end
97
+
98
+ # Calculates the centripetal force given mass, linear velocity, and radius.
99
+ # @param mass [Int, Float]
100
+ # mass >= 0; mass is in kilograms
101
+ # @param linear_velocity [Int, Float]
102
+ # linear_velocity is in metres per second
103
+ # @param radius [Int, Float]
104
+ # radius >= 0; radius is in metres
105
+ # @return [Float]
106
+ # return value >= 0; return value is in newtons
107
+ # @example
108
+ # Joules.centripetal_force_v1(2000, 5.56, 2.1) #=> 29441.523809523802
109
+ # @note There is one other method for calculating centripetal force.
110
+ def centripetal_force_v1(mass, linear_velocity, radius)
111
+ if radius.zero?
112
+ raise ZeroDivisionError.new('divided by 0')
113
+ else
114
+ return (mass * (linear_velocity ** 2.0)) / radius
115
+ end
116
+ end
117
+
118
+ # Calculates the centripetal force given mass, angular velocity, and radius.
119
+ # @param mass [Int, Float]
120
+ # mass >= 0; mass is in kilograms
121
+ # @param angular_velocity [Int, Float]
122
+ # angular_velocity is in radians per second
123
+ # @param radius [Int, Float]
124
+ # radius >= 0; radius is in metres
125
+ # @return [Float]
126
+ # return value >= 0; return value is in newtons
127
+ # @example
128
+ # Joules.centripetal_force_v2(53.5, 3, 3) #=> 1444.5
129
+ # @note There is one other method for calculating centripetal force.
130
+ def centripetal_force_v2(mass, angular_velocity, radius)
131
+ return mass * (angular_velocity ** 2.0) * radius
132
+ end
133
+
134
+ # Calculates the angular momentum given moment of inertia and angular velocity.
135
+ # @param moment_of_inertia [Int, Float]
136
+ # moment_of_inertia is in kilogram metres squared
137
+ # @param angular_velocity [Int, Float]
138
+ # angular_velocity is in radians per second
139
+ # @return [Float]
140
+ # return value is in kilogram metres squared per second
141
+ # @example
142
+ # Joules.angular_momentum(2, 2.5) #=> 5.0
143
+ def angular_momentum(moment_of_inertia, angular_velocity)
144
+ return moment_of_inertia * angular_velocity.to_f
145
+ end
146
+
147
+ # Calculates the angular kinetic energy given moment of inertia and angular velocity.
148
+ # @param moment_of_inertia [Int, Float]
149
+ # moment_of_inertia is in kilogram metres squared
150
+ # @param angular_velocity [Int, Float]
151
+ # angular_velocity is in radians per second
152
+ # @return [Float]
153
+ # return value is in joules
154
+ # @example
155
+ # Joules.angular_kinetic_energy(5, 2.3) #=> 13.224999999999998
156
+ def angular_kinetic_energy(moment_of_inertia, angular_velocity)
157
+ return 0.5 * moment_of_inertia * (angular_velocity ** 2)
158
+ end
159
+
160
+ end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing constants
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Constants module (constants.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing conversion formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Conversion module (conversion.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing density formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Density module (density.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing electric fields formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Electric fields module (electric_fields.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing electricity formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Electricity module (electricity.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing energy, work, and power formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Energy, work, and power module (energy_work_power.rb)
@@ -51,7 +51,7 @@ module Joules
51
51
  return 0.5 * mass * (velocity ** 2)
52
52
  end
53
53
 
54
- # Calculates the work done given force and displacement.
54
+ # Calculates the work done given force, displacement, and angle.
55
55
  # @param force [Int, Float]
56
56
  # force is in newtons
57
57
  # @param displacement [Int, Float]
@@ -63,7 +63,7 @@ module Joules
63
63
  # @example
64
64
  # Joules.work_done(40, 2.34) #=> 93.6
65
65
  def work_done(force, displacement, angle = 0)
66
- return force * displacement.to_f * Math.cos(to_radians(angle))
66
+ return force * displacement * Math.cos(to_radians(angle))
67
67
  end
68
68
 
69
69
  # Calculates the power given work done and time.
@@ -85,18 +85,20 @@ module Joules
85
85
  end
86
86
  end
87
87
 
88
- # Calculates the power given force and velocity.
88
+ # Calculates the power given force, velocity, and angle.
89
89
  # @param force [Int, Float]
90
90
  # force is in newtons
91
91
  # @param velocity [Int, Float]
92
92
  # velocity is in meters per second
93
+ # @param angle [Int, Float]
94
+ # angle is in degrees
93
95
  # @return [Float]
94
96
  # return value is in watts
95
97
  # @example
96
98
  # Joules.power_v2(42, 2.3) #=> 96.6
97
99
  # @note There are four other methods for calculating power.
98
- def power_v2(force, velocity)
99
- return force * velocity.to_f
100
+ def power_v2(force, velocity, angle = 0)
101
+ return force * velocity * Math.cos(to_radians(angle))
100
102
  end
101
103
 
102
104
  # Calculates the energy efficiency given useful energy output and energy input.
data/lib/joules/forces.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing forces formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Forces module (forces.rb)
@@ -62,17 +62,32 @@ module Joules
62
62
  end
63
63
  end
64
64
 
65
- # Calculates the moment given force and distance.
65
+ # Calculates the maximum friction force given coefficient of friction and normal force.
66
+ # @param coefficient_of_friction [Int, Float]
67
+ # coefficient_of_friction >= 0
68
+ # @param normal_force [Int, Force]
69
+ # normal_force is in newtons
70
+ # @return [Float]
71
+ # return value is in newtons
72
+ # @example
73
+ # Joules.maximum_friction_force(0.4, 29.43) #=> 11.772
74
+ def maximum_friction_force(coefficient_of_friction, normal_force)
75
+ return coefficient_of_friction * normal_force.to_f
76
+ end
77
+
78
+ # Calculates the moment given force, distance, and angle.
66
79
  # @param force [Int, Float]
67
80
  # force is in newtons
68
81
  # @param distance [Int, Float]
69
82
  # distance >= 0; distance is in metres
83
+ # @param angle [Int, Float]
84
+ # angle is in degrees
70
85
  # @return [Float]
71
86
  # return value is in newton metres
72
87
  # @example
73
88
  # Joules.moment(23, 4.5) #=> 103.5
74
- def moment(force, distance)
75
- return force * distance.to_f
89
+ def moment(force, distance, angle = 90)
90
+ return force * distance * Math.sin(to_radians(angle))
76
91
  end
77
92
 
78
93
  end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing geometry formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Geometry module (geometry.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing gravitational fields formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Gravitational fields module (gravitational_fields.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing kinematics formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Kinematics module (kinematics.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing magnetic fields formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Magnetic fields module (magnetic_fields.rb)
@@ -11,7 +11,7 @@
11
11
  module Joules
12
12
  module_function
13
13
 
14
- # Calculates the magnetic force on a current given flux density, current, and conductor length.
14
+ # Calculates the magnetic force on a current given flux density, current, conductor length, and angle.
15
15
  # @param flux_density [Int, Float]
16
16
  # flux_density is in teslas
17
17
  # @param current [Int, Float]
@@ -29,7 +29,7 @@ module Joules
29
29
  return flux_density * current * conductor_length * Math.sin(to_radians(angle))
30
30
  end
31
31
 
32
- # Calculates the magnetic force on a moving charge given flux density, charge, and velocity.
32
+ # Calculates the magnetic force on a moving charge given flux density, charge, velocity, and angle.
33
33
  # @param flux_density [Int, Float]
34
34
  # flux_density is in teslas
35
35
  # @param charge [Int, Float]
@@ -47,7 +47,7 @@ module Joules
47
47
  return flux_density * charge * velocity * Math.sin(to_radians(angle))
48
48
  end
49
49
 
50
- # Calculates the magnetic flux given flux density and area.
50
+ # Calculates the magnetic flux given flux density, area, and angle.
51
51
  # @param flux_density [Int, Float]
52
52
  # flux_density is in teslas
53
53
  # @param area [Int, Float]
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing mass and weight formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Mass and weight module (mass_weight.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing momentum and impulse formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Momentum and impulse module (momentum_impulse.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing pressure formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Pressure module (pressure.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing quantum formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Quantum module (quantum.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing stress and strain formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Stress and strain module (stress_strain.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing thermodynamics formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Thermodynamics module (thermodynamics.rb)
data/lib/joules/waves.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing waves formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.3.2 03/06/2015
6
+ # @version: 0.4.0 06/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Waves module (waves.rb)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joules
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elisha Lai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2015-06-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: " Joules is a library (gem) for providing simple Physics formulas\n
14
14
  \ in kinematics, forces, waves, electricity, and so much more. A\n selection
@@ -21,6 +21,7 @@ files:
21
21
  - LICENSE.md
22
22
  - README.md
23
23
  - lib/joules.rb
24
+ - lib/joules/circular_motion.rb
24
25
  - lib/joules/constants.rb
25
26
  - lib/joules/conversion.rb
26
27
  - lib/joules/density.rb