(points, edges)
| 8570 | |
| 8571 | |
| 8572 | function monotoneTriangulate(points, edges) { |
| 8573 | |
| 8574 | var numPoints = points.length |
| 8575 | var numEdges = edges.length |
| 8576 | |
| 8577 | var events = [] |
| 8578 | |
| 8579 | //Create point events |
| 8580 | for(var i=0; i<numPoints; ++i) { |
| 8581 | events.push(new Event( |
| 8582 | points[i], |
| 8583 | null, |
| 8584 | EVENT_POINT, |
| 8585 | i)) |
| 8586 | } |
| 8587 | |
| 8588 | //Create edge events |
| 8589 | for(var i=0; i<numEdges; ++i) { |
| 8590 | var e = edges[i] |
| 8591 | var a = points[e[0]] |
| 8592 | var b = points[e[1]] |
| 8593 | if(a[0] < b[0]) { |
| 8594 | events.push( |
| 8595 | new Event(a, b, EVENT_START, i), |
| 8596 | new Event(b, a, EVENT_END, i)) |
| 8597 | } else if(a[0] > b[0]) { |
| 8598 | events.push( |
| 8599 | new Event(b, a, EVENT_START, i), |
| 8600 | new Event(a, b, EVENT_END, i)) |
| 8601 | } |
| 8602 | } |
| 8603 | |
| 8604 | //Sort events |
| 8605 | events.sort(compareEvent) |
| 8606 | |
| 8607 | //Initialize hull |
| 8608 | var minX = events[0].a[0] - (1 + Math.abs(events[0].a[0])) * Math.pow(2, -52) |
| 8609 | var hull = [ new PartialHull([minX, 1], [minX, 0], -1, [], [], [], []) ] |
| 8610 | |
| 8611 | //Process events in order |
| 8612 | var cells = [] |
| 8613 | for(var i=0, numEvents=events.length; i<numEvents; ++i) { |
| 8614 | var event = events[i] |
| 8615 | var type = event.type |
| 8616 | if(type === EVENT_POINT) { |
| 8617 | addPoint(cells, hull, points, event.a, event.idx) |
| 8618 | } else if(type === EVENT_START) { |
| 8619 | splitHulls(hull, points, event) |
| 8620 | } else { |
| 8621 | mergeHulls(hull, points, event) |
| 8622 | } |
| 8623 | } |
| 8624 | |
| 8625 | //Return triangulation |
| 8626 | return cells |
| 8627 | } |
| 8628 | |
| 8629 |
no test coverage detected
searching dependent graphs…