libpysal.cg.LineSegment

class libpysal.cg.LineSegment(start_pt, end_pt)[source]

Geometric representation of line segment objects.

Parameters:
start_ptlibpysal.cg.Point

The point where the segment begins.

end_ptlibpysal.cg.Point

The point where the segment ends.

Examples

>>> ls = LineSegment(Point((1, 2)), Point((5, 6)))
Attributes:
p1libpysal.cg.Point

HELPER METHOD. DO NOT CALL.

p2Point

HELPER METHOD. DO NOT CALL.

bounding_boxlibpysal.cg.Rectangle

Returns the minimum bounding box of a LineSegment object.

lenfloat

Returns the length of a LineSegment object.

linelibpysal.cg.Line

Returns a Line object of the line on which the segment lies.

__init__(start_pt, end_pt)[source]

Methods

__init__(start_pt, end_pt)

get_swap()

Returns a LineSegment object which has its endpoints swapped.

intersect(other)

Test whether segment intersects with other segment (True) or not (False).

is_ccw(pt)

Returns whether a point is counterclockwise of the segment (True) or not (False).

is_cw(pt)

Returns whether a point is clockwise of the segment (True) or not (False).

sw_ccw(pt)

Sedgewick test for pt being ccw of segment.

Attributes

bounding_box

Returns the minimum bounding box of a LineSegment object.

len

Returns the length of a LineSegment object.

line

Returns a Line object of the line on which the segment lies.

p1

**HELPER METHOD.

p2

**HELPER METHOD.

property bounding_box

Returns the minimum bounding box of a LineSegment object.

Returns:
self._bounding_boxlibpysal.cg.Rectangle

The bounding box of the line segment.

Examples

>>> ls = LineSegment(Point((1, 2)), Point((5, 6)))
>>> ls.bounding_box.left
1.0
>>> ls.bounding_box.lower
2.0
>>> ls.bounding_box.right
5.0
>>> ls.bounding_box.upper
6.0
get_swap()[source]

Returns a LineSegment object which has its endpoints swapped.

Returns:
line_seglibpysal.cg.LineSegment

The LineSegment object which has its endpoints swapped.

Examples

>>> ls = LineSegment(Point((1, 2)), Point((5, 6)))
>>> swap = ls.get_swap()
>>> swap.p1[0]
5.0
>>> swap.p1[1]
6.0
>>> swap.p2[0]
1.0
>>> swap.p2[1]
2.0
intersect(other) bool[source]

Test whether segment intersects with other segment (True) or not (False). Handles endpoints of segments being on other segment.

Parameters:
otherlibpysal.cg.LineSegment

Another line segment to check against.

Examples

>>> ls = LineSegment(Point((5, 0)), Point((10, 0)))
>>> ls1 = LineSegment(Point((5, 0)), Point((10, 1)))
>>> ls.intersect(ls1)
True
>>> ls2 = LineSegment(Point((5, 1)), Point((10, 1)))
>>> ls.intersect(ls2)
False
>>> ls2 = LineSegment(Point((7, -1)), Point((7, 2)))
>>> ls.intersect(ls2)
True
is_ccw(pt) bool[source]

Returns whether a point is counterclockwise of the segment (True) or not (False). Exclusive.

Parameters:
ptlibpysal.cg.Point

A point lying ccw or cw of a segment.

Examples

>>> ls = LineSegment(Point((0, 0)), Point((5, 0)))
>>> ls.is_ccw(Point((2, 2)))
True
>>> ls.is_ccw(Point((2, -2)))
False
is_cw(pt) bool[source]

Returns whether a point is clockwise of the segment (True) or not (False). Exclusive.

Parameters:
ptlibpysal.cg.Point

A point lying ccw or cw of a segment.

Examples

>>> ls = LineSegment(Point((0, 0)), Point((5, 0)))
>>> ls.is_cw(Point((2, 2)))
False
>>> ls.is_cw(Point((2, -2)))
True
property len: float

Returns the length of a LineSegment object.

Examples

>>> ls = LineSegment(Point((2, 2)), Point((5, 2)))
>>> ls.len
3.0
property line

Returns a Line object of the line on which the segment lies.

Returns:
self._linelibpysal.cg.Line

The Line object of the line on which the segment lies.

Examples

>>> ls = LineSegment(Point((2, 2)), Point((3, 3)))
>>> l = ls.line
>>> l.m
1.0
>>> l.b
0.0
property p1

HELPER METHOD. DO NOT CALL. Returns the p1 attribute of the line segment.

Returns:
self._p1libpysal.cg.Point

The _p1 attribute.

Examples

>>> ls = LineSegment(Point((1, 2)), Point((5, 6)))
>>> r = ls._get_p1()
>>> r == Point((1, 2))
True
property p2

HELPER METHOD. DO NOT CALL. Returns the p2 attribute of the line segment.

Returns:
self._p2libpysal.cg.Point

The _p2 attribute.

Examples

>>> ls = LineSegment(Point((1, 2)), Point((5, 6)))
>>> r = ls._get_p2()
>>> r == Point((5, 6))
True
sw_ccw(pt)[source]

Sedgewick test for pt being ccw of segment.

Returns:
is_ccwbool

1 if turn from self.p1 to self.p2 to pt is ccw. -1 if turn from self.p1 to self.p2 to pt is cw. -1 if the points are collinear and self.p1 is in the middle. 1 if the points are collinear and self.p2 is in the middle. 0 if the points are collinear and pt is in the middle.