Documentation ¶
Index ¶
- Constants
- func InScanArea(pa, pb, pc, pd *Point) bool
- func PointCmp(a, b *Point) bool
- type AdvancingFront
- func (ad *AdvancingFront) AdvancingFront(head, tail *Node)
- func (ad *AdvancingFront) FindSearchNode(x float64) *Node
- func (ad *AdvancingFront) Head() *Node
- func (ad *AdvancingFront) LocateNode(x float64) *Node
- func (ad *AdvancingFront) LocatePoint(point *Point) *Node
- func (ad *AdvancingFront) Search() *Node
- func (ad *AdvancingFront) Set_head(node *Node)
- func (ad *AdvancingFront) Set_search(node *Node)
- func (ad *AdvancingFront) Set_tail(node *Node)
- func (ad *AdvancingFront) Tail() *Node
- type Basin
- type CDT
- type Edge
- type EdgeEvent
- type Node
- type Orientation
- type Point
- type Sweep
- func (s *Sweep) Angle(origin, pa, pb *Point) float64
- func (s *Sweep) AngleExceeds90Degrees(origin, pa, pb *Point) bool
- func (s *Sweep) AngleExceedsPlus90DegreesOrIsNegative(origin, pa, pb *Point) bool
- func (s *Sweep) BasinAngle(node *Node) float64
- func (s *Sweep) EdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) EdgeEvent1(tcx *SweepContext, ep, eq *Point, triangle *Triangle, point *Point)
- func (s *Sweep) Fill(tcx *SweepContext, node *Node)
- func (s *Sweep) FillAdvancingFront(tcx *SweepContext, n *Node)
- func (s *Sweep) FillBasin(tcx *SweepContext, node *Node)
- func (s *Sweep) FillBasinReq(tcx *SweepContext, node *Node)
- func (s *Sweep) FillEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillLeftAboveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillLeftBelowEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillLeftConcaveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillLeftConvexEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillRightAboveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillRightBelowEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillRightConcaveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FillRightConvexEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
- func (s *Sweep) FinalizationPolygon(tcx *SweepContext)
- func (s *Sweep) FlipEdgeEvent(tcx *SweepContext, ep, eq *Point, t *Triangle, p *Point)
- func (s *Sweep) FlipScanEdgeEvent(tcx *SweepContext, ep, eq *Point, flip_triangle *Triangle, t *Triangle, ...)
- func (s *Sweep) HoleAngle(node *Node) float64
- func (s *Sweep) Incircle(pa, pb, pc, pd *Point) bool
- func (s *Sweep) IsEdgeSideOfTriangle(triangle *Triangle, ep, eq *Point) bool
- func (s *Sweep) IsShallow(tcx *SweepContext, node *Node) bool
- func (s *Sweep) LargeHole_DontFill(node *Node) bool
- func (s *Sweep) Legalize(tcx *SweepContext, t *Triangle) bool
- func (s *Sweep) NewFrontTriangle(tcx *SweepContext, point *Point, node *Node) *Node
- func (s *Sweep) NextFlipPoint(ep, eq *Point, ot *Triangle, op *Point) *Point
- func (s *Sweep) NextFlipTriangle(tcx *SweepContext, o Orientation, t, ot *Triangle, p, op *Point) *Triangle
- func (s *Sweep) PointEvent(tcx *SweepContext, point *Point) *Node
- func (s *Sweep) RotateTrianglePair(t *Triangle, p *Point, ot *Triangle, op *Point)
- func (s *Sweep) SweepPoints(tcx *SweepContext)
- func (s *Sweep) Triangulate(tcx *SweepContext)
- type SweepContext
- func (s *SweepContext) AddHole(polyline []*Point)
- func (s *SweepContext) AddPoint(point *Point)
- func (s *SweepContext) AddToMap(triangle *Triangle)
- func (s *SweepContext) CreateAdvancingFront(nodes []*Node)
- func (s *SweepContext) Front() *AdvancingFront
- func (s *SweepContext) GetMap() list.List
- func (s *SweepContext) GetPoint(index int) *Point
- func (s *SweepContext) GetTriangles() []*Triangle
- func (s *SweepContext) Head() *Point
- func (s *SweepContext) InitEdges(polyline []*Point)
- func (s *SweepContext) InitTriangulation()
- func (s *SweepContext) LocateNode(point *Point) *Node
- func (s *SweepContext) MapTriangleToNodes(t *Triangle)
- func (s *SweepContext) MeshClean(triangle *Triangle)
- func (s *SweepContext) RemoveFromMap(triangle *Triangle)
- func (s *SweepContext) Set_tail(p1 *Point)
- func (s *SweepContext) Tail() *Point
- type Triangle
- func (tri *Triangle) Add(a, b *Point) *Point
- func (tri *Triangle) Clear()
- func (tri *Triangle) ClearDelunayEdges()
- func (tri *Triangle) ClearNeighbor(triangle *Triangle)
- func (tri *Triangle) ClearNeighbors()
- func (tri *Triangle) ContainsEdge(e *Edge) bool
- func (tri *Triangle) ContainsPoint(p *Point) bool
- func (tri *Triangle) ContainsPoints(p *Point, q *Point) bool
- func (tri *Triangle) Cross(a, b *Point) float64
- func (tri *Triangle) Cross1(a *Point, s float64) *Point
- func (tri *Triangle) Cross2(s float64, a *Point) *Point
- func (tri *Triangle) DebugPrint()
- func (tri *Triangle) Dot(a, b *Point) float64
- func (tri *Triangle) EdgeIndex(p1, p2 *Point) int
- func (tri *Triangle) GetConstrainedEdgeCCW(p *Point) bool
- func (tri *Triangle) GetConstrainedEdgeCW(p *Point) bool
- func (tri *Triangle) GetDelunayEdgeCCW(p *Point) bool
- func (tri *Triangle) GetDelunayEdgeCW(p *Point) bool
- func (tri *Triangle) GetNeighbor(index int) *Triangle
- func (tri *Triangle) GetPoint(index int) *Point
- func (tri *Triangle) Index(p *Point) int
- func (tri *Triangle) IsInterior() bool
- func (tri *Triangle) Legalize(point *Point)
- func (tri *Triangle) Legalize1(opoint *Point, npoint *Point)
- func (tri *Triangle) MarkConstrainedEdge(p, q *Point)
- func (tri *Triangle) MarkConstrainedEdgeEdge(edge *Edge)
- func (tri *Triangle) MarkConstrainedEdgeIndex(index int)
- func (tri *Triangle) MarkNeighbor(t *Triangle)
- func (tri *Triangle) MarkNeighborPointers(p1, p2 *Point, t *Triangle)
- func (tri *Triangle) Mul(s float64, a *Point) *Point
- func (tri *Triangle) NeighborAcross(opoint *Point) *Triangle
- func (tri *Triangle) NeighborCCW(point *Point) *Triangle
- func (tri *Triangle) NeighborCW(point *Point) *Triangle
- func (tri *Triangle) OppositePoint(t *Triangle, p *Point) *Point
- func (tri *Triangle) PointCCW(point *Point) *Point
- func (tri *Triangle) PointCW(point *Point) *Point
- func (tri *Triangle) SetConstrainedEdgeCCW(p *Point, ce bool)
- func (tri *Triangle) SetConstrainedEdgeCW(p *Point, ce bool)
- func (tri *Triangle) SetDelunayEdgeCCW(p *Point, e bool)
- func (tri *Triangle) SetDelunayEdgeCW(p *Point, e bool)
- func (tri *Triangle) SetInterior(b bool)
- func (tri *Triangle) Sub(a, b *Point) *Point
Constants ¶
View Source
const ( PI_3div4 = 3 * math.Pi / 4 PI_div2 = 1.57079632679489661923 EPSILON = 1e-12 )
Variables ¶
This section is empty.
Functions ¶
func InScanArea ¶
Types ¶
type AdvancingFront ¶
type AdvancingFront struct {
// contains filtered or unexported fields
}
func NewAdvancingFront ¶
func NewAdvancingFront(head, tail *Node) *AdvancingFront
func (*AdvancingFront) AdvancingFront ¶
func (ad *AdvancingFront) AdvancingFront(head, tail *Node)
func (*AdvancingFront) FindSearchNode ¶
func (ad *AdvancingFront) FindSearchNode(x float64) *Node
func (*AdvancingFront) Head ¶
func (ad *AdvancingFront) Head() *Node
func (*AdvancingFront) LocateNode ¶
func (ad *AdvancingFront) LocateNode(x float64) *Node
func (*AdvancingFront) LocatePoint ¶
func (ad *AdvancingFront) LocatePoint(point *Point) *Node
func (*AdvancingFront) Search ¶
func (ad *AdvancingFront) Search() *Node
func (*AdvancingFront) Set_head ¶
func (ad *AdvancingFront) Set_head(node *Node)
func (*AdvancingFront) Set_search ¶
func (ad *AdvancingFront) Set_search(node *Node)
func (*AdvancingFront) Set_tail ¶
func (ad *AdvancingFront) Set_tail(node *Node)
func (*AdvancingFront) Tail ¶
func (ad *AdvancingFront) Tail() *Node
type CDT ¶
type CDT struct {
// contains filtered or unexported fields
}
func (*CDT) GetTriangles ¶
func (*CDT) Triangulate ¶
func (cdt *CDT) Triangulate()
type Edge ¶
type Edge struct {
// contains filtered or unexported fields
}
Represents a simple polygon's edge
type Node ¶
type Node struct {
// contains filtered or unexported fields
}
func NewNodeWithTriangle ¶
type Orientation ¶
type Orientation int
const ( CW Orientation = iota CCW COLLINEAR )
func Orient2d ¶
func Orient2d(pa, pb, pc *Point) Orientation
*
- Forumla to calculate signed area<br>
- Positive if CCW<br>
- Negative if CW<br>
- 0 if collinear<br>
- <pre>
- A[P1,P2,P3] = (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1)
- = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
- </pre>
type Sweep ¶
type Sweep struct {
// contains filtered or unexported fields
}
func (*Sweep) AngleExceeds90Degrees ¶
func (*Sweep) AngleExceedsPlus90DegreesOrIsNegative ¶
func (*Sweep) BasinAngle ¶
func (*Sweep) EdgeEvent1 ¶
func (s *Sweep) EdgeEvent1(tcx *SweepContext, ep, eq *Point, triangle *Triangle, point *Point)
func (*Sweep) Fill ¶
func (s *Sweep) Fill(tcx *SweepContext, node *Node)
func (*Sweep) FillAdvancingFront ¶
func (s *Sweep) FillAdvancingFront(tcx *SweepContext, n *Node)
func (*Sweep) FillBasin ¶
func (s *Sweep) FillBasin(tcx *SweepContext, node *Node)
func (*Sweep) FillBasinReq ¶
func (s *Sweep) FillBasinReq(tcx *SweepContext, node *Node)
func (*Sweep) FillEdgeEvent ¶
func (s *Sweep) FillEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillLeftAboveEdgeEvent ¶
func (s *Sweep) FillLeftAboveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillLeftBelowEdgeEvent ¶
func (s *Sweep) FillLeftBelowEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillLeftConcaveEdgeEvent ¶
func (s *Sweep) FillLeftConcaveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillLeftConvexEdgeEvent ¶
func (s *Sweep) FillLeftConvexEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillRightAboveEdgeEvent ¶
func (s *Sweep) FillRightAboveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillRightBelowEdgeEvent ¶
func (s *Sweep) FillRightBelowEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillRightConcaveEdgeEvent ¶
func (s *Sweep) FillRightConcaveEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FillRightConvexEdgeEvent ¶
func (s *Sweep) FillRightConvexEdgeEvent(tcx *SweepContext, edge *Edge, node *Node)
func (*Sweep) FinalizationPolygon ¶
func (s *Sweep) FinalizationPolygon(tcx *SweepContext)
func (*Sweep) FlipEdgeEvent ¶
func (s *Sweep) FlipEdgeEvent(tcx *SweepContext, ep, eq *Point, t *Triangle, p *Point)
func (*Sweep) FlipScanEdgeEvent ¶
func (*Sweep) IsEdgeSideOfTriangle ¶
func (*Sweep) LargeHole_DontFill ¶
True if HoleAngle exceeds 90 degrees.
func (*Sweep) NewFrontTriangle ¶
func (s *Sweep) NewFrontTriangle(tcx *SweepContext, point *Point, node *Node) *Node
func (*Sweep) NextFlipPoint ¶
func (*Sweep) NextFlipTriangle ¶
func (s *Sweep) NextFlipTriangle(tcx *SweepContext, o Orientation, t, ot *Triangle, p, op *Point) *Triangle
func (*Sweep) PointEvent ¶
func (s *Sweep) PointEvent(tcx *SweepContext, point *Point) *Node
func (*Sweep) RotateTrianglePair ¶
func (*Sweep) SweepPoints ¶
func (s *Sweep) SweepPoints(tcx *SweepContext)
func (*Sweep) Triangulate ¶
func (s *Sweep) Triangulate(tcx *SweepContext)
Triangulate simple polygon with holes
type SweepContext ¶
type SweepContext struct {
// contains filtered or unexported fields
}
func NewSweepContext ¶
func NewSweepContext(polyline []*Point) *SweepContext
func (*SweepContext) AddHole ¶
func (s *SweepContext) AddHole(polyline []*Point)
func (*SweepContext) AddPoint ¶
func (s *SweepContext) AddPoint(point *Point)
func (*SweepContext) AddToMap ¶
func (s *SweepContext) AddToMap(triangle *Triangle)
func (*SweepContext) CreateAdvancingFront ¶
func (s *SweepContext) CreateAdvancingFront(nodes []*Node)
func (*SweepContext) Front ¶
func (s *SweepContext) Front() *AdvancingFront
func (*SweepContext) GetMap ¶
func (s *SweepContext) GetMap() list.List
func (*SweepContext) GetPoint ¶
func (s *SweepContext) GetPoint(index int) *Point
func (*SweepContext) GetTriangles ¶
func (s *SweepContext) GetTriangles() []*Triangle
func (*SweepContext) Head ¶
func (s *SweepContext) Head() *Point
func (*SweepContext) InitEdges ¶
func (s *SweepContext) InitEdges(polyline []*Point)
func (*SweepContext) InitTriangulation ¶
func (s *SweepContext) InitTriangulation()
func (*SweepContext) LocateNode ¶
func (s *SweepContext) LocateNode(point *Point) *Node
func (*SweepContext) MapTriangleToNodes ¶
func (s *SweepContext) MapTriangleToNodes(t *Triangle)
func (*SweepContext) MeshClean ¶
func (s *SweepContext) MeshClean(triangle *Triangle)
func (*SweepContext) RemoveFromMap ¶
func (s *SweepContext) RemoveFromMap(triangle *Triangle)
func (*SweepContext) Set_tail ¶
func (s *SweepContext) Set_tail(p1 *Point)
func (*SweepContext) Tail ¶
func (s *SweepContext) Tail() *Point
type Triangle ¶
type Triangle struct {
// contains filtered or unexported fields
}
func NewTriangle ¶
func (*Triangle) Clear ¶
func (tri *Triangle) Clear()
*
- Clears all references to all other triangles and points
func (*Triangle) ClearDelunayEdges ¶
func (tri *Triangle) ClearDelunayEdges()
func (*Triangle) ClearNeighbor ¶
func (*Triangle) ClearNeighbors ¶
func (tri *Triangle) ClearNeighbors()
func (*Triangle) ContainsEdge ¶
func (*Triangle) ContainsPoint ¶
func (*Triangle) Cross1 ¶
/ Perform the cross product on a point and a scalar. In 2D this produces / a point.
func (*Triangle) Cross2 ¶
/ Perform the cross product on a scalar and a point. In 2D this produces / a point.
func (*Triangle) DebugPrint ¶
func (tri *Triangle) DebugPrint()
func (*Triangle) GetConstrainedEdgeCCW ¶
func (*Triangle) GetConstrainedEdgeCW ¶
func (*Triangle) GetDelunayEdgeCCW ¶
func (*Triangle) GetDelunayEdgeCW ¶
func (*Triangle) GetNeighbor ¶
func (*Triangle) IsInterior ¶
func (*Triangle) MarkConstrainedEdge ¶
Mark edge as constrained
func (*Triangle) MarkConstrainedEdgeEdge ¶
func (*Triangle) MarkConstrainedEdgeIndex ¶
func (*Triangle) MarkNeighbor ¶
Exhaustive search to update neighbor pointers
func (*Triangle) MarkNeighborPointers ¶
Update neighbor pointers
func (*Triangle) NeighborAcross ¶
The neighbor across to given point
func (*Triangle) NeighborCCW ¶
The neighbor counter-clockwise to given point
func (*Triangle) NeighborCW ¶
The neighbor clockwise to given point
func (*Triangle) SetConstrainedEdgeCCW ¶
func (*Triangle) SetConstrainedEdgeCW ¶
func (*Triangle) SetDelunayEdgeCCW ¶
func (*Triangle) SetDelunayEdgeCW ¶
func (*Triangle) SetInterior ¶
Click to show internal directories.
Click to hide internal directories.