More whitespace around binary operators

This is very subjective, but my preference is more whitespace.
Generally the only place I didn't put in whitespace was for
multiplication within statements that also contained additions,
without parentheses.
This commit is contained in:
James Godfrey-Kittle 2016-07-28 11:31:47 -07:00
parent 847d12180b
commit 746873233b

View File

@ -28,7 +28,7 @@ def calcCubicPoints(a, b, c, d):
return _1, _2, _3, _4 return _1, _2, _3, _4
def calcCubicParameters(pt1, pt2, pt3, pt4): def calcCubicParameters(pt1, pt2, pt3, pt4):
c = (pt2 -pt1) * 3.0 c = (pt2 - pt1) * 3.0
b = (pt3 - pt2) * 3.0 - c b = (pt3 - pt2) * 3.0 - c
d = pt1 d = pt1
a = pt4 - d - c - b a = pt4 - d - c - b
@ -37,13 +37,13 @@ def calcCubicParameters(pt1, pt2, pt3, pt4):
def splitCubicIntoN(pt1, pt2, pt3, pt4, n): def splitCubicIntoN(pt1, pt2, pt3, pt4, n):
a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4) a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4)
segments = [] segments = []
dt = 1/n dt = 1 / n
delta_2 = dt*dt delta_2 = dt * dt
delta_3 = dt * delta_2 delta_3 = dt * delta_2
for i in range(n): for i in range(n):
t1 = i * dt t1 = i * dt
t1_2 = t1*t1 t1_2 = t1 * t1
t1_3 = t1*t1_2 t1_3 = t1 * t1_2
# calc new a, b, c and d # calc new a, b, c and d
a1 = a * delta_3 a1 = a * delta_3
b1 = (3*a*t1 + b) * delta_2 b1 = (3*a*t1 + b) * delta_2
@ -53,19 +53,19 @@ def splitCubicIntoN(pt1, pt2, pt3, pt4, n):
return segments return segments
def splitCubicIntoTwo(pt1, pt2, pt3, pt4): def splitCubicIntoTwo(pt1, pt2, pt3, pt4):
mid = (pt1+3*(pt2+pt3)+pt4)*.125 mid = (pt1 + 3 * (pt2 + pt3) + pt4) * .125
deriv3 = (pt4+pt3-pt2-pt1)*.125 deriv3 = (pt4 + pt3 - pt2 - pt1) * .125
return ((pt1, (pt1+pt2)*.5, mid-deriv3, mid), return ((pt1, (pt1 + pt2) * .5, mid - deriv3, mid),
(mid, mid+deriv3, (pt3+pt4)*.5, pt4)) (mid, mid + deriv3, (pt3 + pt4) * .5, pt4))
def splitCubicIntoThree(pt1, pt2, pt3, pt4, _27=1/27): def splitCubicIntoThree(pt1, pt2, pt3, pt4, _27=1/27):
mid1 = (pt1*8+pt2*12+pt3*6+pt4)*_27 mid1 = (pt1*8 + pt2*12 + pt3*6 + pt4) * _27
deriv1 = (pt4+pt3*3-pt1*4)*_27 deriv1 = (pt4 + pt3*3 - pt1*4) * _27
mid2 = (pt1+pt2*6+pt3*12+pt4*8)*_27 mid2 = (pt1 + pt2*6 + pt3*12 + pt4*8) * _27
deriv2 = (pt4*4-pt2*3-pt1)*_27 deriv2 = (pt4*4 - pt2*3 - pt1) * _27
return ((pt1, (pt1*2+pt2)/3, mid1-deriv1, mid1), return ((pt1, (pt1*2 + pt2) / 3, mid1 - deriv1, mid1),
(mid1, mid1+deriv1, mid2-deriv2, mid2), (mid1, mid1 + deriv1, mid2 - deriv2, mid2),
(mid2, mid2+deriv2, (pt3+pt4*2)/3, pt4)) (mid2, mid2 + deriv2, (pt3 + pt4*2) / 3, pt4))
class Cu2QuError(Exception): class Cu2QuError(Exception):
@ -81,16 +81,16 @@ class ApproxNotFoundError(Cu2QuError):
def dot(v1, v2): def dot(v1, v2):
"""Return the dot product of two vectors.""" """Return the dot product of two vectors."""
return (v1*v2.conjugate()).real return (v1 * v2.conjugate()).real
def cubic_approx_control(p, t): def cubic_approx_control(p, t):
"""Approximate a cubic bezier curve with a quadratic one. """Approximate a cubic bezier curve with a quadratic one.
Returns the candidate control point.""" Returns the candidate control point."""
p1 = p[0]+(p[1]-p[0])*1.5 p1 = p[0] + (p[1] - p[0]) * 1.5
p2 = p[3]+(p[2]-p[3])*1.5 p2 = p[3] + (p[2] - p[3]) * 1.5
return p1+(p2-p1)*t return p1 + (p2 - p1) * t
def calc_intersect(a, b, c, d): def calc_intersect(a, b, c, d):
@ -106,7 +106,7 @@ def calc_intersect(a, b, c, d):
return c + cd * h return c + cd * h
def _cubic_farthest_fit(pt1,pt2,pt3,pt4,tolerance): def _cubic_farthest_fit(pt1, pt2, pt3, pt4, tolerance):
"""Returns True if the cubic Bezier p entirely lies within a distance """Returns True if the cubic Bezier p entirely lies within a distance
tolerance of origin, False otherwise.""" tolerance of origin, False otherwise."""
@ -114,14 +114,14 @@ def _cubic_farthest_fit(pt1,pt2,pt3,pt4,tolerance):
return True return True
# Split. # Split.
mid = (pt1+3*(pt2+pt3)+pt4)*.125 mid = (pt1 + 3 * (pt2 + pt3) + pt4) * .125
if abs(mid) > tolerance: if abs(mid) > tolerance:
return False return False
deriv3 = (pt4+pt3-pt2-pt1)*.125 deriv3 = (pt4 + pt3 - pt2 - pt1) * .125
return (_cubic_farthest_fit(pt1, (pt1+pt2)*.5, mid-deriv3, mid,tolerance) and return (_cubic_farthest_fit(pt1, (pt1 + pt2) * .5, mid - deriv3, mid, tolerance) and
_cubic_farthest_fit(mid, mid+deriv3, (pt3+pt4)*.5, pt4,tolerance)) _cubic_farthest_fit(mid, mid + deriv3, (pt3 + pt4) * .5, pt4, tolerance))
def cubic_farthest_fit(pt1,pt2,pt3,pt4,tolerance): def cubic_farthest_fit(pt1, pt2, pt3, pt4, tolerance):
"""Returns True if the cubic Bezier p entirely lies within a distance """Returns True if the cubic Bezier p entirely lies within a distance
tolerance of origin, False otherwise.""" tolerance of origin, False otherwise."""
@ -132,12 +132,12 @@ def cubic_farthest_fit(pt1,pt2,pt3,pt4,tolerance):
return True return True
# Split. # Split.
mid = (pt1+3*(pt2+pt3)+pt4)*.125 mid = (pt1 + 3 * (pt2 + pt3) + pt4) * .125
if abs(mid) > tolerance: if abs(mid) > tolerance:
return False return False
deriv3 = (pt4+pt3-pt2-pt1)*.125 deriv3 = (pt4 + pt3 - pt2 - pt1) * .125
return (_cubic_farthest_fit(pt1, (pt1+pt2)*.5, mid-deriv3, mid,tolerance) and return (_cubic_farthest_fit(pt1, (pt1 + pt2) * .5, mid - deriv3, mid, tolerance) and
_cubic_farthest_fit(mid, mid+deriv3, (pt3+pt4)*.5, pt4,tolerance)) _cubic_farthest_fit(mid, mid + deriv3, (pt3 + pt4) * .5, pt4, tolerance))
def cubic_approx_spline(p, n, tolerance): def cubic_approx_spline(p, n, tolerance):
@ -153,11 +153,11 @@ def cubic_approx_spline(p, n, tolerance):
return None return None
p0 = p[0] p0 = p[0]
p3 = p[3] p3 = p[3]
p1 = p0+(qp1-p0)*(2/3) p1 = p0 + (qp1 - p0) * (2/3)
p2 = p3+(qp1-p3)*(2/3) p2 = p3 + (qp1 - p3) * (2/3)
if not cubic_farthest_fit(0, if not cubic_farthest_fit(0,
p1-p[1], p1 - p[1],
p2-p[2], p2 - p[2],
0, tolerance): 0, tolerance):
return None return None
return p0, qp1, p3 return p0, qp1, p3
@ -173,18 +173,18 @@ def cubic_approx_spline(p, n, tolerance):
spline.append(cubic_approx_control(segments[i], i / (n - 1))) spline.append(cubic_approx_control(segments[i], i / (n - 1)))
spline.append(p[3]) spline.append(p[3])
for i in range(1,n+1): for i in range(1, n + 1):
if i == 1: if i == 1:
p0,p1,p2 = (spline[0],spline[1],(spline[1]+spline[2])*.5) p0, p1, p2 = (spline[0], spline[1], (spline[1] + spline[2]) * .5)
elif i == n: elif i == n:
p0,p1,p2 = (spline[-3]+spline[-2])*.5,spline[-2],spline[-1] p0, p1, p2 = (spline[-3] + spline[-2]) * .5, spline[-2], spline[-1]
else: else:
p0,p1,p2 = (spline[i-1]+spline[i])*.5, spline[i], (spline[i]+spline[i+1])*.5 p0, p1, p2 = (spline[i - 1] + spline[i]) * .5, spline[i], (spline[i] + spline[i + 1]) * .5
pt1, pt2, pt3, pt4 = segments[i-1] pt1, pt2, pt3, pt4 = segments[i - 1]
if not cubic_farthest_fit(p0 - pt1, if not cubic_farthest_fit(p0 - pt1,
p0+(p1-p0)*(2/3) - pt2, p0 + (p1 - p0) * (2/3) - pt2,
p2+(p1-p2)*(2/3) - pt3, p2 + (p1 - p2) * (2/3) - pt3,
p2 - pt4, p2 - pt4,
tolerance): tolerance):
return None return None
@ -208,7 +208,7 @@ def curve_to_quadratic(p, max_err):
else: else:
# no break: approximation not found # no break: approximation not found
raise ApproxNotFoundError(p) raise ApproxNotFoundError(p)
return [(s.real,s.imag) for s in spline] return [(s.real, s.imag) for s in spline]
def curves_to_quadratic(curves, max_errors): def curves_to_quadratic(curves, max_errors):
@ -224,7 +224,7 @@ def curves_to_quadratic(curves, max_errors):
splines = [None] * num_curves splines = [None] * num_curves
for n in range(1, MAX_N + 1): for n in range(1, MAX_N + 1):
splines = [cubic_approx_spline(c, n, e) for c,e in zip(curves,max_errors)] splines = [cubic_approx_spline(c, n, e) for c, e in zip(curves, max_errors)]
if all(splines): if all(splines):
break break
else: else:
@ -232,4 +232,4 @@ def curves_to_quadratic(curves, max_errors):
for c, s in zip(curves, splines): for c, s in zip(curves, splines):
if s is None: if s is None:
raise ApproxNotFoundError(c) raise ApproxNotFoundError(c)
return [[(s.real,s.imag) for s in spline] for spline in splines] return [[(s.real, s.imag) for s in spline] for spline in splines]