Revision 8712 trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java
SnappingCoordinateMap.java | ||
---|---|---|
45 | 45 |
* |
46 | 46 |
* $Id$ |
47 | 47 |
* $Log$ |
48 |
* Revision 1.1 2006-11-09 21:08:32 azabala
|
|
48 |
* Revision 1.2 2006-11-13 20:41:08 azabala
|
|
49 | 49 |
* *** empty log message *** |
50 | 50 |
* |
51 |
* Revision 1.1 2006/11/09 21:08:32 azabala |
|
52 |
* *** empty log message *** |
|
51 | 53 |
* |
54 |
* |
|
52 | 55 |
*/ |
53 | 56 |
package com.iver.cit.gvsig.util; |
54 | 57 |
|
... | ... | |
65 | 68 |
} |
66 | 69 |
|
67 | 70 |
public boolean equals(Object obj) { |
71 |
if(! (obj instanceof SnapCoordinate)) |
|
72 |
return false; |
|
68 | 73 |
SnapCoordinate other = (SnapCoordinate) obj; |
69 | 74 |
return other.distance(this) <= snapTolerance; |
70 | 75 |
} |
71 | 76 |
|
72 | 77 |
public int hashCode() { |
73 |
return 1; // esto no es eficiente |
|
78 |
int result = 17; |
|
79 |
double xs = simplify(x); |
|
80 |
double ys = simplify(y); |
|
81 |
result = 37 * result + hashCode(xs); |
|
82 |
result = 37 * result + hashCode(ys); |
|
83 |
return result; |
|
84 |
|
|
85 |
// return 1; // esto no es eficiente |
|
74 | 86 |
} |
87 |
|
|
88 |
public double simplify(double coordinate){ |
|
89 |
if(scaleFactor == 0d) |
|
90 |
return coordinate; |
|
91 |
return Math.round(coordinate * scaleFactor) / scaleFactor; |
|
92 |
} |
|
75 | 93 |
} |
94 |
|
|
95 |
|
|
76 | 96 |
|
77 | 97 |
private double snapTolerance; |
98 |
private double scaleFactor; |
|
78 | 99 |
|
79 | 100 |
public SnappingCoordinateMap(double snapTolerance) { |
80 | 101 |
super(); |
81 | 102 |
this.snapTolerance = snapTolerance; |
103 |
if(snapTolerance != 0d) |
|
104 |
this.scaleFactor = 1d / snapTolerance; |
|
82 | 105 |
} |
83 | 106 |
|
84 | 107 |
class MinDistCoordComparator implements Comparator { |
... | ... | |
115 | 138 |
public Object get(Object key){ |
116 | 139 |
if(! (key instanceof Coordinate) ) |
117 | 140 |
return null; |
118 |
return get(new SnapCoordinate((Coordinate)key)); |
|
141 |
return super.get(new SnapCoordinate((Coordinate)key));
|
|
119 | 142 |
} |
120 | 143 |
|
121 | 144 |
public boolean containsKey(Object key){ |
... | ... | |
130 | 153 |
Coordinate c0 = new Coordinate(0, 0); |
131 | 154 |
Coordinate c1 = new Coordinate(0.01, 0.01); |
132 | 155 |
Coordinate c2 = new Coordinate(0.31, 0.41); |
156 |
Coordinate c3 = new Coordinate(0.29, 0.39); |
|
157 |
Coordinate c4 = new Coordinate(0.299, 0.411); |
|
133 | 158 |
map.put(c0, c0); |
134 | 159 |
map.put(c1, c1); |
135 | 160 |
map.put(c2, c2); |
161 |
map.put(c3, c3); |
|
162 |
map.put(c4, c4); |
|
136 | 163 |
System.out.println(map.size()); |
137 | 164 |
java.util.Set values = map.entrySet(); |
138 | 165 |
System.out.println(values.size()); |
166 |
|
|
167 |
|
|
168 |
|
|
169 |
|
|
139 | 170 |
} |
140 | 171 |
|
141 | 172 |
} |
Also available in: Unified diff