delaunator 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/delaunator.svg)](https://badge.fury.io/rb/delaunator)
|
2
|
+
[![Build Status](https://travis-ci.com/hendrixfan/delaunator-ruby.svg?branch=master)](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
|