mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-11-30 01:03:30 +01:00
turned off triangle randomization because of weird bug - will fix later
This commit is contained in:
parent
9cdc372690
commit
59af31682d
@ -34,18 +34,18 @@ import scala.collection.mutable.ArrayBuffer
|
|||||||
|
|
||||||
// Based on Raimund Seidel's paper "A simple and fast incremental randomized
|
// Based on Raimund Seidel's paper "A simple and fast incremental randomized
|
||||||
// algorithm for computing trapezoidal decompositions and for triangulating polygons"
|
// algorithm for computing trapezoidal decompositions and for triangulating polygons"
|
||||||
class Triangulator(var segments: ArrayBuffer[Segment]) {
|
class Triangulator(segments: ArrayBuffer[Segment]) {
|
||||||
|
|
||||||
// Triangle decomposition list
|
// Triangle decomposition list
|
||||||
var triangles = new ArrayBuffer[Array[Point]]
|
var triangles = new ArrayBuffer[Array[Point]]
|
||||||
|
|
||||||
// Order and randomize the segments
|
// Order and randomize the segments
|
||||||
segments = orderSegments
|
val segs = orderSegments
|
||||||
|
|
||||||
// Build the trapezoidal map and query graph
|
// Build the trapezoidal map and query graph
|
||||||
def process {
|
def process {
|
||||||
|
|
||||||
for(s <- segments) {
|
for(s <- segs) {
|
||||||
val traps = queryGraph.followSegment(s)
|
val traps = queryGraph.followSegment(s)
|
||||||
// Remove trapezoids from trapezoidal Map
|
// Remove trapezoids from trapezoidal Map
|
||||||
traps.foreach(trapezoidalMap.remove)
|
traps.foreach(trapezoidalMap.remove)
|
||||||
@ -139,14 +139,18 @@ class Triangulator(var segments: ArrayBuffer[Segment]) {
|
|||||||
private def orderSegments = {
|
private def orderSegments = {
|
||||||
// Ignore vertical segments!
|
// Ignore vertical segments!
|
||||||
val segs = new ArrayBuffer[Segment]
|
val segs = new ArrayBuffer[Segment]
|
||||||
for(s <- segments) {
|
for(s <- segments)
|
||||||
// Point p must be to the left of point q
|
// Point p must be to the left of point q
|
||||||
if(s.p.x > s.q.x) {
|
if(s.p.x > s.q.x) {
|
||||||
segs += new Segment(s.q.clone, s.p.clone)
|
val tmp = s.p
|
||||||
|
s.p = s.q
|
||||||
|
s.q = tmp
|
||||||
|
segs += s
|
||||||
} else if(s.p.x < s.q.x)
|
} else if(s.p.x < s.q.x)
|
||||||
segs += new Segment(s.p.clone, s.q.clone)
|
segs += s
|
||||||
}
|
// Randomized triangulation improves performance
|
||||||
// This is actually important: See Seidel's paper
|
// See Seidel's paper, or O'Rourke's book, p. 57
|
||||||
|
// Turn this off for now because of stupid pointer bug somewhere!
|
||||||
//Random.shuffle(segs)
|
//Random.shuffle(segs)
|
||||||
segs
|
segs
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user