vectozavr-shooter/engine/Triangle.h

38 lines
991 B
C
Raw Normal View History

2021-09-13 15:53:43 +03:00
//
// Created by Иван Ильин on 13.01.2021.
//
#ifndef ENGINE_TRIANGLE_H
#define ENGINE_TRIANGLE_H
2021-10-28 16:58:02 +03:00
#include "Vec4D.h"
#include "Vec3D.h"
#include "Matrix4x4.h"
2021-09-13 15:53:43 +03:00
#include <SFML/Graphics.hpp>
class Triangle final {
private:
sf::Color _color;
2021-10-28 16:58:02 +03:00
Vec4D _points[3];
2021-09-13 15:53:43 +03:00
public:
2021-10-28 16:58:02 +03:00
Triangle() : _points{Vec4D{}, Vec4D{}, Vec4D{}} {};
Triangle(const Triangle& triangle);
Triangle(const Vec4D& p1, const Vec4D& p2, const Vec4D& p3, sf::Color color = {0, 0, 0});
Triangle& operator=(const Triangle&) = default;
2021-09-13 15:53:43 +03:00
2021-10-28 16:58:02 +03:00
[[nodiscard]] Vec4D operator[] (int i) const;
[[nodiscard]] Vec3D norm() const;
2021-09-13 15:53:43 +03:00
// Operations with Matrix4x4
[[nodiscard]] Triangle operator*(const Matrix4x4& matrix4X4) const;
[[nodiscard]] bool isPointInside(const Vec3D& point) const;
[[nodiscard]] sf::Color color() const { return _color; }
[[nodiscard]] double distance(const Vec3D& vec) const { return norm().dot(Vec3D(_points[0]) - vec); }
2021-09-13 15:53:43 +03:00
};
#endif //INC_3DZAVR_TRIANGLE_H