This tutorial explains how to use the Triangle
class from Gazebo Math library.
Compile the code
Go to gz-math/examples
and use cmake
to compile the code:
git clone https://github.com/gazebosim/gz-math/ -b gz-math8
cd gz-math/examples
mkdir build
cd build
cmake ..
# Linux and macOS
make
# Windows
cd ..
cmake --build build --config Release
When the code is compiled, run:
# Linux and macOS
./triangle_example
# Windows
.\build\Release\triangle_example.exe
The ouput of the program:
Vertex 1: -1 0
Vertex 2: 0 1
Vertex 3: 1 0
Side 1: -1 0 0 1
Side 2: 0 1 1 0
Side 3: 1 0 -1 0
Perimeter=4.82843 Area=1
Triangle contains the point 0, 0.5
A line from (-2, 0.5) to (2, 0.5) intersects the triangle at the
following points:
Pt1=-0.5 0.5
Pt2=0.5 0.5
Code
Create a triangle with the following vertices:
The individual vertices are accessible through the []
operator.
<< "Vertex 2: " << tri[1] << "\n"
<< "Vertex 3: " << tri[2] << "\n";
Each side of the triangle is also accessible via the Side
method. Each side consists of 2 vertices, the following code will print out the X and Y values of each vertex.
std::cout <<
"Side 1: " << tri.Side(0) <<
"\n"
<< "Side 2: " << tri.Side(1) << "\n"
<< "Side 3: " << tri.Side(2) << "\n";
It's also possible to set each vertex individually or set all the vertices at once.
You can get the perimeter length and area of the triangle
<< " Area=" << tri.Area() << "\n";
The Contains
function checks if a line or point is inside the triangle.
std::cout <<
"Triangle contains the point 0, 0.5\n";
else
std::cout <<
"Triangle does not contain the point 0, 0.5\n";
The Intersects
function checks if a line segment intersects the triangle. It also returns the points of intersection.
{
std::cout <<
"A line from (-2, 0.5) to (2, 0.5) intersects "
<< "the triangle at the\nfollowing points:\n"
<< "\t Pt1=" << pt1 << "\n"
<< "\t Pt2=" << pt2 << "\n";
}
else
{
std::cout <<
"A line from (-2, 0.5) to (2, 0.5) does not intersect "
<< "the triangle\n";
}
There are more functions in Triangle
. Take a look at the API