I have read the thread to make this happen for 4 points but only in 2D space here .
I have implemented the answer for 3D but only for 3 control points here
I have read this post but don’t understand the sudo code or the math
Can anyone simplify in java? I don’t want to draw the curve as 2 segments of 3 points
Advertisement
Answer
Formula for cubic Bezier curve component (say X):
X(t) = P0.X*(1-t)^3 + 3*P1.X*(1-t)^2*t + 3*P2.X*(1-t)*t^2 + P3.X*t^3
where P0
and P3
are end points, and P1
an P2
are control points.
We have four points for curve (SrcPt
array in that answer), end points coincide with Bezier endpoints, and two internal points on curve should define two control points P1
an P2
of Bezier curve. To calculate, we must know – what t
parameters correspond to SrcPt[1]
and SrcPt[2]
. Let these parameters are 1/3 and 2/3 (possible issues are in linked answers).
So substitute t=1/3
and t=2/3
into the formula above:
SrcPt[1].X = SrcPt[0].X*(1-1/3)^3 + 3*P1.X*(1-1/3)^2*1/3 + 3*P2.X*(1-1/3)*1/3^2 + SrcPt[3].X*1/3^3 SrcPt[2].X = SrcPt[0].X*(1-2/3)^3 + 3*P1.X*(1-2/3)^2*2/3 + 3*P2.X*(1-2/3)*(2/3)^2 + SrcPt[3].X*2/3)^3
and solve this system for unknown P1.X
and P2.X
. So we will have all needed points to describe Bezier curve. Linked answer implements the solution.
Example – how changing t
values for the same internal points influences on curve: