5 #ifndef _SPICA_POINT3D_DETAIL_H_
6 #define _SPICA_POINT3D_DETAIL_H_
22 Point3_<T>::Point3_(T x, T y, T z)
29 Point3_<T>::Point3_(
const Vector3_<T>& v)
36 Point3_<T>::Point3_(
const Point3_<T>& p)
43 Point3_<T>::~Point3_() {
48 Point3_<T> Point3_<T>::binary_op(
const Point3_<T>& p1,
const Point3_<T>& p2,
const Fn& f) {
49 return { f(p1.x(), p2.x()), f(p1.y(), p2.y()), f(p1.z(), p2.z()) };
53 Point3_<T> Point3_<T>::maximum(
const Point3_<T>& p1,
const Point3_<T>& p2) {
54 static auto max_op = [](T a, T b) -> T {
return std::max(a, b); };
55 return Point3_<T>::binary_op(p1, p2, max_op);
59 Point3_<T> Point3_<T>::minimum(
const Point3_<T>& p1,
const Point3_<T>& p2) {
60 static auto min_op = [](T a, T b) -> T {
return std::min(a, b); };
61 return Point3_<T>::binary_op(p1, p2, min_op);
65 Point3_<T>& Point3_<T>::operator=(
const Point3_<T>& p) {
73 Point3_<T>& Point3_<T>::operator+=(
const Point3_<T>& p) {
81 Point3_<T>& Point3_<T>::operator*=(T s) {
89 Point3_<T>& Point3_<T>::operator/=(T s) {
90 Assertion(s != 0.0,
"Zero division!!");
98 bool Point3_<T>::operator==(
const Point3_<T>& p)
const {
99 return (x_ == p.x_ && y_ == p.y_ && z_ == p.z_);
103 bool Point3_<T>::operator!=(
const Point3_<T>& p)
const {
104 return !this->operator==(p);
108 T Point3_<T>::operator[](
int i)
const {
109 Assertion(i >= 0 && i <= 2,
"Index out of bounds!!");
110 if (i == 0)
return x_;
111 if (i == 1)
return y_;
116 Point3_<T>::operator Vector3_<T>()
const {
117 return { x_, y_, z_ };
121 std::string Point3_<T>::toString()
const {
122 std::stringstream ss;
124 ss << std::setprecision(8);
125 ss <<
"(" << x_ <<
", " << y_ <<
", " << z_ <<
")";
126 return std::move(ss.str());
132 std::ostream& operator<<(std::ostream& os, const spica::Point3_<T>& p) {
146 return { p.x() + v.
x(), p.y() + v.
y(), p.z() + v.
z() };
151 return { p.x() - v.
x(), p.y() - v.
y(), p.z() - v.
z() };
156 return { p1.x() - p2.x(), p1.y() - p2.y(), p1.z() - p2.z() };
180 #endif // _SPICA_POINT3D_DETAIL_H_
T z() const
Get z.
Definition: vector3d.h:106
T x() const
Get x.
Definition: vector3d.h:98
Three-dimensional vector.
Definition: core.hpp:56
T y() const
Get y.
Definition: vector3d.h:102