Skip to content

Commit 2deb49d

Browse files
committed
Skeleton for Vector2
This moves the Vector2 documentation to the source code and uses autoclass to generate it. There are minor language and formatting changes.
1 parent 05d1a2b commit 2deb49d

File tree

2 files changed

+351
-240
lines changed

2 files changed

+351
-240
lines changed

docs/Geometry.rst

Lines changed: 4 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -59,247 +59,10 @@ Features
5959
Vector2
6060
-------
6161

62-
.. class:: Vector2
63-
64-
Defines a simple two-dimensional, mutable vector.
65-
66-
.. note::
67-
68-
Equality is not overriden on vectors, because it is expected that
69-
vectors will be used mutably by directly modifying x and y. However, all
70-
functions on vectors are immutable (they return a copy)
71-
72-
.. attribute:: Vector2.x
73-
74-
The first component of this vector. Mutation is allowed where appropriate.
75-
76-
.. attribute:: Vector2.y
77-
78-
The second component of this vector. Mutation is allowed where appropriate.
79-
80-
.. method:: vector2.Vector2(self, *args, **kwargs)
81-
82-
Accepts a pair of unnamed parameters, a pair of named x, y parameters,
83-
another Vector2, or a tuple with 2 numerics. Examples of each:
84-
85-
.. code-block:: python
86-
87-
from pygorithm.geometry import vector2
88-
89-
# A pair of unnamed parameters
90-
vec1 = vector2.Vector2(0, 5)
91-
92-
# A pair of named parameters
93-
vec2 = vector2.Vector2(x = 0, y = 5)
94-
95-
# Another vector2
96-
vec3 = vector2.Vector2(vec2)
97-
98-
# A tuple with two numerics
99-
vec4 = vector2.Vector2( (0, 5) )
100-
101-
The following operations on vectors are extremely common and rarely varied, and as such have
102-
operator support.
103-
104-
.. method:: Vector2.__add__(self, other)
105-
106-
- **other** : `Vector2` the vector to add to this one
107-
- **Return Value** : a new `Vector2` by component-based addition
108-
109-
Adds the two vectors component wise. Example:
110-
111-
.. code-block:: python
112-
113-
from pygorithm.geometry import vector2
114-
115-
vec1 = vector2.Vector2(0, 3)
116-
vec2 = vector2.Vector2(2, 4)
117-
118-
vec3 = vec1 + vec2
119-
120-
# prints <2, 7>
121-
print(vec3)
122-
123-
.. method:: Vector2.__sub__(self, other)
124-
125-
- **other** : `Vector2` the vector to subtract from this one
126-
- **Return Value** : a new `Vector2` by component-based subtraction
127-
128-
Subtracts the two vectors component wise. Example:
129-
130-
.. code-block:: python
131-
132-
from pygorithm.geometry import vector2
133-
134-
vec1 = vector2.Vector2(5, 5)
135-
vec2 = vector2.Vector2(2, 3)
136-
137-
vec3 = vec1 - vec2
138-
vec4 = vec2 - vec1
139-
140-
# prints <3, 2>
141-
print(vec3)
142-
143-
# prints <2, 3>
144-
print(vec4)
145-
146-
.. method:: Vector2.__mul__(self, scale_factor)
147-
.. method:: Vector2.__rmul__(self, scale_factor)
148-
149-
- **scale_factor** : `numeric` the factor to multiply both components by
150-
- **Return Value** : a new `Vector2` by component-based multiplication
151-
152-
Scales the vector by the specified factor. Will throw an exception if
153-
scale_factor is not a numeric - it will not perform the dot product (use
154-
`dot` for that) Examples:
155-
156-
.. code-block:: python
157-
158-
from pygorithm.geometry import vector2
159-
160-
vec1 = vector2.Vector2(4, 8)
161-
162-
vec2 = vec1 * 0.5
163-
vec3 = 2 * vec2
164-
165-
# prints <2, 4>
166-
print(vec2)
167-
168-
# prints <8, 16>
169-
print(vec3)
170-
171-
172-
.. method:: Vector2.__repr__(self)
173-
174-
- **Return Value** : an unambiguous representation of this vector
175-
176-
.. code-block:: python
177-
178-
from pygorithm.geometry import vector2
179-
180-
vec = vector2.Vector2(3, 5)
181-
182-
# prints vector2(x=3, y=5)
183-
print(repr(vec))
184-
185-
.. method:: Vector2.__str__(self)
186-
187-
- **Return Value** : a human-readable representation of this vector
188-
189-
.. code-block:: python
190-
191-
from pygorithm.geometry import vector2
192-
193-
vec = vector2.Vector2(7, 11)
194-
195-
# prints <7, 11>
196-
print(str(vec))
197-
198-
# also prints <7, 11>
199-
print(vec)
200-
201-
.. method:: Vector2.dot(self, other)
202-
203-
- **other** : `vector2` to perform the dot product on
204-
- **Return Value** : a numeric from the dot product of the two vectors
205-
206-
The dot product of two vectors is calculated as so::
207-
208-
Let v1 be a vector such that v1 = <v1_x, v1_y>
209-
Let v2 be a vector such that v2 = <v2_x, v2_y>
210-
211-
v1 . v2 = v1_x * v2_x + v1_y * v2_y
212-
213-
Example:
214-
215-
.. code-block:: python
216-
217-
from pygorithm.geometry import vector2
218-
219-
vec1 = vector2.Vector2(3, 5)
220-
vec2 = vector2.Vector2(7, 11)
221-
222-
dot_12 = vec1.dot(vec2)
223-
224-
# prints 76
225-
print(dot_12)
226-
227-
.. method:: Vector2.rotate(self, *args, **kwargs)
228-
229-
The named argument "degrees" or "radians" may be passed in to rotate
230-
this vector by the specified amount in degrees (or radians),
231-
respectively. If both are omitted, the first unnamed argument is
232-
assumed to be the amount to rotate in radians.
233-
234-
Additionally, the named argument "about" may be passed in to specify
235-
about what the vector should be rotated. If omitted then the first
236-
unconsumed unnamed argument is assumed to be the vector. If there are
237-
no unconsumed unnamed arguments then the origin is assumed.
238-
239-
Examples:
240-
241-
.. code-block:: python
242-
243-
from pygorithm.geometry import vector2
244-
import math
245-
246-
vec1 = vector2.Vector2(1, 0)
247-
248-
vec2 = vec1.rotate(math.pi * 0.25)
249-
250-
# prints <0.707, 0.707>
251-
print(vec2)
252-
253-
vec3 = vec1.rotate(degrees = 45)
254-
255-
# prints <0.707, 0.707>
256-
print(vec3)
257-
258-
# The following operations are all identical
259-
260-
vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1))
261-
vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1))
262-
vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1))
263-
vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180)
264-
265-
# prints <1, 2>
266-
print(vec4)
267-
268-
.. method:: Vector2.normalize(self)
269-
270-
- **Return Value** : a `Vector2` in the same direction as this one with a magnitude of 1
271-
272-
Example:
273-
274-
.. code-block:: python
275-
276-
from pygorithm.geometry import vector2
277-
278-
vec1 = vector2.Vector2(2, 0)
279-
280-
vec2 = vec1.normalize()
281-
282-
# prints <1, 0>
283-
print(vec2)
284-
285-
* Miscellaneous
286-
287-
.. method:: vector2.magnitude(self)
288-
289-
- **Return Value** : a `numeric` magnitude of this vector
290-
291-
Example:
292-
293-
.. code-block:: python
294-
295-
from pygorithm.geometry import vector2
296-
297-
vec1 = vector2.Vector2(3, 4)
298-
magn = vec1.magnitude()
62+
.. autoclass:: pygorithm.geometry.vector2.Vector2
63+
:members:
64+
:special-members:
29965

300-
# prints 5
301-
print(magn)
302-
30366
Line2
30467
-----
30568

@@ -399,6 +162,7 @@ Axis-Aligned Line
399162

400163
.. autoclass:: pygorithm.geometry.axisall.AxisAlignedLine
401164
:members:
165+
:special-members:
402166

403167
Concave Polygon
404168
---------------

0 commit comments

Comments
 (0)