1 from __future__
import division
2 from object
import Segment
as sg
10 direction = sg.radiant_inclination(wall.x1, wall.y1, wall.x2, wall.y2)
13 elif 0 > direction >= -0.26:
14 direction = -direction
15 wall.set_direction(direction)
20 directions.append(wall.direction)
23 cluster_centers = directions[:]
26 cluster_centers = new_cluster_centers[:]
27 del new_cluster_centers[:]
28 while max_diff > min_offset:
31 cluster_centers = new_cluster_centers[:]
32 del new_cluster_centers[:]
33 return cluster_centers
39 new_cluster_centers = []
40 for alfa
in cluster_centers:
43 for teta
in directions:
45 condition = (1-(math.cos(alfa-teta)))/h
47 kernel = math.pow(1-condition, 2)
52 for teta
in directions:
54 condition = (1-(math.cos(alfa-teta)))/h
56 kernel = math.pow(1-condition, 2)
59 new_cluster_centers.append(numerator/denominator)
60 return new_cluster_centers
67 for index, old
in enumerate(cluster_centers):
68 new = new_cluster_centers[index]
69 if abs(new-old) > max_diff:
70 max_diff = abs(new-old)
80 for cluster
in set(cluster_centers):
82 if cluster_centers.count(cluster) <= num_min:
85 for index, cluster1
in enumerate(cluster_centers):
87 if cluster == cluster1:
88 candidates.append(index)
91 lengths.append(sg.length(m.x1, m.y1, m.x2, m.y2))
100 indexes = indexes + diag
108 for cluster
in set(cluster_centers):
109 if not (-0.15 < cluster < 0.15)
and not (1.45 < cluster < 1.7)
and not (-1.7 < cluster < -1.45):
110 for index, cluster1
in enumerate(cluster_centers):
111 if cluster == cluster1:
112 indexes.append(index)
119 for length
in lengths:
120 if length > min_length:
128 for cluster1
in set(cluster_centers):
129 for cluster2
in set(cluster_centers):
130 if (cluster1 != cluster2)
and (abs(cluster1-cluster2) <= 0.01):
131 new_cluster = (cluster1+cluster2)/2
133 for index, cluster3
in enumerate(cluster_centers):
134 if(cluster3 == cluster1)
or (cluster3 == cluster2):
135 cluster_centers[index] = new_cluster