On 21/08/19 9:11 AM, Michael F. Stemper wrote:
I recently wrote a couple of modules (more to come) to help me
use the tikz package in TeX/LaTeX. Since it's all to do with
drawing, I have a lot of points in R^2. Being unimaginative, I
implemented them as ordered pairs (2-tuples) of floats. E.g.:
p1 = 3,4
p2 = 5,6
Naturally, lines are implemented as ordered pairs[1] of points:
line = p1,p2
This all seems reasonably simple and intuitive (to me). However,
in order to actually do some manipulation, I have stuff like:
# Unpack the lines
l1p1,l1p2 = line1
l1x1,l1y1 = l1p1
l1x2,l1y2 = l1p2
l2p1,l2p2 = line2
l2x1,l2y1 = l2p1
l2x2,l2y2 = l2p2
spattered all over. Although this is simple enough, I find it
aesthetically unappealing.
Agreed, but could more descriptive names be used?
Is there some better idiom that I should be using, or is this
really in accord with The Zen of Python?
[1] (I could have done sets, I suppose, but orientation might be
useful at some point.)
Assuming that the code does-stuff with/to lines, eg rotate the line 0.2
radians about some nominated rotational-center; maybe construct a class, eg
class Line():
def __init__( self, starting_point, ending_point ):
self.starting_point = starting_point
self.ending_point = ending_point
def rotate( self, angle, center ):
...
The same could also be said for a Point class. However, if they are
'only' Cartesian coordinates and no methods ever apply(???), then maybe
named-tuples or a dict?
(thus able to refer to p1.x and p1.y (or p1[ "x" ], etc) )
Using examples from above:
p1 = Point( 3, 4 ) # p1 = 3,4
p2 = Point( 5, 6 ) # p2 = 5,6
line = Line( p1, p2 ) # line = p1,p2
and instead of:
> l1p1,l1p2 = line1
Do things now appear to be closer to self-documenting?
Also, we can now use:
p1.x #instead of l1p1, and
p1.y #instead of l1p2
In fact, chances-are you won't ever do this because any point/line
manipulation would become a method (hidden-away) within the respective
class...
--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list