@@ -82,17 +82,20 @@ def point_search(node, point, result, unique)
8282
8383 until stack . empty?
8484 node = stack . pop
85+ node_left_node = node . left_node
86+ node_right_node = node . right_node
87+ node_x_center = node . x_center
8588
8689 node . s_center . each do |k |
8790 break if k . begin > point
8891 result << k if point < k . end
8992 end
9093
91- if node . left_node && ( point_r < node . x_center )
92- stack << node . left_node
94+ if node_left_node && ( point_r < node_x_center )
95+ stack << node_left_node
9396
94- elsif node . right_node && ( point_r >= node . x_center )
95- stack << node . right_node
97+ elsif node_right_node && ( point_r >= node_x_center )
98+ stack << node_right_node
9699 end
97100
98101 end
@@ -133,25 +136,33 @@ def search_s_center(query)
133136 result = [ ]
134137
135138 s_center . each do |k |
136- break if k . begin > query . end
139+ k_begin = k . begin
140+ query_end = query . end
137141
142+ break if k_begin > query_end
143+
144+ k_end = k . end
145+ query_begin = query . begin
146+
147+ k_begin_gte_q_begin = k_begin >= query_begin
148+ k_end_lte_q_end = k_end <= query_end
138149 next unless
139150 (
140151 # k is entirely contained within the query
141- ( k . begin >= query . begin ) &&
142- ( k . end <= query . end )
152+ ( k_begin_gte_q_begin ) &&
153+ ( k_end_lte_q_end )
143154 ) || (
144155 # k's start overlaps with the query
145- ( k . begin >= query . begin ) &&
146- ( k . begin < query . end )
156+ ( k_begin_gte_q_begin ) &&
157+ ( k_begin < query_end )
147158 ) || (
148159 # k's end overlaps with the query
149- ( k . end > query . begin ) &&
150- ( k . end <= query . end )
160+ ( k_end > query_begin ) &&
161+ ( k_end_lte_q_end )
151162 ) || (
152163 # k is bigger than the query
153- ( k . begin < query . begin ) &&
154- ( k . end > query . end )
164+ ( k_begin < query_begin ) &&
165+ ( k_end > query_end )
155166 )
156167 result << k
157168 end
0 commit comments