Module: PDF::Math
- Defined in:
- lib/pdf/math.rb
Overview
Encapsulate some of the mathematical calculations that need to be performed when working with PDF documents. All angles in PDF::Writer are measured in degrees, but all angles in PDF documents are in radians. The standard conversions between radians, degrees, and gradians are provided.
As with the Perl implementations of these conversions, they will be wrapped in the range of the target measurement (0..PI2 for radians, 0..360 for degrees, and 0..400 for gradians). To prevent this wrapping, provide a false value for the wrap
parameter.
To wrap these values manually, use #rad2rad, #deg2deg, or #grad2grad.
Constant Summary collapse
- PI2 =
::Math::PI * 2.0
- DR =
One degree of arc measured in terms of radians.
PI2 / 360.0
- RD =
One radian of arc, measured in terms of degrees.
360 / PI2
- DG =
One degree of arc, measured in terms of gradians.
400 / 360.0
- GD =
One gradian of arc, measured in terms of degrees.
360 / 400.0
- RG =
One radian of arc, measured in terms of gradians.
400 / PI2
- GR =
One gradian of arc, measured in terms of radians.
PI2 / 400.0
Class Method Summary collapse
-
.deg2deg(deg) ⇒ Object
Wrap degree values within the range of degrees (0..360).
-
.deg2grad(deg, wrap = true) ⇒ Object
Convert degrees to gradians.
-
.deg2rad(deg, wrap = true) ⇒ Object
Convert degrees to radians.
-
.grad2deg(grad, wrap = true) ⇒ Object
Convert gradians to degrees.
-
.grad2grad(grad) ⇒ Object
Wrap gradian values within the range of gradians (0..400).
-
.grad2rad(grad, wrap = true) ⇒ Object
Convert gradians to radians.
-
.rad2deg(rad, wrap = true) ⇒ Object
Convert radians to degrees.
-
.rad2grad(rad, wrap = true) ⇒ Object
Convert radians to gradians.
-
.rad2rad(rad) ⇒ Object
Wrap radian values within the range of radians (0..PI2).
-
.remt(num, den) ⇒ Object
Truncate the remainder.
Class Method Details
.deg2deg(deg) ⇒ Object
Wrap degree values within the range of degrees (0..360).
51 52 53 |
# File 'lib/pdf/math.rb', line 51 def deg2deg(deg) remt(deg, 360) end |
.deg2grad(deg, wrap = true) ⇒ Object
Convert degrees to gradians. The value will be constrained to the range of gradians (0..400) unless wrap
is false.
70 71 72 73 74 |
# File 'lib/pdf/math.rb', line 70 def deg2grad(deg, wrap = true) grad = DG * deg grad = grad2grad(grad) if wrap grad end |
.deg2rad(deg, wrap = true) ⇒ Object
Convert degrees to radians. The value will be constrained to the range of radians (0..PI2) unless wrap
is false.
62 63 64 65 66 |
# File 'lib/pdf/math.rb', line 62 def deg2rad(deg, wrap = true) rad = DR * deg rad = rad2rad(rad) if wrap rad end |
.grad2deg(grad, wrap = true) ⇒ Object
Convert gradians to degrees. The value will be constrained to the range of degrees (0..360) unless wrap
is false.
94 95 96 97 98 |
# File 'lib/pdf/math.rb', line 94 def grad2deg(grad, wrap = true) deg = GD * grad deg = deg2deg(deg) if wrap deg end |
.grad2grad(grad) ⇒ Object
Wrap gradian values within the range of gradians (0..400).
56 57 58 |
# File 'lib/pdf/math.rb', line 56 def grad2grad(grad) remt(grad, 400) end |
.grad2rad(grad, wrap = true) ⇒ Object
Convert gradians to radians. The value will be constrained to the range of radians (0..PI2) unless wrap
is false.
102 103 104 105 106 |
# File 'lib/pdf/math.rb', line 102 def grad2rad(grad, wrap = true) rad = GR * grad rad = rad2rad(rad) if wrap rad end |
.rad2deg(rad, wrap = true) ⇒ Object
Convert radians to degrees. The value will be constrained to the range of degrees (0..360) unless wrap
is false.
78 79 80 81 82 |
# File 'lib/pdf/math.rb', line 78 def rad2deg(rad, wrap = true) deg = RD * rad deg = deg2deg(deg) if wrap deg end |
.rad2grad(rad, wrap = true) ⇒ Object
Convert radians to gradians. The value will be constrained to the range of gradians (0..400) unless wrap
is false.
86 87 88 89 90 |
# File 'lib/pdf/math.rb', line 86 def rad2grad(rad, wrap = true) grad = RG * rad grad = grad2grad(grad) if wrap grad end |
.rad2rad(rad) ⇒ Object
Wrap radian values within the range of radians (0..PI2).
46 47 48 |
# File 'lib/pdf/math.rb', line 46 def rad2rad(rad) remt(rad, PI2) end |
.remt(num, den) ⇒ Object
Truncate the remainder.
41 42 43 |
# File 'lib/pdf/math.rb', line 41 def remt(num, den) num - den * (num / den.to_f).to_i end |