Line(const VectorT& base, const VectorT& direction) : direction(direction), base(base) {
		assert(impl::AlmostEqual(direction.Length(), T(1)));
	}
	Hyperplane(const VectorT& base, const VectorT& normal) : normal(normal) {
		assert(impl::AlmostEqual(normal.Length(), T(1)));
		scalar = VectorT::Dot(normal, base);
	}
	Hyperplane(const VectorT& normal, T scalar) : normal(normal), scalar(scalar) {
		assert(impl::AlmostEqual(normal.Length(), T(1)));
	}