Class: Cartesius::Circumference

Inherits:
Object
  • Object
show all
Includes:
Determinator, Numerificator
Defined in:
lib/cartesius/circumference.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(x:, y:, k:) ⇒ Circumference

Conic Conic equation type: x^2 + y^2 + dx + ey + f = 0



13
14
15
16
# File 'lib/cartesius/circumference.rb', line 13

def initialize(x:, y:, k:)
  @x2_coeff, @y2_coeff, @x_coeff, @y_coeff, @k_coeff = normalize(1, 1, x, y, k)
  validation
end

Class Method Details

.by_definition(center:, radius:) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/cartesius/circumference.rb', line 18

def self.by_definition(center:, radius:)
  if radius <= 0
    raise ArgumentError.new('Radius must be positive!')
  end

  build_by(center, radius)
end

.by_diameter(diameter:) ⇒ Object



26
27
28
29
30
31
# File 'lib/cartesius/circumference.rb', line 26

def self.by_diameter(diameter:)
  center = diameter.mid
  radius = Rational(diameter.length, 2)

  build_by(center, radius)
end

.by_points(point1:, point2:, point3:) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cartesius/circumference.rb', line 33

def self.by_points(point1:, point2:, point3:)
  alfa, beta, gamma = Cramer.solution3(
      [point1.x, point1.y, 1],
      [point2.x, point2.y, 1],
      [point3.x, point3.y, 1],
      [-(point1.x ** 2 + point1.y ** 2), -(point2.x ** 2 + point2.y ** 2), -(point3.x ** 2 + point3.y ** 2)]
  )
  new(x: alfa, y: beta, k: gamma)
rescue
  raise ArgumentError.new('Invalid points!')
end

.goniometricObject



45
46
47
# File 'lib/cartesius/circumference.rb', line 45

def self.goniometric
  build_by(Point.origin, 1)
end

Instance Method Details

#==(circumference) ⇒ Object



66
67
68
69
# File 'lib/cartesius/circumference.rb', line 66

def == (circumference)
  circumference.instance_of?(self.class) and
      circumference.center == center and circumference.radius == radius
end

#congruent?(circumference) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
64
# File 'lib/cartesius/circumference.rb', line 61

def congruent?(circumference)
  circumference.instance_of?(self.class) and
      circumference.radius == radius
end

#eccentricityObject



57
58
59
# File 'lib/cartesius/circumference.rb', line 57

def eccentricity
  0
end

#goniometric?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/cartesius/circumference.rb', line 49

def goniometric?
  self == Circumference.goniometric
end

#radiusObject



53
54
55
# File 'lib/cartesius/circumference.rb', line 53

def radius
  Math.sqrt(a2)
end