Gazebo Math

API Reference

6.15.1
Vector example

This tutorial explains how to use the Vector classes from Ignition Math library.

C++ example

Compile the code

To compile the code, go to ign-math/examples and use cmake:

git clone https://github.com/ignitionrobotics/ign-math/ -b ign-math6
cd ign-math/examples
mkdir build
cd build
cmake ..
make

When the code is compiled, run:

./vector2_example

The ouput of the program:

Vec2: 2 4
Vec2a: 1 2
Vec2b: 1.2 3.4
Vec2: x=2 y=4
Vec2a: x=1 y=2
Vec2b: x=1.2 y=3.4
4
2 8
3 6
1 2
2 2
2.23607

Code

Create a Vector2 called vec2 of doubles using the typedef Vector2d. The initial x and y values are zero. The x and y component of vec2 can be set at anytime.

vec2.Set(2.0, 4.0);

The Vector2 class is a template, so you can also create a Vector2 using ignition::math::Vector2<double>:

gz::math::Vector2<double> vec2a;
vec2a.Set(1.0, 2.0);

It's also possible to set initial values. Here we are using a Vector2 of floats:

gz::math::Vector2f vec2b(1.2f, 3.4f);

We can output the contents of each vector using std::cout.

std::cout << "Vec2: " << vec2 << "\n"
<< "Vec2a: " << vec2a << "\n"
<< "Vec2b: " << vec2b << "\n";

You can also get access to each component in the vector using the X(), Y() accessors or the [] operator, The operator is clamped to the range [0, 1].

std::cout << "Vec2: x=" << vec2.X() << " y=" << vec2.Y() << "\n";
std::cout << "Vec2a: x=" << vec2a[0] << " y=" << vec2a[1] << "\n";
std::cout << "Vec2b: x=" << vec2b.X() << " y=" << vec2b[1] << "\n";

The Vector2 class overloads many common operators, such as:

std::cout << vec2 * vec2a << "\n"
<< vec2 + vec2a << "\n"
<< vec2 - vec2a << "\n"
<< vec2 / vec2a << "\n";

There are also many useful function such as finding the distance between two vectors.

std::cout << vec2.Distance(vec2a) << std::endl;

There are more functions in Vector2. Take a look at the API

Ruby examples

This example will only work if the Ruby interface library was compiled and installed. Modify the RUBYLIB environment variable to include the Ignition Math library install path. For example, if you install to /usr:

export RUBYLIB=/usr/lib/ruby:$RUBYLIB

Execute the examples:

ruby vector2_example.rb
ruby vector3_example.rb

Code

Create a Vector2 of doubles using the typedef Vector2d. It's possible to set initial values or use another object to create a identical copy.

va = Ignition::Math::Vector2d.new(1, 2)

You can get access to each component in the vector using the X(), Y() accessors.

printf("va = %f %f\n", va.X(), va.Y())
printf("vb = %f %f\n", vb.X(), vb.Y())
printf("vc = %f %f\n", vc.X(), vc.Y())

The Vector2 class overloads many common operators, such as:

vb += va
printf("vb += va: %f %f\n", vb.X(), vb.Y())

There are also many useful functions, such as finding the distance between two vectors or normalizing a vector.

vb.Normalize
printf("vb.Normalize = %f %f\n", vb.X(), vb.Y())
printf("vb.Distance(va) = %f\n", vb.Distance(va))

You can create vectors with 3 dimensions using the typedef Vector3d:

v1 = Ignition::Math::Vector3d.new(0, 0, 0)

You can also get access to each component in the vector using the X(), Y() and Z() accessors:

printf("v =: %f %f %f\n", v1.X(), v1.Y(), v1.Z())
Vector2< double > Vector2d
Definition: gz/math/Vector2.hh:593
T endl(T... args)
Vector2< float > Vector2f
Definition: gz/math/Vector2.hh:594