find_beads 0.9.3-java → 0.9.4-java
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/find_beads/version.rb +1 -1
- data/lib/find_beads.rb +38 -1
- metadata +1 -1
data/lib/find_beads/version.rb
CHANGED
data/lib/find_beads.rb
CHANGED
@@ -32,6 +32,8 @@ require 'rimageanalysistools/graythresh'
|
|
32
32
|
|
33
33
|
require 'trollop'
|
34
34
|
|
35
|
+
require 'matrix'
|
36
|
+
|
35
37
|
java_import Java::edu.stanford.cfuller.imageanalysistools.image.ImageFactory
|
36
38
|
|
37
39
|
##
|
@@ -89,6 +91,35 @@ module FindBeads
|
|
89
91
|
|
90
92
|
end
|
91
93
|
|
94
|
+
|
95
|
+
##
|
96
|
+
# Projects a point in space onto a specified line.
|
97
|
+
#
|
98
|
+
# @param [Array] origin the point in space the will serve as the origin
|
99
|
+
# for the purposes of the projection (this should be on the line)
|
100
|
+
# @param [Array] point_to_project the point in space that will be projected
|
101
|
+
# this should be in the same coordinate system in which the origin is
|
102
|
+
# specified, not relative to the origin
|
103
|
+
# @param [Array] point_on_line another point on the line specified in the
|
104
|
+
# same coordinate system in which the origin is specified, not relative to
|
105
|
+
# the origin
|
106
|
+
#
|
107
|
+
# @return [Array] the projected point (in the same coordinate system as
|
108
|
+
# the other points were specified)
|
109
|
+
#
|
110
|
+
def self.project_point_onto_vector(origin, point_to_project, point_on_line)
|
111
|
+
|
112
|
+
unit_vec = (Vector[*point_on_line] - Vector[*origin]).normalize
|
113
|
+
|
114
|
+
proj_vec = Vector[*point_to_project] - Vector[*origin]
|
115
|
+
|
116
|
+
projected = unit_vec * (proj_vec.inner_product(unit_vec)) + Vector[*origin]
|
117
|
+
|
118
|
+
projected.to_a
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
|
92
123
|
##
|
93
124
|
# Checks if a given coordinate would be approximately on the boundary between two regions of a
|
94
125
|
# Voronoi diagram of constructed from a set of points. The approximation is calculated such that no
|
@@ -134,9 +165,15 @@ module FindBeads
|
|
134
165
|
|
135
166
|
end
|
136
167
|
|
168
|
+
proj_point = project_point_onto_vector(points[closest_index], [x,y], points[next_index])
|
169
|
+
|
170
|
+
next_dist_proj = Math.hypot(points[next_index][0]-proj_point[0], points[next_index][1]-proj_point[1])
|
171
|
+
closest_dist_proj = Math.hypot(points[closest_index][0]-proj_point[0], points[closest_index][1]-proj_point[1])
|
172
|
+
|
173
|
+
|
137
174
|
cutoff = 1.01*Math.sqrt(2)
|
138
175
|
|
139
|
-
if
|
176
|
+
if next_dist_proj - closest_dist_proj < cutoff then
|
140
177
|
|
141
178
|
true
|
142
179
|
|