epimath100 2.0.2 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/epimath100/line.class.rb +15 -7
- data/lib/epimath100/point.class.rb +73 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5491284570b5ab89257d29563128f7a65320a0c4
|
4
|
+
data.tar.gz: a1ac48f035dc440e35107f58bd937061bdc63f81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10bb395846cda35964f85f9c4a27ddbe6cf868257bd6d564968dcd707024874fb10c82a871213bf3f912e22afffdd40ae6c7b3d7da9fa650b1dc2b85f8332fc2
|
7
|
+
data.tar.gz: f8a942b99203d52218e3105a829fbdfe25fa7eb91b3bc35200a3153725871b6f4c6e6d455f0535be95754918953ef6f6dd57a304469dd4cb68442842225cd240
|
@@ -11,15 +11,23 @@ class Line
|
|
11
11
|
# == Parameters:
|
12
12
|
# point::
|
13
13
|
# Any point on the line. It must be a Point (../point/point.class.rb)
|
14
|
-
#
|
14
|
+
# param2::
|
15
15
|
# Any vector director of the line. It must be a Vector (../vector/vector.class.rb)
|
16
|
-
|
17
|
-
|
18
|
-
Error.call "Line::new : '#{vector}' is not a Vector" if !vector.is_a?Vector
|
19
|
-
Error.call "Line::new : '#{vector}' can't be Null" if vector.nil?
|
20
|
-
|
16
|
+
# It also can be a 2sd point of the line
|
17
|
+
def initialize point, param2
|
21
18
|
@point = point
|
22
|
-
|
19
|
+
if param2.is_a?Vector
|
20
|
+
@v_dir = param2
|
21
|
+
elsif param2.is_a?Point
|
22
|
+
#coef = (param2.y - point.y) / (param2.x - coef.x)
|
23
|
+
#ordo = point.y - coef * point.x
|
24
|
+
@v_dir = Vector.new(param2.x - point.x, param2.y - point2.y)
|
25
|
+
else
|
26
|
+
Error.call "Line::new : '#{@vector}' is neither a Vector or a Point"
|
27
|
+
end
|
28
|
+
Error.call "Line::new : '#{@point}' is not a Point" if !@point.is_a?Point
|
29
|
+
Error.call "Line::new : '#{@vector}' can't be Null" if @vector.nil?
|
30
|
+
|
23
31
|
@equ_para = Line::parametric @point, @v_dir
|
24
32
|
end
|
25
33
|
|
@@ -1,40 +1,64 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
require 'myerror'
|
4
4
|
|
5
5
|
module EpiMath
|
6
|
+
extend MyError
|
7
|
+
|
6
8
|
class Point
|
7
|
-
def initialize x, y, z
|
8
|
-
if !x.is_a?Numeric or !y.is_a?Numeric or !z.is_a?Numeric
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
def initialize x, y, z=nil
|
10
|
+
MyError::Error.call "Point::new : a passed argument is not a valid number" if (!x.is_a?Numeric or !y.is_a?Numeric or (z != nil and !z.is_a?Numeric))
|
11
|
+
@coord = {:x => x.to_f, :y => y.to_f}
|
12
|
+
@coord[:z] = z.to_f if z != nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.new_a p
|
16
|
+
MyError::Error.call "Point::new_a : not a valid array of coord" if !p.is_a?Array or p.size < 2
|
17
|
+
return Point.new(*p)
|
12
18
|
end
|
13
19
|
|
20
|
+
# TODO : do not modify @
|
14
21
|
def +(p)
|
15
22
|
if p.is_a?Point
|
16
|
-
@coord
|
17
|
-
@coord
|
18
|
-
@coord
|
23
|
+
@coord[:x] += p.x
|
24
|
+
@coord[:y] += p.y
|
25
|
+
@coord[:z] += p.z if p.z or @coord[:z]
|
19
26
|
elsif p.is_a?Numeric
|
20
|
-
@coord
|
21
|
-
@coord
|
22
|
-
@coord
|
27
|
+
@coord[:x] += p
|
28
|
+
@coord[:y] += p
|
29
|
+
@coord[:z] += p if @coord[:z]
|
23
30
|
else
|
24
|
-
Error.call "Point::+ : passed argument is invalid"
|
31
|
+
MyError::Error.call "Point::+ : passed argument is invalid (#{p.class})"
|
25
32
|
end
|
33
|
+
return self
|
34
|
+
end
|
35
|
+
|
36
|
+
def -(p)
|
37
|
+
p_ = Point.new(-self.x, -self.y)
|
38
|
+
p_ = Point.new(-self.x, -self.y, -self.z) if self.z
|
39
|
+
p_ = p_ + p
|
40
|
+
return p_
|
26
41
|
end
|
27
42
|
|
28
43
|
def *(p)
|
29
|
-
Error.call "Point
|
44
|
+
MyError::Error.call "Point::* : passed argument is invalid" if !p.is_a?Numeric
|
30
45
|
|
31
|
-
@coord
|
32
|
-
@coord
|
33
|
-
@coord
|
46
|
+
@coord[:x] *= p
|
47
|
+
@coord[:y] *= p
|
48
|
+
@coord[:z] *= p if @coord[:z]
|
49
|
+
return self
|
50
|
+
end
|
51
|
+
|
52
|
+
def ==(p)
|
53
|
+
MyError::Error.call "Point::== : passed argument is invalid" if !p.is_a?Point
|
54
|
+
return true if p.x == self.x and p.y == self.y and p.z == self.z
|
55
|
+
return false
|
34
56
|
end
|
35
57
|
|
36
58
|
def to_s
|
37
|
-
"(#{self.x}; #{self.y}
|
59
|
+
str = "(#{self.x}; #{self.y}"
|
60
|
+
str += "; #{self.z}" if self.z
|
61
|
+
str += ")"
|
38
62
|
end
|
39
63
|
|
40
64
|
def x
|
@@ -48,5 +72,36 @@ class Point
|
|
48
72
|
def z
|
49
73
|
@coord[:z]
|
50
74
|
end
|
75
|
+
|
76
|
+
def x= v
|
77
|
+
@coord[:x] = v
|
78
|
+
end
|
79
|
+
|
80
|
+
def y= v
|
81
|
+
@coord[:y] = v
|
82
|
+
end
|
83
|
+
|
84
|
+
def z= v
|
85
|
+
@coord[:z] = v
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.get_middle(a, b)
|
89
|
+
return Point.get_in(a, b, 0.5)
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.get_in(a, b, p)
|
93
|
+
MyError::Error.call "Point::get_in : an argument is not a Point" if !a.is_a?Point or !b.is_a?Point
|
94
|
+
|
95
|
+
if a.x != b.x and p.is_a?Float and p >= 0 and p <= 1
|
96
|
+
coef = ((b.y-a.y) / (b.x-a.x))
|
97
|
+
ordonnee = a.y - coef * a.x
|
98
|
+
min = [b.x, a.x].min
|
99
|
+
max = [b.x, a.x].max
|
100
|
+
mid = (max - min) * p
|
101
|
+
return Point.new(min + mid, coef * (mid + min) + ordonnee)
|
102
|
+
end
|
103
|
+
return nil
|
104
|
+
end
|
105
|
+
|
51
106
|
end
|
52
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epimath100
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- poulet_a
|
@@ -79,6 +79,6 @@ rubyforge_project:
|
|
79
79
|
rubygems_version: 2.2.2
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
|
-
summary:
|
82
|
+
summary: Better point
|
83
83
|
test_files: []
|
84
84
|
has_rdoc:
|