Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Isometry object #9

Open
wants to merge 31 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
855dfac
first OK compiling
patapufate Apr 14, 2020
5e61b75
first Vector3 Class. Is not separated (h and cc)
patapufate Apr 15, 2020
4374a7d
overload operator <<
patapufate Apr 16, 2020
a3aa191
file h, cc division
patapufate Apr 16, 2020
1efa81f
Cleaning code
patapufate Apr 16, 2020
729cfac
Vector3 without () overload and cross product
patapufate Apr 16, 2020
f785285
Fixing overloading []
patapufate Apr 17, 2020
2636be7
[] overload and Vector cross method
patapufate Apr 17, 2020
cff9b3b
Vector3
patapufate Apr 20, 2020
8843f43
.gitignore
patapufate Apr 20, 2020
483c6b7
Merge branch 'Vector3Object' of https://github.com/patapufate/cppl1_q…
patapufate Apr 20, 2020
26d74ec
Fixing code review
patapufate Apr 20, 2020
06e395d
Pull request Fix
patapufate Apr 21, 2020
e462e26
Pull Request fix
patapufate Apr 21, 2020
49a1546
Matrix Class
patapufate Apr 22, 2020
ce3ea8c
Vector3 += -= overloaded operators
patapufate Apr 22, 2020
d531cae
Vector3 isometric_TEST == OK
patapufate Apr 22, 2020
2cf69ca
rm MatrixObject
patapufate Apr 22, 2020
e32671c
Vector3 Object
patapufate Apr 22, 2020
7277ca5
Matrix3 Object
Apr 26, 2020
d0db08c
Second Review of Vector3 Object
Apr 27, 2020
7b92f5c
verifying matrix object
Apr 27, 2020
725417a
modifying initialize list
Apr 27, 2020
103e321
Third PR
Apr 28, 2020
ca92c4d
Isometry object
May 8, 2020
25705df
Isometry Object
May 8, 2020
7029a8f
Second PR
May 26, 2020
8e40425
Review from second PR
Jun 1, 2020
8cabeb7
Isometry Object Third Review
Jun 2, 2020
adca033
add Semantics
Jun 8, 2020
e53c0aa
Isometry Object fourth Review
Jun 17, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@
*.app

# Build directory
build/
build/

# vscode
.vscode/
2 changes: 2 additions & 0 deletions course/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/build
/.vscode
16 changes: 16 additions & 0 deletions course/.vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
3 changes: 3 additions & 0 deletions course/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ include_directories(
# Library sources.
set(LIBRARY_SOURCES
src/foo.cc
src/Vector3.cc
src/Matrix3.cc
src/isometry.cc
)

# Library creation.
Expand Down
65 changes: 65 additions & 0 deletions course/include/Matrix3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#pragma once
#include <iostream>
#include <cmath>
#include "Vector3.h"

namespace ekumen
{

class Matrix3
{
public:
Matrix3();
explicit Matrix3(const Vector3 &f1, const Vector3 &f2, const Vector3 &f3);
Matrix3(const std::initializer_list<double> &list);
Matrix3(const std::initializer_list<double> &r1, const std::initializer_list<double> &r2, const std::initializer_list<double> &r3);
Matrix3(const Matrix3 &m);
Matrix3(Matrix3 &&m);

double det() const;
const Vector3 row(const int index) const;
Vector3 &row(const int index);
const Vector3 col(const int index) const;

Matrix3 mul(const Matrix3 &m2) const;
Matrix3 inverse() const;

Matrix3 &operator+=(const Matrix3 &q);
Matrix3 &operator-=(const Matrix3 &q);

Matrix3 &operator=(const Matrix3 &other); // copy assignment
Matrix3 &operator=(Matrix3 &&other); //move assignment

//operator overload
const Vector3 &operator[](const int &index) const;
Vector3 &operator[](const int &index);

friend bool operator==(const Matrix3 &p, const Matrix3 &q);
friend bool operator==(const Matrix3 &p, const std::initializer_list<double> &list);
friend bool operator==(const std::initializer_list<double> &list, const Matrix3 &p);

friend Matrix3 operator*(const double &cte, const Matrix3 &p);
friend Matrix3 operator*(const Matrix3 &p, const double &cte);
friend Matrix3 operator*(const Matrix3 &p, const Matrix3 &q);
friend Vector3 operator*(const Matrix3 &p, const Vector3 &v);

friend Matrix3 operator/(const Matrix3 &p, const Matrix3 &q);
friend Matrix3 operator/(const Matrix3 &p, const double &value);

friend bool operator!=(const Matrix3 &p, const Matrix3 &q);
friend bool operator!=(const Matrix3 &p, const std::initializer_list<double> &list);
friend bool operator!=(const std::initializer_list<double> &list, const Matrix3 &p);

friend std::ostream &operator<<(std::ostream &os, const Matrix3 &p);
static const Matrix3 kIdentity;
static const Matrix3 kZero;
static const Matrix3 kOnes;

private:
Vector3 *row_values = new Vector3[3];
};

Matrix3 operator+(const Matrix3 &p, const Matrix3 &q);
Matrix3 operator-(const Matrix3 &p, const Matrix3 &q);

} // namespace ekumen
71 changes: 71 additions & 0 deletions course/include/Vector3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#pragma once
#include <iostream>
#include <cmath>
#include <memory>
#include <utility>

namespace ekumen
{

class Vector3
{
public:
Vector3();
explicit Vector3(const double x, const double y, const double z);
Vector3(const std::initializer_list<double> &list);
Vector3(const Vector3 &p2); //copy constructor
Vector3(Vector3&& other); //move constructor
~Vector3();

const double &x() const { return values[0]; }
double &x() { return values[0]; }

const double &y() const { return values[1]; }
double &y() { return values[1]; }

const double &z() const { return values[2]; }
double &z() { return values[2]; }

double norm() const;
double dot(const Vector3 &q) const;
Vector3 cross(const Vector3 &q) const;
//operator overload
const double &operator[](const int index) const;
double &operator[](const int index);

Vector3 &operator+=(const Vector3 &q);
Vector3 &operator-=(const Vector3 &q);
Vector3 &operator=(const Vector3 &r); // copy assignment
Vector3 &operator=(Vector3 &&other); //move assignment

friend Vector3 operator*(const double &cte, const Vector3 &p);
friend Vector3 operator*(const Vector3 &p, const double &cte);
friend Vector3 operator*(const Vector3 &p, const Vector3 &q);
friend Vector3 operator/(const Vector3 &p, const Vector3 &q);

friend bool operator==(const Vector3 &p, const Vector3 &q);
friend bool operator==(const Vector3 &p, const std::initializer_list<double> &list);
friend bool operator==(const std::initializer_list<double> &list, const Vector3 &p);

friend bool operator!=(const Vector3 &p, const Vector3 &q);
friend bool operator!=(const Vector3 &p, const std::initializer_list<double> &list);
friend bool operator!=(const std::initializer_list<double> &list, const Vector3 &p);

friend std::ostream &operator<<(std::ostream &os, const Vector3 &p);

static const Vector3 kUnitX;
static const Vector3 kUnitY;
static const Vector3 kUnitZ;
static const Vector3 kZero;
static const Vector3 kOnes;

private:
double *values;


};

Vector3 operator+(const Vector3 &p, const Vector3 &q);
Vector3 operator-(const Vector3 &p, const Vector3 &q);

} // namespace ekumen
39 changes: 39 additions & 0 deletions course/include/isometry.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#pragma once
#include "Vector3.h"
#include "Matrix3.h"
#include <cmath>

namespace ekumen
{
class Isometry
{
public:
Isometry();
explicit Isometry(const Vector3 &v, const Matrix3 &m);
explicit Isometry(const std::initializer_list<double> &list, Matrix3 &m);

static Isometry FromTranslation(const std::initializer_list<double> &list);
static Isometry FromTranslation(const Vector3 &v);
static Isometry RotateAround(const Vector3 &v, const double &a);
static Isometry FromEulerAngles(const double &x, const double &y, const double &z);

Vector3 transform(const Vector3 &v) const;
Vector3 transform(const std::initializer_list<double> &list) const;
Isometry inverse() const;
Isometry compose(const Isometry &I1) const;
Vector3 translation() const;
Matrix3 rotation() const;

friend bool operator==(const Isometry &p, const Isometry &q);
friend bool operator!=(const Isometry &p, const Isometry &q);
friend std::ostream &operator<<(std::ostream &os, const Isometry &m);

friend Vector3 operator*(const Isometry &i, const Vector3 &v);
friend Isometry operator*(const Isometry &i, const Isometry &i2);

private:
Vector3 vector3_isometry;
Matrix3 matrix3_isometry;
};

} // namespace ekumen
Loading