1 #ifndef VTESTBED_GEOMETRY_COONS_SURFACE_HH 2 #define VTESTBED_GEOMETRY_COONS_SURFACE_HH 11 template <
class T,
class Curve>
15 using curve_type = Curve;
16 using value_type =
typename curve_type::value_type;
17 using size_type = size_t;
20 curve_type _c0, _c1, _d0, _d1;
21 T _u_min{0}, _u_max{1};
22 T _v_min{0}, _v_max{1};
32 ): _c0(c0), _c1(c1), _d0(d0), _d1(d1) {}
35 operator()(T u, T v)
const {
38 value_type c = _c0(u)*v1 + _c1(u)*v;
39 value_type d = _d0(v)*u1 + _d1(v)*u;
40 value_type p00 = _c0(_u_min);
41 value_type p01 = _c0(_u_max);
42 value_type p10 = _c1(_u_min);
43 value_type p11 = _c1(_u_max);
44 value_type cd = p00*u1*v1 + p01*u*v1 + p10*u1*v + p11*u*v;
49 u_range(T min, T max) {
56 return std::max(this->_c0.size(), this->_c1.size());
61 return std::max(this->_d0.size(), this->_d1.size());
71 #endif // vim:filetype=cpp