# how to calculate tangent vector for each vertex ?

I have a cubic spline C. How can i calculate tangent vector of each vertex on the curve ?

This topic is not a “Opengl advanced coding” one but a “Math and algorithm” one.

Anyway, as far as I know splines are parametrized curves, you should be able to compute some derivatives easily.

Current vertex: B, its adjacent vertices: A and C.

vector U is B->A,
vector V is B->C

vector M is UxV (cross-product)

vector N = normalize(M)

Done

vector U is B->A,
vector V is B->C

vector M is UxV (cross-product)

vector N = normalize(M)

Done

\$> run
ERROR: “tangent is needed, not normal”
\$>

And isn’t that tangent vector at 90 degrees of the normal?
As in
vec2 T = N.yx

Hello,

if I’m not wrong the tangent vector would be simply C-B along the curve.

dj3hut1

vec2 ?? :eek:

Anyway, there is a more intelligent way to compute these tangents since to draw this spline ( defined with control points a several tangents) you have to interpolate tangents and then generate points .
vanpn just need to read theory about cubic splines.

Thanks, I’m reading it right now. ><
From the beginning, I used gluNurbs to draw the curve, but I can’t retrieve the coordinates of each vertex on the curve. So maybe I have to compute and draw it manually. Too bad!
It’s a part of my thesis and the deadline is near. >
<

The tangent vector of the curve in the point x is equal to the value of the first derivative of the curve’s equation. And evaluating the cubic spline is an elemetary computational task (just copy the formula from the wikipedia). Have fun

Do u mean this formular :

()[-1 3 -3 1 ][pi-1]
Si(t)=t^3t^2t1[ 3 -6 3 0 ][pi]
(
)[-3 0 3 0 ][pi+1]
(________________)[ 1 4 1 0 ][pi+2]

This is the uniform cubic b-spline with knot vector, matrix-form, from http://en.wikipedia.org/wiki/B-spline

For example…

I have calculated and retrieved every point on the cubic spline C. I have 1st derivative of basis functions for each point too. So, if i want to get tangent vector, what do i have to do ?
Calculate dx, dy based on 1st derivatives of basis functions and then atan(dy/dx) or what ?