ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
plane.h
浏览该文件的文档.
1 #pragma once
2 #include "vde/core/point.h"
3 
4 namespace vde::core {
5 
16 template <typename T>
17 class Plane {
18 public:
20  Plane() = default;
21 
28  Plane(const Point3D& point, const Vector3D& normal)
29  : normal_(normal.normalized()), d_(-normal_.dot(point)) {}
30 
38  Plane(const Point3D& a, const Point3D& b, const Point3D& c)
39  : Plane(a, (b - a).cross(c - a)) {}
40 
42  [[nodiscard]] const Vector3D& normal() const { return normal_; }
43 
52  [[nodiscard]] T d() const { return d_; }
53 
68  [[nodiscard]] T signed_distance(const Point3D& p) const { return normal_.dot(p) + d_; }
69 
76  [[nodiscard]] T distance(const Point3D& p) const { return std::abs(signed_distance(p)); }
77 
84  [[nodiscard]] Point3D project(const Point3D& p) const {
85  return p - normal_ * signed_distance(p);
86  }
87 
88 private:
89  Vector3D normal_{0,0,1};
90  T d_{0};
91 };
92 
95 
96 } // namespace vde::core
三维平面
Definition: plane.h:17
Plane(const Point3D &point, const Vector3D &normal)
从点和法线构造平面
Definition: plane.h:28
T signed_distance(const Point3D &p) const
有向点到平面距离
Definition: plane.h:68
Point3D project(const Point3D &p) const
点在平面上的正交投影
Definition: plane.h:84
T distance(const Point3D &p) const
绝对点到平面距离
Definition: plane.h:76
Plane(const Point3D &a, const Point3D &b, const Point3D &c)
从三点构造平面
Definition: plane.h:38
Plane()=default
默认构造:法线 (0,0,1),d=0(XY 平面)
const Vector3D & normal() const
获取单位法向量
Definition: plane.h:42
T d() const
获取平面方程常数 d
Definition: plane.h:52
Definition: aabb.h:6
foundation::Vector3D Vector3D
双精度三维向量(重新导出)
Definition: point.h:49
foundation::Point3D Point3D
双精度三维点(重新导出)
Definition: point.h:31