2
$\begingroup$

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.

$\endgroup$
2
$\begingroup$

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

Suppose the line has equation $ax+by+cz = d$. In vector form, this is $$ \mathbf{A}\cdot \mathbf{X} = d, $$ where $\mathbf{A} = (a,b,c)$. 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.

$\endgroup$
  • 1
    $\begingroup$ And you may need to require that $t \in [0,1]$. $\endgroup$ – lhf Jul 8 '17 at 13:24
  • $\begingroup$ @lhf -- yes, good point. I'll add a comment about that. Thanks. $\endgroup$ – bubba Jul 8 '17 at 13:53
1
$\begingroup$

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.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.