Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java
r10378 r10915 82 82 */ 83 83 public EastNorth interpolate(EastNorth en2, double proportion) { 84 return new EastNorth(this.x + proportion * (en2.x - this.x), 85 this.y + proportion * (en2.y - this.y)); 84 // this is an alternate form of this.x + proportion * (en2.x - this.x) that is slightly faster 85 return new EastNorth((1 - proportion) * this.x + proportion * en2.x, 86 (1 - proportion) * this.y + proportion * en2.y); 86 87 } 87 88 … … 92 93 */ 93 94 public EastNorth getCenter(EastNorth en2) { 94 return new EastNorth((this.x + en2.x)/2.0, (this.y + en2.y)/2.0); 95 // The JIT will inline this for us, it is as fast as the normal /2 approach 96 return interpolate(en2, .5); 95 97 } 96 98 -
trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
r10914 r10915 427 427 */ 428 428 public LatLon interpolate(LatLon ll2, double proportion) { 429 return new LatLon(this.lat() + proportion * (ll2.lat() - this.lat()), 430 this.lon() + proportion * (ll2.lon() - this.lon())); 429 // this is an alternate form of this.lat() + proportion * (ll2.lat() - this.lat()) that is slightly faster 430 return new LatLon((1 - proportion) * this.lat() + proportion * ll2.lat(), 431 (1 - proportion) * this.lon() + proportion * ll2.lon()); 431 432 } 432 433 … … 437 438 */ 438 439 public LatLon getCenter(LatLon ll2) { 440 // The JIT will inline this for us, it is as fast as the normal /2 approach 439 441 return interpolate(ll2, .5); 440 442 } -
trunk/test/unit/org/openstreetmap/josm/data/coor/LatLonTest.java
r10758 r10915 165 165 assertEquals("2115070.3250722", c.lonToString(CoordinateFormat.EAST_NORTH)); 166 166 } 167 168 /** 169 * Test {@link LatLon#interpolate(LatLon, double)} 170 * @since 10915 171 */ 172 @Test 173 public void testInterpolate() { 174 LatLon ll1 = new LatLon(0, 0); 175 LatLon ll2 = new LatLon(30, 60); 176 LatLon ll3 = new LatLon(-70, -40); 177 // lat: 178 assertEquals(15, ll1.interpolate(ll2, 0.5).lat(), 1e-10); 179 assertEquals(0, ll1.interpolate(ll2, 0).lat(), 1e-10); 180 assertEquals(30, ll1.interpolate(ll2, 1).lat(), 1e-10); 181 assertEquals(0, ll3.interpolate(ll2, .7).lat(), 1e-10); 182 // lon 183 assertEquals(30, ll1.interpolate(ll2, 0.5).lon(), 1e-10); 184 assertEquals(0, ll1.interpolate(ll2, 0).lon(), 1e-10); 185 assertEquals(60, ll1.interpolate(ll2, 1).lon(), 1e-10); 186 assertEquals(0, ll3.interpolate(ll2, .4).lon(), 1e-10); 187 } 188 189 /** 190 * Test {@link LatLon#getCenter(LatLon)} 191 * @since 10915 192 */ 193 @Test 194 public void testGetCenter() { 195 LatLon ll1 = new LatLon(0, 0); 196 LatLon ll2 = new LatLon(30, 60); 197 LatLon ll3 = new LatLon(-70, -40); 198 199 assertEquals(15, ll1.getCenter(ll2).lat(), 1e-10); 200 assertEquals(15, ll2.getCenter(ll1).lat(), 1e-10); 201 assertEquals(-20, ll3.getCenter(ll2).lat(), 1e-10); 202 203 assertEquals(30, ll1.getCenter(ll2).lon(), 1e-10); 204 assertEquals(30, ll2.getCenter(ll1).lon(), 1e-10); 205 assertEquals(10, ll3.getCenter(ll2).lon(), 1e-10); 206 } 167 207 }
Note:
See TracChangeset
for help on using the changeset viewer.