mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-11-19 12:06:09 +01:00
removed update neighbors
This commit is contained in:
parent
a04b382f7d
commit
97ead85d3b
@ -76,6 +76,17 @@ class AFront(iTriangle: Triangle) {
|
|||||||
node.triangle = triangle
|
node.triangle = triangle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def basin(node: Node) {
|
||||||
|
if(node.next != tail) {
|
||||||
|
val p1 = node.point
|
||||||
|
val p2 = node.next.point
|
||||||
|
val slope = (p1.y - p2.y) / (p1.x - p2.x)
|
||||||
|
if(slope < Math.Pi*3/4)
|
||||||
|
println("basin slope = " + slope)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advancing front node
|
// Advancing front node
|
||||||
|
@ -116,6 +116,7 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
private val aFront = new AFront(iTriangle)
|
private val aFront = new AFront(iTriangle)
|
||||||
|
|
||||||
private val PI_2 = Math.Pi/2
|
private val PI_2 = Math.Pi/2
|
||||||
|
private val PI_34 = Math.Pi*3/4
|
||||||
|
|
||||||
// Sweep points; build mesh
|
// Sweep points; build mesh
|
||||||
sweep
|
sweep
|
||||||
@ -153,35 +154,17 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
mesh.map += lTriangle
|
mesh.map += lTriangle
|
||||||
mesh.map += rTriangle
|
mesh.map += rTriangle
|
||||||
|
|
||||||
// Legalize new triangles
|
// No need for legalization here
|
||||||
val rLegal = legalization(rTriangle, rTriangle.neighbors(0))
|
|
||||||
val lLegal = legalization(lTriangle, lTriangle.neighbors(0))
|
|
||||||
var scanNode: Node = null
|
|
||||||
|
|
||||||
// Update advancing front
|
// Update advancing front
|
||||||
if(rLegal) {
|
val newNode = aFront.insert(point, rTriangle, node)
|
||||||
// Update neighbors
|
node.prev.next = newNode
|
||||||
node.triangle.updateNeighbors(rTriangle.points(1), rTriangle.points(2), rTriangle, mesh.debug)
|
newNode.prev = node.prev
|
||||||
scanNode = aFront.insert(point, rTriangle, node)
|
|
||||||
} else {
|
|
||||||
scanNode = new Node(rTriangle.points(1), rTriangle)
|
|
||||||
scanNode.next = node.next
|
|
||||||
node.next = scanNode
|
|
||||||
scanNode.prev = node
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update neighbor pointers
|
|
||||||
if(lLegal) {
|
|
||||||
lTriangle.neighbors(0).updateNeighbors(lTriangle.points(1), lTriangle.points(2), lTriangle, mesh.debug)
|
|
||||||
node.prev.next = scanNode
|
|
||||||
scanNode.prev = node.prev
|
|
||||||
node.prev.triangle = lTriangle
|
node.prev.triangle = lTriangle
|
||||||
} else {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fill in adjacent triangles if required
|
// Fill in adjacent triangles if required
|
||||||
scanAFront(scanNode)
|
scanAFront(newNode)
|
||||||
scanNode.triangle
|
newNode.triangle
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -197,25 +180,23 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
|
|
||||||
// Legalize
|
// Legalize
|
||||||
val legal = legalization(triangle, nTri)
|
val legal = legalization(triangle, nTri)
|
||||||
var scanNode: Node = null
|
var newNode: Node = null
|
||||||
|
|
||||||
// Update advancing front
|
// Update advancing front
|
||||||
if(legal) {
|
if(legal) {
|
||||||
// Update neighbors
|
newNode = aFront.insert(point, triangle, node)
|
||||||
nTri.updateNeighbors(triangle.points(1), triangle.points(2), triangle, mesh.debug)
|
|
||||||
scanNode = aFront.insert(point, triangle, node)
|
|
||||||
} else {
|
} else {
|
||||||
scanNode = new Node(triangle.points(1), triangle)
|
newNode = new Node(triangle.points(1), triangle)
|
||||||
val rNode = node.next
|
val rNode = node.next
|
||||||
rNode.prev = scanNode
|
rNode.prev = newNode
|
||||||
scanNode.next = rNode
|
newNode.next = rNode
|
||||||
node.next = scanNode
|
node.next = newNode
|
||||||
scanNode.prev = node
|
newNode.prev = node
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill in adjacent triangles if required
|
// Fill in adjacent triangles if required
|
||||||
scanAFront(scanNode)
|
scanAFront(newNode)
|
||||||
scanNode.triangle
|
newNode.triangle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +217,7 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
triangles += triangles.last.findNeighbor(edge.p - edge.q)
|
triangles += triangles.last.findNeighbor(edge.p - edge.q)
|
||||||
|
|
||||||
// TODO: fix triangles.last == null bug!
|
// TODO: fix triangles.last == null bug!
|
||||||
// This happens in the bird & nazca monkey demo...
|
// Not sure why this happens in bird & nazca monkey demo...
|
||||||
if(triangles.last == null)
|
if(triangles.last == null)
|
||||||
triangles -= triangles.last
|
triangles -= triangles.last
|
||||||
|
|
||||||
@ -334,8 +315,6 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
|
|
||||||
if(!P.isEmpty) {
|
if(!P.isEmpty) {
|
||||||
val points = Array(a, P.first, b)
|
val points = Array(a, P.first, b)
|
||||||
// TODO: Correctly update neighbor pointers?
|
|
||||||
// Not updating seems to work with simple polygons...
|
|
||||||
val neighbors = new Array[Triangle](3)
|
val neighbors = new Array[Triangle](3)
|
||||||
T += new Triangle(points, neighbors)
|
T += new Triangle(points, neighbors)
|
||||||
mesh.map += T.last
|
mesh.map += T.last
|
||||||
@ -368,7 +347,6 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
|
|
||||||
// Fill empty space with a triangle
|
// Fill empty space with a triangle
|
||||||
def fill(node: Node): Double = {
|
def fill(node: Node): Double = {
|
||||||
|
|
||||||
val a = (node.prev.point - node.point)
|
val a = (node.prev.point - node.point)
|
||||||
val b = (node.next.point - node.point)
|
val b = (node.next.point - node.point)
|
||||||
val angle = Math.abs(Math.atan2(a cross b, a dot b))
|
val angle = Math.abs(Math.atan2(a cross b, a dot b))
|
||||||
@ -376,9 +354,6 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
val points = Array(node.prev.point, node.point, node.next.point)
|
val points = Array(node.prev.point, node.point, node.next.point)
|
||||||
val neighbors = Array(node.triangle, null, node.prev.triangle)
|
val neighbors = Array(node.triangle, null, node.prev.triangle)
|
||||||
val triangle = new Triangle(points, neighbors)
|
val triangle = new Triangle(points, neighbors)
|
||||||
// Update neighbor pointers
|
|
||||||
node.prev.triangle.updateNeighbors(triangle.points(0), triangle.points(1), triangle, mesh.debug)
|
|
||||||
node.triangle.updateNeighbors(triangle.points(1), triangle.points(2), triangle, mesh.debug)
|
|
||||||
mesh.map += triangle
|
mesh.map += triangle
|
||||||
aFront -= (node.prev, node, triangle)
|
aFront -= (node.prev, node, triangle)
|
||||||
}
|
}
|
||||||
@ -406,7 +381,7 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
val sinB = v3 cross v4
|
val sinB = v3 cross v4
|
||||||
|
|
||||||
// Some small number
|
// Some small number
|
||||||
if(cosA*sinB + sinA*cosB < -0.01f)
|
if(cosA*sinB + sinA*cosB < -0.0001f)
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
@ -423,24 +398,6 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
val point = t1.points(0)
|
val point = t1.points(0)
|
||||||
t1.legalize(oPoint)
|
t1.legalize(oPoint)
|
||||||
t2.legalize(oPoint, point)
|
t2.legalize(oPoint, point)
|
||||||
|
|
||||||
// TODO: Make sure this is correct
|
|
||||||
val cwNeighbor = t2.neighborCW(oPoint)
|
|
||||||
val ccwNeighbor = t2.neighborCCW(oPoint)
|
|
||||||
|
|
||||||
t1.neighbors(0) = t2
|
|
||||||
t1.neighbors(1) = cwNeighbor
|
|
||||||
t1.neighbors(2) = null
|
|
||||||
|
|
||||||
if(t2.points(0) == oPoint) {
|
|
||||||
t2.neighbors(0) = null
|
|
||||||
t2.neighbors(1) = ccwNeighbor
|
|
||||||
t2.neighbors(2) = t1
|
|
||||||
} else {
|
|
||||||
t2.neighbors(0) = ccwNeighbor
|
|
||||||
t2.neighbors(1) = t1
|
|
||||||
t2.neighbors(2) = null
|
|
||||||
}
|
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
true
|
true
|
||||||
|
Loading…
Reference in New Issue
Block a user