Bezier curve : forcing a curve of 4 points to pass through control points in 3D space

Tags: , ,



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

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:

enter image description here



Source: stackoverflow