joules 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98b2e0c6df0fd3755eb58eaad979471c569ac1a6
4
- data.tar.gz: 275a48df9e2c4dff48105fbecfa35edb20b4c442
3
+ metadata.gz: 20266cc292103a7a4ec29036bf2eb5eca74653ea
4
+ data.tar.gz: df55eff3e23043443756fec9ea24ed7351313115
5
5
  SHA512:
6
- metadata.gz: 37eb1b3cdd2c77fde36b2a2873cad5386885a2d2e5adb9410a943e784078a7e7def52dde7f661c132ff0059d67aacb03ee12b638d361666a38e17eb04f390f74
7
- data.tar.gz: 6ab629ad3ea3ab4b4f87a520c2a524176dc6a37b8ff908e062572c53f3226961031ad9001ac3f1305d47e4d2d3d21ddd50e90de26c486c01df4ad53f08ba940a
6
+ metadata.gz: f744ec8a76f8a7fac6c7a74295eb01e8d3f29230729b5e447ec6f72d9c0dc6f25aa39dce9eb9c476a706a195196d1ba21932e27d52f9247aea646776836628db
7
+ data.tar.gz: 7f49d574908f32acb1c75332ee4f1e2d5f81413f4ad215049fc6122a820cd66386fc4039400b44857f08134bda28c136cf2fe6c254504cf0e9eb51d5fe2b175e
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.4.0.gem
18
+ gem install joules-0.4.1.gem
19
19
  ```
20
20
 
21
21
  ### Library Import
@@ -69,6 +69,9 @@ This would return 23.4.
69
69
  #### Version 0.4.0
70
70
  * Added Physics formulas in circular motion
71
71
 
72
+ #### Version 0.4.1
73
+ * Added Physics formulas in oscillations
74
+
72
75
  ### Contribution
73
76
  Please feel free to submit any ideas, questions, or problems by reporting an issue.
74
77
 
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing circular motion formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Circular motion module (circular_motion.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing constants
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Energy, work, and power module (energy_work_power.rb)
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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Forces module (forces.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing geometry formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Magnetic fields module (magnetic_fields.rb)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing mass and weight formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Momentum and impulse module (momentum_impulse.rb)
@@ -0,0 +1,124 @@
1
+ #==============================================================================
2
+ # Joules
3
+ #
4
+ # @description: Module for providing oscillations formulas
5
+ # @author: Elisha Lai
6
+ # @version: 0.4.1 07/06/2015
7
+ #==============================================================================
8
+
9
+ # Oscillations module (oscillations.rb)
10
+
11
+ module Joules
12
+ module_function
13
+
14
+ # Calculates the acceleration of a particle in oscillation given angular velocity and particle displacement.
15
+ # @param angular_velocity [Int, Float]
16
+ # angular_velocity is in radians per second
17
+ # @param particle_displacement [Int, Float]
18
+ # particle_displacement is in metres
19
+ # @return [Float]
20
+ # return value is in metres per second squared
21
+ # @example
22
+ # Joules.particle_acceleration(2.4, 3) #=> -17.28
23
+ # @note There is one other method for calculating acceleration.
24
+ def particle_acceleration(angular_velocity, particle_displacement)
25
+ return (- (angular_velocity ** 2.0) * displacement)
26
+ end
27
+
28
+ # Calculates the displacement of a particle in oscillation given amplitude, angular velocity, and time.
29
+ # @param amplitude [Int, Float]
30
+ # amplitude >= 0; amplitude is in metres
31
+ # @param angular_velocity [Int, Float]
32
+ # angular_velocity is in radians per second
33
+ # @param time [Int, Float]
34
+ # time >= 0; time is in seconds
35
+ # @return [Float]
36
+ # return value is in metres
37
+ # @example
38
+ # Joules.particle_displacement(5, 2.4, 3) #=> 3.041756572661276
39
+ def particle_displacement(amplitude, angular_velocity, time)
40
+ return amplitude * Math.cos(angular_velocity * time)
41
+ end
42
+
43
+ # Calculates the velocity of a particle in oscillation given angular velocity, amplitude, and particle displacement.
44
+ # @param angular_velocity [Int, Float]
45
+ # angular_velocity is in radians per second
46
+ # @param amplitude [Int, Float]
47
+ # amplitude >= 0; amplitude is in metres
48
+ # @param particle_displacement [Int, Float]
49
+ # particle_displacement is in metres
50
+ # @param return_sign [String]
51
+ # return_sign is either '-' or '+'
52
+ # @return [Float, Array<Float>]
53
+ # return list has a length of 2; each velocity in return list or return value is in metres per second
54
+ # @example
55
+ # Joules.particle_velocity(2.4, 5, 3) #=> [9.6, -9.6]
56
+ def particle_velocity(angular_velocity, amplitude, particle_displacement, return_sign = nil)
57
+ return_value = angular_velocity * (((amplitude ** 2) - (particle_displacement ** 2)) ** 0.5)
58
+ if return_sign == '-'
59
+ return (- return_value)
60
+ elsif return_sign == '+'
61
+ return return_value
62
+ else
63
+ return [return_value, (- return_value)]
64
+ end
65
+ end
66
+
67
+ # Calculates the maximum speed of a particle in oscillation given angular velocity and amplitude.
68
+ # @param angular_velocity [Int, Float]
69
+ # angular_velocity is in radians per second
70
+ # @param amplitude [Int, Float]
71
+ # amplitude >= 0; amplitude is in metres
72
+ # @return [Float]
73
+ # return value is in metres per second
74
+ # @example
75
+ # Joules.maximum_speed(2.4, 5) #=> 12.0
76
+ def max_particle_speed(angular_velocity, amplitude)
77
+ return angular_velocity * amplitude.to_f
78
+ end
79
+
80
+ # Calculates the maximum acceleration of a particle in oscillation given angular velocity and amplitude.
81
+ # @param angular_velocity [Int, Float]
82
+ # angular_velocity is in radians per second
83
+ # @param amplitude [Int, Float]
84
+ # amplitude >= 0; amplitude is in metres
85
+ # @return [Float]
86
+ # return value >= 0; return value is in metres per second squared
87
+ # @example
88
+ # Joules.maximum_acceleration(2.4, 5) #=> 28.799999999999997
89
+ def max_particle_acceleration(angular_velocity, amplitude)
90
+ return (angular_velocity ** 2.0) * amplitude
91
+ end
92
+
93
+ # Calculates the time period of a mass-spring system given mass and spring constant.
94
+ # @param mass [Int, Float]
95
+ # mass >= 0; mass is in kilograms
96
+ # @param spring_constant [Int, Float]
97
+ # spring_constant > 0; spring_constant is in newtons per metre
98
+ # @return [Float]
99
+ # return value >= 0; return value is in seconds
100
+ # @raise [ZeroDivisionError] if spring_constant = 0
101
+ # @example
102
+ # Joules.time_period_v2(20, 5) #=> 12.566370614359172
103
+ # @note There are two other methods for calculating time period.
104
+ def time_period_v2(mass, spring_constant)
105
+ if spring_constant.zero?
106
+ raise ZeroDivisionError.new('divided by 0')
107
+ else
108
+ return 2 * Math::PI * ((mass / spring_constant.to_f) ** 0.5)
109
+ end
110
+ end
111
+
112
+ # Calculates the time period of a simple pendulum given pendulum length.
113
+ # @param pendulum_length [Int, Float]
114
+ # pendulum_length >= 0; pendulum_length is in metres
115
+ # @return [Float]
116
+ # return value >= 0; return value is in seconds
117
+ # @example
118
+ # Joules.time_period_v3(8.4) #=> 5.814133609631141
119
+ # @note There are two other methods for calculating time period.
120
+ def time_period_v3(pendulum_length)
121
+ return 2 * Math::PI * ((pendulum_length / FREE_FALL_ACCELERATION) ** 0.5)
122
+ end
123
+
124
+ end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing pressure formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/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.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Waves module (waves.rb)
@@ -82,11 +82,12 @@ module Joules
82
82
  # @param frequency [Int, Float]
83
83
  # frequency > 0; frequency is in hertz
84
84
  # @return [Float]
85
- # return value > 0; return value is in hertz
85
+ # return value > 0; return value is in seconds
86
86
  # @raise [ZeroDivisionError] if frequency = 0
87
87
  # @example
88
- # Joules.time_period(0.08) #=> 12.5
89
- def time_period(frequency)
88
+ # Joules.time_period_v1(0.08) #=> 12.5
89
+ # @note There are two other methods for calculating time period.
90
+ def time_period_v1(frequency)
90
91
  if frequency.zero?
91
92
  raise ZeroDivisionError.new('divided by 0')
92
93
  else
data/lib/joules.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @description: Module for providing Physics formulas
5
5
  # @author: Elisha Lai
6
- # @version: 0.4.0 06/06/2015
6
+ # @version: 0.4.1 07/06/2015
7
7
  #==============================================================================
8
8
 
9
9
  # Joules module (joules.rb)
@@ -20,6 +20,7 @@ require 'joules/stress_strain'
20
20
  require 'joules/pressure'
21
21
  require 'joules/thermodynamics'
22
22
  require 'joules/waves'
23
+ require 'joules/oscillations'
23
24
  require 'joules/electricity'
24
25
  require 'joules/quantum'
25
26
  require 'joules/gravitational_fields'
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.4.0
4
+ version: 0.4.1
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-06 00:00:00.000000000 Z
11
+ date: 2015-06-07 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
@@ -35,6 +35,7 @@ files:
35
35
  - lib/joules/magnetic_fields.rb
36
36
  - lib/joules/mass_weight.rb
37
37
  - lib/joules/momentum_impulse.rb
38
+ - lib/joules/oscillations.rb
38
39
  - lib/joules/pressure.rb
39
40
  - lib/joules/quantum.rb
40
41
  - lib/joules/stress_strain.rb