# Random initialization of EuclideanSpace

I want to generate random value in generics like below.
How can i do this?

extern crate nalgebra as na;
extern crate alga;
use alga::linear::EuclideanSpace;

fn rand_add<V: EuclideanSpace>(val: V) -> V {
// How can i generate random V?
let rand_v = randomly_initialized_v();
return val + rand_v;
}

fn main() {
let v1 = na::Vector3::<f32>::new();
}

First, EuclideanSpace is an abstraction for points, not vectors. So in your main() you should work with a Point3 instead of a Vector3. If you want an abstraction over vectors, you might use FiniteDimInnerSpace.

To obtain random values, you may add the Rand trait from the rand crate as a bound. For example, the following adds a random vector to a point:

extern crate rand;
extern crate nalgebra as na;
extern crate alga;
use rand::Rand;
use alga::linear::EuclideanSpace;

fn rand_add<P: EuclideanSpace>(val: P) -> P
where P::Coordinates {
// How can i generate random V?
let rand_v: P::Coordinates = rand::random();
return val + rand_v;
}

fn main() {
let p1 = na::Point3::<f32>::new(1.0, 2.0, 3.0);
}

Thank you for kind help!

I changed a little like below, that works fine.

and I succeeded to write vector version as you mentions.

extern crate rand;
extern crate nalgebra as na;
extern crate alga;
use rand::Rand;
use alga::linear::FiniteDimInnerSpace;

fn rand_add<P: FiniteDimInnerSpace + Rand>(val: P) -> P {
let rand_v = rand::random();
return val + rand_v;
}

fn main() {
let p1 = na::Vector3::<f32>::new(1.0, 2.0, 3.0);