# Intersections Between a Cubic Bézier Curve and a Line

If one end and a control point of a cubic Bézier curve is connected by a straight line, is there a simple way to find out whether this straight line intersects the Bezier curve? If it intersects then what will be the corresponding Bézier curve parameter's value?

Cubic Bezier curve and a straight line intersection tells two end point as a line, but I need one end point and one control point.

The calculations are roughly the same regardless of what line is used.

Suppose the line has equation $$lx+my+nz = d$$. In vector form, this is $$\mathbf{A}\cdot \mathbf{X} = d,$$ where $$\mathbf{A} = (l,m,n)$$. Also, suppose the Bézier curve has equation $$\mathbf{X}(t) = (1-t)^3\mathbf{P}_0 + 3t(1-t)^2\mathbf{P}_1 + 3t^2(1-t)\mathbf{P}_2 + t^3\mathbf{P}_3$$ Substituting this into the previous equation, we get $$(1-t)^3(\mathbf{A} \cdot \mathbf{P}_0) + 3t(1-t)^2(\mathbf{A} \cdot \mathbf{P}_1) + 3t^2(1-t)(\mathbf{A} \cdot \mathbf{P}_2) + t^3(\mathbf{A} \cdot \mathbf{P}_3) - d = 0$$ This is a cubic equation that you need to solve for $$t$$. The $$t$$ values you obtain (at most 3 of them) are the parameter values on the Bézier curve at the intersection points. If any of these $$t$$ values is outside the interval $$[0,1]$$, you'll probably want to ignore it.

In your particular case, you know that the line passes through either the start-point or the end-point of the Bézier curve, so either $$t=0$$ or $$t=1$$ is a solution of the cubic equation, which makes things easier. Suppose $$t=0$$ is a solution. Then the cubic above can be written in the form $$t(at^2 + bt + c) =0$$ Now you only have to find $$t$$ values in $$[0,1]$$ that satisfy $$at^2 + bt +c =0$$, which is easy.

• And you may need to require that $t \in [0,1]$.
– lhf
Jul 8, 2017 at 13:24
• @lhf -- yes, good point. I'll add a comment about that. Thanks. Jul 8, 2017 at 13:53
• (at most infinite of them). A bezier can look like a straight line. So they might share ALL their points? Aug 14, 2020 at 8:44

this can be solved analytically, by solving a cubic function within a cubic function, one rather complicated cubic function.

getting a points closest euclidean [distance to a cubic bezier] is solved on shadertoy.com

doing that for all points along a line gives you a cubic function with 1 or 2 local minima (or a line if all 3 CV are colinear AD line is parallel to the linear bezier).

for a quick estimation, cubic beziers are constrained to a triangular bounding volume (or line if the CV are colinear), this allows you to skip solving a big cubic function for many cases.