Class: Cartesius::Circumference
- Inherits:
-
Object
- Object
- Cartesius::Circumference
- Includes:
- Determinator, Numerificator
- Defined in:
- lib/cartesius/circumference.rb
Class Method Summary collapse
- .by_definition(center:, radius:) ⇒ Object
- .by_diameter(diameter:) ⇒ Object
- .by_points(point1:, point2:, point3:) ⇒ Object
- .goniometric ⇒ Object
Instance Method Summary collapse
- #==(circumference) ⇒ Object
- #congruent?(circumference) ⇒ Boolean
- #eccentricity ⇒ Object
- #goniometric? ⇒ Boolean
-
#initialize(x:, y:, k:) ⇒ Circumference
constructor
Conic Conic equation type: x^2 + y^2 + dx + ey + f = 0.
- #radius ⇒ Object
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 |
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
61 62 63 64 |
# File 'lib/cartesius/circumference.rb', line 61 def congruent?(circumference) circumference.instance_of?(self.class) and circumference.radius == radius end |
#eccentricity ⇒ Object
57 58 59 |
# File 'lib/cartesius/circumference.rb', line 57 def eccentricity 0 end |
#goniometric? ⇒ Boolean
49 50 51 |
# File 'lib/cartesius/circumference.rb', line 49 def goniometric? self == Circumference.goniometric end |
#radius ⇒ Object
53 54 55 |
# File 'lib/cartesius/circumference.rb', line 53 def radius Math.sqrt(a2) end |