Bézier curves/Intersections: Difference between revisions

→‎{{header|Icon}}: Say "critical points" instead of "extreme points".
(→‎{{header|Icon}}: Ignore extreme points at 0 or 1.)
(→‎{{header|Icon}}: Say "critical points" instead of "extreme points".)
Line 1,392:
 
procedure initial_workload (P, Q)
# Create an initial workload set, by breaking P and Q at any extreme
# critical points.
 
local workload
 
every insert (workload := set (), [break_at_extreme_pointsbreak_at_critical_points (P),
break_at_extreme_pointsbreak_at_critical_points (Q)])
return workload
end
 
procedure break_at_extreme_pointsbreak_at_critical_points (P)
# Generate workitems for the curve P, after breaking it at any
# extremecritical points.
 
local ts, pts, i
 
ts := [0] ||| sort (curve_extreme_pointscurve_critical_points (P)) ||| [1]
every put (pts := [], curve_eval (P, !ts))
every i := 1 to *pts - 1 do
Line 1,453:
end
 
procedure curve_extreme_pointscurve_critical_points (P)
# Return a set containing parameter values (values of t) for the
# extremecritical points of curve P.
 
local ts
 
ts := set ()
insert (ts, spower_extreme_pointspower_critical_point (P.x))
insert (ts, spower_extreme_pointspower_critical_point (P.y))
return ts
end
Line 1,477:
end
 
procedure spower_extreme_pointspower_critical_point (p)
# Return t in (0,1) where p is extremeat a critical point, else fail.
 
local t
1,448

edits