> > No, it is just acos( a.b / |a||b| ), which is in general a complex
> > number.
> How is acos( complex ) defined? Such a function does not exist in vcl,
> so the template instantiations for vnl_vector<complex> fail.
Since cos(complex) is well defined
( cos(a+ib) = cos(a)*cosh(b) - i sin(a)*sinh(b) if I did not make a mistake)
also acos(complex) is well defined, e.g. by using the (Taylor) series expansion.
I don't have an implementation at hand.
And it's indeed a rather unusual function.
We could of course decide to ensure it is defined in vcl,
but that would probably not really be ANSI conformant.
> > acos( |a.b| / |a||b| ) cannot be correct since then the angle between
> > (1,0) and (-1,1) would be 45 degrees instead of 135 degrees.
> Certainly, for real-valued vectors. However, for complex-valued
> vectors, perhaps it is "good enough"?
No: it should be defined consistently for real and complex arguments.
Doing it like this would not be consistent.