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
|
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]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user