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