Comments (4)
/cc @rsned
from geo.
While truing to write small reproducer, i discover that when i use built-in CapBound, there is zero point, erroneously inserted at start of polyline , and that is reason for huge cap differences.
Now there is no more ' times slower' performance, but suggested change still return smaller caps, and as i understand, computational complexity is the same.
from geo.
Here is benchmark, proposed change is faster!(i don't expect such difference):
goos: linux
goarch: amd64
pkg: jambo/tests/geos2
BenchmarkCap1-4 20000 61406 ns/op
BenchmarkCap2-4 1000000 1289 ns/op
package main
import (
"math/rand"
"testing"
"github.com/golang/geo/s2"
)
///////////////////////////////////atoi
const N = 200
var polyline s2.Polyline
func init() {
const s = 100000
for i := 0; i < N; i++ {
t := float64(rand.Int63n(90*s)) / s
g := float64(rand.Int63n(180*s)) / s
polyline = append(polyline, s2.PointFromLatLng(s2.LatLngFromDegrees(t, g)))
}
}
func BenchmarkCap1(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = polyline.CapBound()
}
}
func BenchmarkCap2(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = CapBound(polyline)
}
}
func CapBound(p s2.Polyline) s2.Cap {
c := s2.EmptyCap()
for _, v := range p {
c.AddPoint(v)
}
return c
}
from geo.
The C++ code uses code like
S2Cap S2Polyline::GetCapBound() const {
return GetRectBound().GetCapBound();
}
It is unlikely we will diverge from C++ algorithmically.
But note that I believe your code may be incorrect for large polylines. If an edge of the polyline is long enough, adding its endpoints to a cap progressively may end up with a cap that doesn't include the line in its entirety.
from geo.
Related Issues (20)
- Calculate S2 of polygon with OOM Error in golang
- AllNeighbors has a bug
- PolygonBuilder HOT 2
- Invalid input loops to PolygonFromOrientedLoops HOT 2
- Having trouble with RegionCoverer
- Loop.Area() unit HOT 1
- Find Closest Edge Performance with Many Polylines
- Porting bug
- Bug on Polygon Contains (linked to https://github.com/golang/geo/issues/77 ?) HOT 1
- High memory usage in getting s2 cell covering HOT 3
- Polygon.Intersects() method not working for some inputs? HOT 1
- golang-s2 momory leak HOT 1
- Q: How do you calculate the distance in km between 2 lat/lng points? HOT 7
- ppc64le - TestPredicatesRobustSignEqualities failure due to floating point precision differences HOT 1
- ppc64le - TestPointMeasuresPointArea failure due to floating point precision differences
- ppc64le - TestClosestEdgeQueryTrueDistanceLessThanChordAngleDistance failure due to floating point precision differences HOT 1
- Inverted params HOT 1
- Get a random point from a shape HOT 2
- Subdivide polygon
- Memory Leak when a loop contains point multiple time HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from geo.