Skip to content
Snippets Groups Projects
Verified Commit 8bad2f48 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Add cylinder class

parent 19fc807a
No related branches found
No related tags found
1 merge request!108Resolve "Basic geometry module"
......@@ -13,10 +13,14 @@ set(vkcv_geometry_sources
${vkcv_geometry_source}/vkcv/geometry/Geometry.cpp
${vkcv_geometry_include}/vkcv/geometry/Volume.hpp
${vkcv_geometry_source}/vkcv/geometry/Volume.cpp
${vkcv_geometry_include}/vkcv/geometry/Circular.hpp
${vkcv_geometry_source}/vkcv/geometry/Circular.cpp
${vkcv_geometry_include}/vkcv/geometry/Sphere.hpp
${vkcv_geometry_source}/vkcv/geometry/Sphere.cpp
${vkcv_geometry_include}/vkcv/geometry/Cuboid.hpp
${vkcv_geometry_source}/vkcv/geometry/Cuboid.cpp
${vkcv_geometry_include}/vkcv/geometry/Cylinder.hpp
${vkcv_geometry_source}/vkcv/geometry/Cylinder.cpp
)
# adding source files to the project
......
#pragma once
namespace vkcv::geometry {
/**
* @addtogroup vkcv_geometry
* @{
*/
class Circular {
private:
float m_radius;
public:
explicit Circular(float radius);
Circular(const Circular& other) = default;
Circular(Circular&& other) = default;
~Circular() = default;
Circular& operator=(const Circular& other) = default;
Circular& operator=(Circular&& other) = default;
[[nodiscard]]
float getRadius() const;
void setRadius(float radius);
};
/** @} */
}
\ No newline at end of file
#pragma once
#include "Circular.hpp"
#include "Volume.hpp"
namespace vkcv::geometry {
/**
* @addtogroup vkcv_geometry
* @{
*/
class Cylinder : public Volume, public Circular {
private:
float m_height;
public:
Cylinder(const glm::vec3& position, float height, float radius);
Cylinder(const Cylinder& other) = default;
Cylinder(Cylinder&& other) = default;
~Cylinder() = default;
Cylinder& operator=(const Cylinder& other) = default;
Cylinder& operator=(Cylinder&& other) = default;
[[nodiscard]]
float getHeight() const;
void setHeight(float height);
[[nodiscard]]
float distanceTo(const glm::vec3& point) override;
};
/** @} */
}
\ No newline at end of file
#pragma once
#include "Circular.hpp"
#include "Volume.hpp"
namespace vkcv::geometry {
......@@ -9,7 +10,7 @@ namespace vkcv::geometry {
* @{
*/
class Sphere : public Volume {
class Sphere : public Volume, public Circular {
private:
float m_radius;
......@@ -24,11 +25,6 @@ namespace vkcv::geometry {
Sphere& operator=(const Sphere& other) = default;
Sphere& operator=(Sphere&& other) = default;
[[nodiscard]]
float getRadius() const;
void setRadius(float radius);
[[nodiscard]]
float distanceTo(const glm::vec3& point) override;
......
#include "vkcv/geometry/Circular.hpp"
namespace vkcv::geometry {
Circular::Circular(float radius)
: m_radius(radius) {}
float Circular::getRadius() const {
return m_radius;
}
void Circular::setRadius(float radius) {
m_radius = radius;
}
}
#include "vkcv/geometry/Cylinder.hpp"
namespace vkcv::geometry {
Cylinder::Cylinder(const glm::vec3 &position, float height, float radius)
: Volume(position), Circular(radius), m_height(height) {}
float Cylinder::getHeight() const {
return m_height;
}
void Cylinder::setHeight(float height) {
m_height = height;
}
float Cylinder::distanceTo(const glm::vec3 &point) {
const auto& position = getPosition();
const auto verticalDistance = glm::abs(position.y - point.y) - getHeight();
const auto circularDistance = glm::distance(
glm::vec2(position.x, position.z),
glm::vec2(point.x, point.z)
) - getRadius();
if (circularDistance <= 0.0f) {
return glm::max(verticalDistance, circularDistance);
} else
if (verticalDistance <= 0.0f) {
return circularDistance;
} else {
return glm::length(glm::vec2(verticalDistance, circularDistance));
}
}
}
......@@ -4,15 +4,7 @@
namespace vkcv::geometry {
Sphere::Sphere(const glm::vec3& position, float radius)
: Volume(position), m_radius(radius) {}
float Sphere::getRadius() const {
return m_radius;
}
void Sphere::setRadius(float radius) {
m_radius = radius;
}
: Volume(position), Circular(radius) {}
float Sphere::distanceTo(const glm::vec3 &point) {
return glm::distance(getPosition(), point) - getRadius();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment