delaunator 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/delaunator.rb +1 -2
- data/lib/delaunator/triangulator.rb +20 -20
- data/lib/delaunator/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1a7fb12a5f60b598470a47a0315c35fd3698c7b2f6ce1b2ee71f50c3751508a
|
4
|
+
data.tar.gz: 961e168bcee87dffc21f8fedab28c5a4284a7514c53b2eeb8b10cd4f20b9900b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4be53d920c632b030a6f0285d77d1d8a1ff44584238ddcdf1a83eecc42f8e9a566cb13f8faef7885bc72f6fa9f93e944e18b013b3815c1802e04240966718ad9
|
7
|
+
data.tar.gz: fa5fc1aad3c2153fe2a2c4fb30a7b94b28021d1906b13c9a9cfb6c7ce47574aed28e95c13461ebf385507e2ad73c1d67afc8f615ac9c8474fdba1964a5b11a4e
|
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
[](https://badge.fury.io/rb/delaunator)
|
2
|
+
[](https://travis-ci.com/hendrixfan/delaunator-ruby)
|
3
|
+
|
1
4
|
# Delaunay Triangulation
|
2
5
|
|
3
6
|
This is a port of [Mapbox's Delaunator project](https://github.com/mapbox/delaunator).
|
data/lib/delaunator.rb
CHANGED
@@ -13,7 +13,6 @@ module Delaunator
|
|
13
13
|
d.triangulate
|
14
14
|
(0..d.halfedges.length - 1).each do |i|
|
15
15
|
i2 = d.halfedges[i]
|
16
|
-
#if i2 != -1 && d.halfedges[i2] != i
|
17
16
|
raise ArgumentError, "invalid_halfedge #{i}" if i2 != -1 && d.halfedges[i2] != i
|
18
17
|
end
|
19
18
|
# validate triangulation
|
@@ -39,7 +38,7 @@ module Delaunator
|
|
39
38
|
end
|
40
39
|
triangles_area = triangle_areas.inject(0){ |sum, x| sum + x }
|
41
40
|
err = ((hull_area - triangles_area) / hull_area).abs
|
42
|
-
raise ArgumentError, :invalid_triangulation unless err <= 2
|
41
|
+
raise ArgumentError, :invalid_triangulation unless err <= 2 ** -51
|
43
42
|
end
|
44
43
|
|
45
44
|
def self.convex(r, q, p)
|
@@ -2,7 +2,7 @@ module Delaunator
|
|
2
2
|
class Triangulator
|
3
3
|
attr_reader :halfedges, :hull, :triangles, :coords
|
4
4
|
|
5
|
-
EPSILON = 2
|
5
|
+
EPSILON = 2 ** -52
|
6
6
|
|
7
7
|
EDGE_STACK = Array.new(512, 0)
|
8
8
|
|
@@ -11,8 +11,8 @@ module Delaunator
|
|
11
11
|
@n = @coords.length >> 1
|
12
12
|
@max_triangles = [2 * @n - 5, 0].max
|
13
13
|
@triangles_len = 0
|
14
|
-
@
|
15
|
-
@
|
14
|
+
@_triangles = Array.new(@max_triangles * 3, 0)
|
15
|
+
@_halfedges = Array.new(@max_triangles * 3, 0)
|
16
16
|
|
17
17
|
@hash_size = Math.sqrt(@n).ceil
|
18
18
|
@hull_prev = Array.new(@n, 0)
|
@@ -225,7 +225,6 @@ module Delaunator
|
|
225
225
|
@hull_next[i] = n
|
226
226
|
|
227
227
|
# save the two new edges in the hash table
|
228
|
-
# this._hashKey(x, y) = 0 FEHLER
|
229
228
|
@hull_hash[hash_key(x, y)] = i
|
230
229
|
@hull_hash[hash_key(@coords[2 * e], @coords[2 * e + 1])] = e
|
231
230
|
end
|
@@ -237,8 +236,9 @@ module Delaunator
|
|
237
236
|
end
|
238
237
|
|
239
238
|
# trim typed triangle mesh arrays
|
240
|
-
@
|
241
|
-
@
|
239
|
+
@halfedges = @_halfedges.slice(0, @triangles_len)
|
240
|
+
@triangles = @_triangles.slice(0, @triangles_len)
|
241
|
+
@triangles
|
242
242
|
end
|
243
243
|
|
244
244
|
def dist(ax, ay, bx, by)
|
@@ -320,9 +320,9 @@ module Delaunator
|
|
320
320
|
|
321
321
|
def add_triangle(i0, i1, i2, a, b, c)
|
322
322
|
i = @triangles_len
|
323
|
-
@
|
324
|
-
@
|
325
|
-
@
|
323
|
+
@_triangles[i] = i0
|
324
|
+
@_triangles[i + 1] = i1
|
325
|
+
@_triangles[i + 2] = i2
|
326
326
|
link(i, a)
|
327
327
|
link(i + 1, b)
|
328
328
|
link(i + 2, c)
|
@@ -336,8 +336,8 @@ module Delaunator
|
|
336
336
|
end
|
337
337
|
|
338
338
|
def link(a, b)
|
339
|
-
@
|
340
|
-
@
|
339
|
+
@_halfedges[a] = b
|
340
|
+
@_halfedges[b] = a if b != -1
|
341
341
|
end
|
342
342
|
|
343
343
|
def legalize(a)
|
@@ -358,7 +358,7 @@ module Delaunator
|
|
358
358
|
i = 0
|
359
359
|
ar = 0
|
360
360
|
loop do
|
361
|
-
b = @
|
361
|
+
b = @_halfedges[a]
|
362
362
|
a0 = a - a % 3
|
363
363
|
|
364
364
|
ar = a0 + (a + 2) % 3
|
@@ -374,10 +374,10 @@ module Delaunator
|
|
374
374
|
al = a0 + (a + 1) % 3
|
375
375
|
bl = b0 + (b + 2) % 3
|
376
376
|
|
377
|
-
p0 = @
|
378
|
-
pr = @
|
379
|
-
pl = @
|
380
|
-
p1 = @
|
377
|
+
p0 = @_triangles[ar]
|
378
|
+
pr = @_triangles[a]
|
379
|
+
pl = @_triangles[al]
|
380
|
+
p1 = @_triangles[bl]
|
381
381
|
|
382
382
|
illegal = in_circle(@coords[2 * p0], @coords[2 * p0 + 1],
|
383
383
|
@coords[2 * pr], @coords[2 * pr + 1],
|
@@ -385,9 +385,9 @@ module Delaunator
|
|
385
385
|
@coords[2 * p1], @coords[2 * p1 + 1])
|
386
386
|
|
387
387
|
if illegal
|
388
|
-
@
|
389
|
-
@
|
390
|
-
hbl = @
|
388
|
+
@_triangles[a] = p1
|
389
|
+
@_triangles[b] = p0
|
390
|
+
hbl = @_halfedges[bl]
|
391
391
|
# edge swapped on the other side of the hull (rare)
|
392
392
|
# fix the halfedge reference
|
393
393
|
if hbl == -1
|
@@ -402,7 +402,7 @@ module Delaunator
|
|
402
402
|
end
|
403
403
|
end
|
404
404
|
link(a, hbl)
|
405
|
-
link(b, @
|
405
|
+
link(b, @_halfedges[ar])
|
406
406
|
link(ar, bl)
|
407
407
|
|
408
408
|
br = b0 + (b + 1) % 3
|
data/lib/delaunator/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delaunator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wolfgang Wohanka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
requirements: []
|
110
|
-
rubygems_version: 3.
|
110
|
+
rubygems_version: 3.1.2
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Delaunay triangulation of 2D points
|