rubyllipse 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rubyllipse.rb +87 -0
  3. metadata +42 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 234aac93632e7a7f43c1788e72eea0fb3ca700035965942bb4a122fa190ba539
4
+ data.tar.gz: 75af9f59827cc2c8998f9ba12f42bf35bd8a19a174b6b5eb8c03e96a34eec44b
5
+ SHA512:
6
+ metadata.gz: de4894844093f76e88aaa5f17707051b903aeaee34c3e75e6b387ed9ccfa083f5c308bf99b991b2052f6b79619a7631ddc87946fa4ea7e9a24231c9b7373c6fd
7
+ data.tar.gz: 988b8059eaf608b202f23705808bfe9fb2bc1fb3c608d1faa290c6ff092acf37fcfbd3a33f2675fd0c104c06720735abff95c7c2b1e69e94fd37bd3c35b73f07
@@ -0,0 +1,87 @@
1
+
2
+ module Rubyllipse
3
+
4
+ class Ellipse
5
+ def initialize(major_radius, minor_radius, center, co_vertexes:nil, vertexes:nil, radii:nil, focal_length:nil, focii:nil, eccentricity:nil, form:"horizontal")
6
+ @form = form
7
+ @major_radius = major_radius
8
+ @minor_radius = minor_radius
9
+ @center = center
10
+
11
+ if @form == 'horizontal'
12
+ @co_vertexes = [[@center[0], @center[0]+@minor_radius], [@center[0], @center[0]-@minor_radius]]
13
+ @vertexes = [[@center[0]+@major_radius, @center[1]], [@center[0]-@major_radius, @center[1]]]
14
+ elsif @form == 'vertical'
15
+ @vertexes = [[@center[0], @center[0]+@major_radius], [@center[0], @center[0]-@major_radius]]
16
+ @co_vertexes = [[@center[0]+@minor_radius, @center[1]], [@center[0]-@minor_radius, @center[1]]]
17
+ end
18
+
19
+ @radii = [@major_radius, @minor_radius]
20
+
21
+ begin
22
+ @focal_length = Math.sqrt(@major_radius**2-@minor_radius**2)
23
+ rescue Math::DomainError
24
+ puts "please pass major radius as the second argument and not first"
25
+ raise ArgumentError, "passed major radius as the second argument"
26
+ end
27
+
28
+ if @form == 'horizontal'
29
+ @focii = [[@center[0]+@focal_length, @center[1]], [@center[0]-@focal_length, @center[1]]]
30
+ elsif @form == 'vertical'
31
+ @focii = [[@center[0], @center[1]+@focal_length], [@center[0], @center[1]-@focal_length]]
32
+ end
33
+
34
+ @eccentricity = Float(@focal_length)/@major_radius
35
+ end
36
+
37
+ def is_circle?
38
+ if @eccentricity == 0
39
+ return true
40
+ else
41
+ return false
42
+ end
43
+ end
44
+
45
+ def area
46
+ return @major_radius*@minor_radius*Math::PI
47
+ end
48
+
49
+ def perimeter
50
+ return 2*Math::PI*Math.sqrt((@major_radius**2+@minor_radius**2)*0.5)
51
+ end
52
+
53
+ def radii
54
+ return @radii
55
+ end
56
+
57
+ def focii
58
+ return @focii
59
+ end
60
+
61
+ def co_vertexes
62
+ return @co_vertexes
63
+ end
64
+
65
+ def vertexes
66
+ return @vertexes
67
+ end
68
+
69
+ def eccentricity
70
+ return @eccentricity
71
+ end
72
+
73
+ def give_function!
74
+ c_x = @center[0]
75
+ c_y = @center[1]
76
+ if @form == 'horizontal'
77
+ a = @minor_radius**2
78
+ b = @major_radius**2
79
+ elsif @form == 'vertical'
80
+ a = @major_radius**2
81
+ b = @minor_radius**2
82
+ end
83
+ equation = "(x-#{c_x})^2/#{a} + (y-#{c_y})^2/#{b} = 1"
84
+ return equation
85
+ end
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,42 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyllipse
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Burzum
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/rubyllipse.rb
20
+ homepage:
21
+ licenses: []
22
+ metadata: {}
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ required_rubygems_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ requirements: []
38
+ rubygems_version: 3.1.2
39
+ signing_key:
40
+ specification_version: 4
41
+ summary: A gem for ellipses, this version excludes rotated ellipses.
42
+ test_files: []