Goulib.geom module¶

2D geometry
-
class
Goulib.geom.
Geometry
(*args)[source]¶ Bases:
object
The following classes are available for dealing with simple 2D geometry. The interface to each shape is similar; in particular, the
connect
anddistance
methods are defined identically for each.For example, to find the closest point on a line to a circle:
>>> circ = Circle(Point2(3., 2.), 2.) >>> line = Line2(Point2(0., 0.), Point2(-1., 1.)) >>> line.connect(circ).p1 Point2(0.50, -0.50)
To find the corresponding closest point on the circle to the line:
>>> line.connect(circ).p2 Point2(1.59, 0.59)
this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
__init__
(*args)[source]¶ this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
connect
(other)[source]¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
-
class
Goulib.geom.
Vector2
(*args)[source]¶ Bases:
object
Mutable 2D vector:
Construct a vector in the obvious way:
>>> Vector2(1.5, 2.0) Vector2(1.50, 2.00) >>> Vector3(1.0, 2.0, 3.0) Vector3(1.00, 2.00, 3.00)
Element access
Components may be accessed as attributes (examples that follow use Vector3, but all results are similar for Vector2, using only the x and y components):
>>> v = Vector3(1, 2, 3) >>> v.x 1 >>> v.y 2 >>> v.z 3
Vectors support the list interface via slicing:
>>> v = Vector3(1, 2, 3) >>> len(v) 3 >>> v[0] 1 >>> v[:] (1, 2, 3)
You can also “swizzle” the components (a la GLSL or Cg):
>>> v = Vector3(1, 2, 3) >>> v.xyz (1, 2, 3) >>> v.zx (3, 1) >>> v.zzzz (3, 3, 3, 3)
Operators
Addition and subtraction are supported via operator overloading (note that in-place operators perform faster than those that create a new object):
>>> v1 = Vector3(1, 2, 3) >>> v2 = Vector3(4, 5, 6) >>> v1 + v2 Vector3(5.00, 7.00, 9.00) >>> v1 -= v2 >>> v1 Vector3(-3.00, -3.00, -3.00)
Multiplication and division can be performed with a scalar only:
>>> Vector3(1, 2, 3) * 2 Vector3(2.00, 4.00, 6.00) >>> v1 = Vector3(1., 2., 3.) >>> v1 /= 2 >>> v1 Vector3(0.50, 1.00, 1.50)
The magnitude of a vector can be found with
abs
:>>> v = Vector3(1., 2., 3.) >>> abs(v) 3.7416573867739413
A vector can be normalized in-place (note that the in-place method also returns
self
, so you can chain it with further operators):>>> v = Vector3(1., 2., 3.) >>> v.normalize() Vector3(0.27, 0.53, 0.80) >>> v Vector3(0.27, 0.53, 0.80)
The following methods do not alter the original vector or their arguments:
magnitude()
Returns the magnitude of the vector; equivalent to
abs(v)
. Example:>>> v = Vector3(1., 2., 3.) >>> v.magnitude() 3.7416573867739413
magnitude_squared()
Returns the sum of the squares of each component. Useful for comparing the length of two vectors without the expensive square root operation. Example:
>>> v = Vector3(1., 2., 3.) >>> v.magnitude_squared() 14.0
normalized()
Return a unit length vector in the same direction. Note that this method differs from
normalize
in that it does not modify the vector in-place. Example:>>> v = Vector3(1., 2., 3.) >>> v.normalized() Vector3(0.27, 0.53, 0.80) >>> v Vector3(1.00, 2.00, 3.00)
dot(other)
Return the scalar “dot” product of two vectors. Example:
>>> v1 = Vector3(1., 2., 3.) >>> v2 = Vector3(4., 5., 6.) >>> v1.dot(v2) 32.0
cross()
andcross(other)
Return the cross product of a vector (for Vector2), or the cross product of two vectors (for Vector3). The return type is a vector. Example:
>>> v1 = Vector3(1., 2., 3.) >>> v2 = Vector3(4., 5., 6.) >>> v1.cross(v2) Vector3(-3.00, 6.00, -3.00)
In two dimensions there can be no argument to
cross
:>>> v1 = Vector2(1., 2.) >>> v1.cross() Vector2(2.00, -1.00)
reflect(normal)
Return the vector reflected about the given normal. In two dimensions, normal is the normal to a line, in three dimensions it is the normal to a plane. The normal must have unit length. Example:
>>> v = Vector3(1., 2., 3.) >>> v.reflect(Vector3(0, 1, 0)) Vector3(1.00, -2.00, 3.00) >>> v = Vector2(1., 2.) >>> v.reflect(Vector2(1, 0)) Vector2(-1.00, 2.00)
rotate_around(axes, theta)
For 3D vectors, return the vector rotated around axis by the angle theta.
>>> v = Vector3(1., 2., 3.) >>> axes = Vector3(1.,1.,0) >>> v.rotate_around(axes,math.pi/4) Vector3(2.65, 0.35, 2.62)
Constructor. :param *args: x,y values
-
xy
¶ Returns: tuple (x,y)
-
__eq__
(other)[source]¶ Tests for equality include comparing against other sequences:
>>> v2 = Vector2(1, 2) >>> v2 == Vector2(3, 4)
False >>> v2 != Vector2(1, 2) False >>> v2 == (1, 2) True
>>> v3 = Vector3(1, 2, 3) >>> v3 == Vector3(3, 4, 5) False >>> v3 != Vector3(1, 2, 3) False >>> v3 == (1, 2, 3) True
-
__radd__
(other)¶
-
__rsub__
(other)[source]¶ Point2 - Vector 2 substraction :param other: Point2 or (x,y) tuple :return: Vector2
-
__rmul__
(other)¶
-
mag
()¶
-
length
¶
-
angle
(other=None, unit=False)[source]¶ angle between two vectors. :param unit: bool True if vectors are unit vectors. False increases computations :return: float angle in radians to the other vector, or self direction if other=None
-
__class__
¶ alias of
builtins.type
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
class
Goulib.geom.
Point2
(*args)[source]¶ Bases:
Goulib.geom.Vector2
,Goulib.geom.Geometry
,Goulib.drawing.Entity
A point on a 2D plane. Construct in the obvious way:
>>> p = Point2(1.0, 2.0) >>> p
Point2(1.00, 2.00)
Point2 subclasses Vector2, so all of Vector2 operators and methods apply. In particular, subtracting two points gives a vector:
>>> Point2(2.0, 3.0) - Point2(1.0, 0.0)
Vector2(1.00, 3.00)
connect(other)
- Returns a Segment2 which is the minimum length line segment that can connect the two shapes. other may be a Point2, Line2, Ray2, Segment2 or Circle.
Constructor. :param *args: x,y values
-
distance
(other)[source]¶ absolute minimum distance to other object :param other: Point2, Line2 or Circle :return: float positive distance between self and other
-
__contains__
(pt)[source]¶ Returns: True if self and pt are the same point, False otherwise needed for coherency
-
intersect
(other)[source]¶ Point2/object intersection :return: Point2 copy of self if on other object, None if not
-
connect
(other)[source]¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
__abs__
()¶
-
__abstractmethods__
= frozenset()¶
-
__add__
(other)¶
-
__class__
¶ alias of
abc.ABCMeta
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__div__
(other)¶
-
__eq__
(other)¶ Tests for equality include comparing against other sequences:
>>> v2 = Vector2(1, 2) >>> v2 == Vector2(3, 4)
False >>> v2 != Vector2(1, 2) False >>> v2 == (1, 2) True
>>> v3 = Vector3(1, 2, 3) >>> v3 == Vector3(3, 4, 5) False >>> v3 != Vector3(1, 2, 3) False >>> v3 == (1, 2, 3) True
-
__floordiv__
(other)¶
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
()¶ Return hash(self).
-
__iadd__
(other)¶
-
__imul__
(other)¶
-
__iter__
()¶
-
__le__
¶ Return self<=value.
-
__len__
()¶
-
__lt__
¶ Return self<value.
-
__mul__
(other)¶
-
__ne__
¶ Return self!=value.
-
__neg__
()¶
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__pos__
()¶
-
__radd__
(other)¶
-
__rdiv__
(other)¶
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
()¶ Return repr(self).
-
__rfloordiv__
(other)¶
-
__rmul__
(other)¶
-
__rsub__
(other)¶ Point2 - Vector 2 substraction :param other: Point2 or (x,y) tuple :return: Vector2
-
__rtruediv__
(other)¶
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
__sub__
(other)¶
-
__truediv__
(other)¶
-
angle
(other=None, unit=False)¶ angle between two vectors. :param unit: bool True if vectors are unit vectors. False increases computations :return: float angle in radians to the other vector, or self direction if other=None
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
center
¶
-
color
= 'black'¶
-
cross
()¶
-
dot
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
length
¶
-
mag
()¶
-
mag2
()¶
-
normalize
()¶
-
normalized
()¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
point
(u)¶ Returns: Point2 or Point3 at parameter u
-
project
(other)¶ Return the projection (the component) of the vector on other.
-
reflect
(normal)¶
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
tangent
(u)¶ Returns: Vector2 or Vector3 tangent at parameter u
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
xy
¶ Returns: tuple (x,y)
-
class
Goulib.geom.
Line2
(*args)[source]¶ Bases:
Goulib.geom.Geometry
A Line2 is a line on a 2D plane extending to infinity in both directions; a Ray2 has a finite end-point and extends to infinity in a single direction; a Segment2 joins two points.
All three classes support the same constructors, operators and methods, but may behave differently when calculating intersections etc.
You may construct a line, ray or line segment using any of:
- another line, ray or line segment
- two points
- a point and a vector
- a point, a vector and a length
For example:
>>> Line2(Point2(1.0, 1.0), Point2(2.0, 3.0)) Line2(<1.00, 1.00> + u<1.00, 2.00>) >>> Line2(Point2(1.0, 1.0), Vector2(1.0, 2.0)) Line2(<1.00, 1.00> + u<1.00, 2.00>) >>> Ray2(Point2(1.0, 1.0), Vector2(1.0, 2.0), 1.0) Ray2(<1.00, 1.00> + u<0.45, 0.89>)
Internally, lines, rays and line segments store a Point2 p and a Vector2 v. You can also access (but not set) the two endpoints p1 and p2. These may or may not be meaningful for all types of lines.
The following methods are supported by all three classes:
intersect(other)
If other is a Line2, Ray2 or Segment2, returns a Point2 of intersection, or None if the lines are parallel.
If other is a Circle, returns a Segment2 or Point2 giving the part of the line that intersects the circle, or None if there is no intersection.
connect(other)
- Returns a Segment2 which is the minimum length line segment that can connect the two shapes. For two parallel lines, this line segment may be in an arbitrary position. other may be a Point2, Line2, Ray2, Segment2 or Circle.
distance(other)
- Returns the absolute minimum distance to other. Internally this
simply returns the length of the result of
connect
.
Segment2 also has a length property which is read-only.
-
__init__
(*args)[source]¶ this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
__eq__
(other)[source]¶ lines are “equal” only if base points and vector are strictly equal. to compare if lines are “same”, use line1.distance(line2)==0
-
tangent
(u)[source]¶ Returns: Vector2 tangent at parameter u. Warning : tangent is generally not a unit vector
-
connect
(other)[source]¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__contains__
(pt)¶
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
distance
(other)¶
-
class
Goulib.geom.
Ray2
(*args)[source]¶ Bases:
Goulib.geom.Line2
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__contains__
(pt)¶
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
(other)¶ lines are “equal” only if base points and vector are strictly equal. to compare if lines are “same”, use line1.distance(line2)==0
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__init__
(*args)¶ this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
()¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
intersect
(other)¶
-
point
(u)¶ Returns: Point2 at parameter u
-
tangent
(u)¶ Returns: Vector2 tangent at parameter u. Warning : tangent is generally not a unit vector
-
-
class
Goulib.geom.
Segment2
(*args)[source]¶ Bases:
Goulib.geom.Line2
,Goulib.drawing.Entity
-
p1
¶
-
p2
¶
-
length
¶
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__contains__
(pt)¶
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
(other)¶ lines are “equal” only if base points and vector are strictly equal. to compare if lines are “same”, use line1.distance(line2)==0
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__init__
(*args)¶ this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
center
¶
-
color
= 'black'¶
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
intersect
(other)¶
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
point
(u)¶ Returns: Point2 at parameter u
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
tangent
(u)¶ Returns: Vector2 tangent at parameter u. Warning : tangent is generally not a unit vector
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
-
class
Goulib.geom.
Surface
(*args)[source]¶ Bases:
Goulib.geom.Geometry
this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
length
¶
-
area
¶
-
center
¶
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__contains__
(pt)¶
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__init__
(*args)¶ this constructor is called by descendant classes at copy it is replaced to copy some graphics attributes in module drawings
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__repr__
¶ Return repr(self).
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
intersect
(other)¶
-
point
(u)¶ Returns: Point2 or Point3 at parameter u
-
tangent
(u)¶ Returns: Vector2 or Vector3 tangent at parameter u
-
-
class
Goulib.geom.
Polygon
(args)[source]¶ Bases:
Goulib.geom.Surface
,Goulib.drawing.Entity
Parameters: args – can be - Polygon
- iterator of points
-
xy
¶ Returns: tuple (x,y)
-
area
¶
-
center
¶ centroid
Returns: Point2 centroid of the Polygon
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__eq__
¶ Return self==value.
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
¶ Return hash(self).
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
color
= 'black'¶
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
intersect
(other)¶
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
length
¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
point
(u)¶ Returns: Point2 or Point3 at parameter u
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
tangent
(u)¶ Returns: Vector2 or Vector3 tangent at parameter u
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
class
Goulib.geom.
Circle
(*args)[source]¶ Bases:
Goulib.geom.Surface
,Goulib.drawing.Entity
Circles are constructed with a center Point2 and a radius:
>>> c = Circle(Point2(1.0, 1.0), 0.5) >>> c
Circle(<1.00, 1.00>, radius=0.50)
Internally there are two attributes: c, giving the center point and r, giving the radius.
The following methods are supported:
connect(other)
- Returns a Segment2 which is the minimum length line segment that can connect the two shapes. other may be a Point2, Line2, Ray2, Segment2 or Circle.
distance(other)
- Returns the absolute minimum distance to other. Internally this
simply returns the length of the result of
connect
.
Parameters: args – can be - Circle
- center, point on circle
- center, radius
-
center
¶
-
area
¶
-
intersect
(other)[source]¶ Parameters: other – Line2, Ray2 or Segment2**, Ray2 or Segment2, returns a Segment2 giving the part of the line that intersects the circle, or None if there is no intersection.
-
connect
(other)[source]¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
color
= 'black'¶
-
distance
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
length
¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
Goulib.geom.
circle_from_3_points
(a, b, c)[source]¶ constructs Circle passing through 3 distinct points :param a,b,c: Point2 :return: the unique Circle through the three points a, b, c
-
Goulib.geom.
arc_from_3_points
(a, b, c)[source]¶ constructs Arc2 starting in a, going through b and ending in c :param a,b,c: Point2 :return: the unique Arc2 starting in a, going through b and ending in c
-
class
Goulib.geom.
Arc2
(center, p1=0, p2=6.283185307179586, r=None, dir=1)[source]¶ Bases:
Goulib.geom.Circle
Parameters: - center – Point2 or (x,y) tuple
- p1 – starting Point2 or angle in radians
- p2 – ending Point2 or angle in radians
- r – float radius, needed only if p1 or p2 is an angle
- dir – arc direction. +1 is trig positive (CCW) and -1 is Clockwise
-
__init__
(center, p1=0, p2=6.283185307179586, r=None, dir=1)[source]¶ Parameters: - center – Point2 or (x,y) tuple
- p1 – starting Point2 or angle in radians
- p2 – ending Point2 or angle in radians
- r – float radius, needed only if p1 or p2 is an angle
- dir – arc direction. +1 is trig positive (CCW) and -1 is Clockwise
-
intersect
(other)[source]¶ Parameters: other – Line2, Ray2 or Segment2**, Ray2 or Segment2, returns a Segment2 giving the part of the line that intersects the circle, or None if there is no intersection.
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
area
¶
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
center
¶
-
color
= 'black'¶
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
length
¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
class
Goulib.geom.
Ellipse
(*args)[source]¶ Bases:
Goulib.geom.Circle
Parameters: args – can be - Ellipse
- center, corner point
- center, r1,r2,angle
-
__abs__
()¶ Returns: float perimeter
-
__abstractmethods__
= frozenset()¶
-
__class__
¶ alias of
abc.ABCMeta
-
__contains__
(pt)¶ Returns: True if pt is ON or IN the circle
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__str__
¶ Return str(self).
-
area
¶
-
bbox
()¶ Returns: BBox
bounding box of Entity
-
center
¶
-
color
= 'black'¶
-
connect
(other)¶ Returns: Geometry shortest (Segment2 or Segment3) that connects self to other
-
distance
(other)¶
-
draw
(fig=None, **kwargs)¶ draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch
-
end
¶
-
static
figure
(box, **kwargs)¶ Parameters: - box –
drawing.BBox
bounds and clipping box - kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns: matplotlib axis suitable for drawing
- box –
-
static
from_dxf
(e, mat3)¶ Parameters: - e – dxf.entity
- mat3 – Matrix3 transform
Returns: Entity of correct subtype
-
static
from_pdf
(path, trans, color)¶ Parameters: path – pdf path Returns: Entity of correct subtype
-
static
from_svg
(path, color)¶ Parameters: path – svg path Returns: Entity of correct subtype
-
html
(**kwargs)¶
-
intersect
(other)¶ Parameters: other – Line2, Ray2 or Segment2**, Ray2 or Segment2, returns a Segment2 giving the part of the line that intersects the circle, or None if there is no intersection.
-
isclosed
()¶
-
ishorizontal
(tol=0.01)¶
-
isline
()¶
-
isvertical
(tol=0.01)¶
-
length
¶
-
patches
(**kwargs)¶ Returns: list of (a single) Patch
corresponding to entityNote: this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
-
plot
(**kwargs)¶ renders on IPython Notebook (alias to make usage more straightforward)
-
png
(**kwargs)¶
-
point
(u)¶ Returns: Point2 at angle u radians
-
render
(fmt, **kwargs)¶ render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format
-
save
(filename, **kwargs)¶
-
setattr
(**kwargs)¶ set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity
-
start
¶
-
svg
(**kwargs)¶
-
swap
()¶
-
tangent
(u)¶ Returns: Vector2 tangent at angle u. Warning : tangent has magnitude r != 1
-
to_dxf
(**attr)¶ Parameters: attr – dict of attributes passed to the dxf entity, overriding those defined in self Returns: dxf entity
-
class
Goulib.geom.
Matrix3
(*args)[source]¶ Bases:
object
Two matrix classes are supplied, Matrix3, a 3x3 matrix for working with 2D affine transformations, and Matrix4, a 4x4 matrix for working with 3D affine transformations.
The default constructor intializes the matrix to the identity:
>>> Matrix3() Matrix3([ 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00]) >>> Matrix4() Matrix4([ 1.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00])
Element access
Internally each matrix is stored as a set of attributes named
a
top
. The layout for Matrix3 is:# a b c # e f g # i j k
and for Matrix4:
# a b c d # e f g h # i j k l # m n o p
If you wish to set or retrieve a number of elements at once, you can do so with a slice:
>>> m = Matrix4() >>> m[:] [1.0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 1.0] >>> m[12:15] = (5, 5, 5) >>> m Matrix4([ 1.00 0.00 0.00 5.00 0.00 1.00 0.00 5.00 0.00 0.00 1.00 5.00 0.00 0.00 0.00 1.00])
Note that slices operate in column-major order, which makes them suitable for working directly with OpenGL’s
glLoadMatrix
andglGetFloatv
functions.Class constructors
There are class constructors for the most common types of transform.
new_identity
Equivalent to the default constructor. Example:
>>> m = Matrix4.new_identity() >>> m Matrix4([ 1.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00])
new_scale(x, y)
andnew_scale(x, y, z)
The former is defined on Matrix3, the latter on Matrix4. Equivalent to the OpenGL call
glScalef
. Example:>>> m = Matrix4.new_scale(2.0, 3.0, 4.0) >>> m Matrix4([ 2.00 0.00 0.00 0.00 0.00 3.00 0.00 0.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 1.00])
new_translate(x, y)
andnew_translate(x, y, z)
The former is defined on Matrix3, the latter on Matrix4. Equivalent to the OpenGL call
glTranslatef
. Example:>>> m = Matrix4.new_translate(3.0, 4.0, 5.0) >>> m Matrix4([ 1.00 0.00 0.00 3.00 0.00 1.00 0.00 4.00 0.00 0.00 1.00 5.00 0.00 0.00 0.00 1.00])
new_rotate(angle)
Create a Matrix3 for a rotation around the origin. angle is specified in radians, anti-clockwise. This is not implemented in Matrix4 (see below for equivalent methods). Example:
>>> import math >>> m = Matrix3.new_rotate(math.pi / 2) >>> m Matrix3([ 0.00 -1.00 0.00 1.00 0.00 0.00 0.00 0.00 1.00])
The following constructors are defined for Matrix4 only.
new_rotatex(angle)
,new_rotatey(angle)
,new_rotatez(angle)
Create a Matrix4 for a rotation around the X, Y or Z axis, respectively. angle is specified in radians. Example:
>>> m = Matrix4.new_rotatex(math.pi / 2) >>> m Matrix4([ 1.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 1.00])
new_rotate_axis(angle, axis)
Create a Matrix4 for a rotation around the given axis. angle is specified in radians, and axis must be an instance of Vector3. It is not necessary to normalize the axis. Example:
>>> m = Matrix4.new_rotate_axis(math.pi / 2, Vector3(1.0, 0.0, 0.0)) >>> m Matrix4([ 1.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 1.00])
new_rotate_euler(heading, attitude, bank)
Create a Matrix4 for the given Euler rotation. heading is a rotation around the Y axis, attitude around the X axis and bank around the Z axis. All rotations are performed simultaneously, so this method avoids “gimbal lock” and is the usual method for implemented 3D rotations in a game. Example:
>>> m = Matrix4.new_rotate_euler(math.pi / 2, math.pi / 2, 0.0) >>> m Matrix4([ 0.00 -0.00 1.00 0.00 1.00 0.00 -0.00 0.00 -0.00 1.00 0.00 0.00 0.00 0.00 0.00 1.00])
new_perspective(fov_y, aspect, near, far)
Create a Matrix4 for projection onto the 2D viewing plane. This method is equivalent to the OpenGL call
gluPerspective
. fov_y is the view angle in the Y direction, in radians. aspect is the aspect ration width / height of the viewing plane. near and far are the distance to the near and far clipping planes. They must be positive and non-zero. Example:>>> m = Matrix4.new_perspective(math.pi / 2, 1024.0 / 768, 1.0, 100.0) >>> m Matrix4([ 0.75 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 -1.02 -2.02 0.00 0.00 -1.00 0.00])
Operators
Matrices of the same dimension may be multiplied to give a new matrix. For example, to create a transform which translates and scales:
>>> m1 = Matrix3.new_translate(5.0, 6.0) >>> m2 = Matrix3.new_scale(1.0, 2.0) >>> m1 * m2 Matrix3([ 1.00 0.00 5.00 0.00 2.00 6.00 0.00 0.00 1.00])
Note that multiplication is not commutative (the order that you apply transforms matters):
>>> m2 * m1 Matrix3([ 1.00 0.00 5.00 0.00 2.00 12.00 0.00 0.00 1.00])
In-place multiplication is also permitted (and optimised):
>>> m1 *= m2 >>> m1 Matrix3([ 1.00 0.00 5.00 0.00 2.00 6.00 0.00 0.00 1.00])
Multiplying a matrix by a vector returns a vector, and is used to transform a vector:
>>> m1 = Matrix3.new_rotate(math.pi / 2) >>> m1 * Vector2(1.0, 1.0) Vector2(-1.00, 1.00)
Note that translations have no effect on vectors. They do affect points, however:
>>> m1 = Matrix3.new_translate(5.0, 6.0) >>> m1 * Vector2(1.0, 2.0) Vector2(1.00, 2.00) >>> m1 * Point2(1.0, 2.0) Point2(6.00, 8.00)
Multiplication is currently incorrect between matrices and vectors – the projection component is ignored. Use the Matrix4.transform method instead.
Matrix4 also defines transpose (in-place), transposed (functional), determinant and inverse (functional) methods.
A Matrix3 can be multiplied with a Vector2 or any of the 2D geometry objects (Point2, Line2, Circle, etc).
A Matrix4 can be multiplied with a Vector3 or any of the 3D geometry objects (Point3, Line3, Sphere, etc).
For convenience, each of the matrix constructors are also available as in-place operators. For example, instead of writing:
>>> m1 = Matrix3.new_translate(5.0, 6.0) >>> m2 = Matrix3.new_scale(1.0, 2.0) >>> m1 *= m2
you can apply the scale directly to m1:
>>> m1 = Matrix3.new_translate(5.0, 6.0) >>> m1.scale(1.0, 2.0) Matrix3([ 1.00 0.00 5.00 0.00 2.00 6.00 0.00 0.00 1.00]) >>> m1 Matrix3([ 1.00 0.00 5.00 0.00 2.00 6.00 0.00 0.00 1.00])
Note that these methods operate in-place (they modify the original matrix), and they also return themselves as a result. This allows you to chain transforms together directly:
>>> Matrix3().translate(1.0, 2.0).rotate(math.pi / 2).scale(4.0, 4.0) Matrix3([ 0.00 -4.00 1.00 4.00 0.00 2.00 0.00 0.00 1.00])
All constructors have an equivalent in-place method. For Matrix3, they are
identity
,translate
,scale
androtate
. For Matrix4, they areidentity
,translate
,scale
,rotatex
,rotatey
,rotatez
,rotate_axis
androtate_euler
. Both Matrix3 and Matrix4 also have an in-placetranspose
method.The
copy
method is also implemented in both matrix classes and behaves in the obvious way.-
__class__
¶ alias of
builtins.type
-
__delattr__
¶ Implement delattr(self, name).
-
__dir__
() → list¶ default dir() implementation
-
__format__
()¶ default object formatter
-
__ge__
¶ Return self>=value.
-
__getattribute__
¶ Return getattr(self, name).
-
__gt__
¶ Return self>value.
-
__hash__
= None¶
-
__le__
¶ Return self<=value.
-
__lt__
¶ Return self<value.
-
__ne__
¶ Return self!=value.
-
__new__
()¶ Create and return a new object. See help(type) for accurate signature.
-
__reduce__
()¶ helper for pickle
-
__reduce_ex__
()¶ helper for pickle
-
__setattr__
¶ Implement setattr(self, name, value).
-
__sizeof__
() → int¶ size of object in memory, in bytes
-
__slotnames__
= []¶
-
__str__
¶ Return str(self).