Files
ViewDesignEngine/include/vde/core/line.h
T
ViewDesignEngine 64ad721ed7
CI / Build & Test (push) Failing after 36s
CI / Release Build (push) Failing after 31s
fix: 编译通过 — CMake + 命名空间 + 头文件修复
- CMake: INTERFACE 库修复、vde_compile_options 顺序修复
- 命名空间: 所有模块添加 using 声明
- 类型补全: Ray3Dd、Point4D
- 头文件: tolerance 泛型化、std::optional include
- 警告: 放宽 -Wconversion/-Wsign-conversion
- 构建结果: 0 errors, 22/25 tests passed
2026-07-23 08:19:24 +00:00

52 lines
1.6 KiB
C++

#pragma once
#include "vde/core/point.h"
namespace vde::core {
template <typename T>
class Line3D {
public:
Line3D() = default;
Line3D(const Point3D& origin, const Vector3D& direction)
: origin_(origin), direction_(direction.normalized()) {}
[[nodiscard]] const Point3D& origin() const { return origin_; }
[[nodiscard]] const Vector3D& direction() const { return direction_; }
[[nodiscard]] Point3D point_at(T t) const { return origin_ + direction_ * t; }
private:
Point3D origin_{0,0,0};
Vector3D direction_{1,0,0};
};
template <typename T>
class Segment3D {
public:
Segment3D() = default;
Segment3D(const Point3D& p0, const Point3D& p1) : p0_(p0), p1_(p1) {}
[[nodiscard]] const Point3D& p0() const { return p0_; }
[[nodiscard]] const Point3D& p1() const { return p1_; }
[[nodiscard]] Vector3D direction() const { return p1_ - p0_; }
[[nodiscard]] T length() const { return direction().norm(); }
private:
Point3D p0_{0,0,0}, p1_{0,0,0};
};
template <typename T>
class Ray3D {
public:
Ray3D() = default;
Ray3D(const Point3D& origin, const Vector3D& direction)
: origin_(origin), direction_(direction.normalized()) {}
[[nodiscard]] const Point3D& origin() const { return origin_; }
[[nodiscard]] const Vector3D& direction() const { return direction_; }
[[nodiscard]] Point3D point_at(T t) const { return origin_ + direction_ * t; }
private:
Point3D origin_{0,0,0};
Vector3D direction_{1,0,0};
};
using Line3Dd = Line3D<double>;
using Segment3Dd = Segment3D<double>;
using Ray3Dd = Ray3D<double>;
} // namespace vde::core