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

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