#include <rational_surface.hpp>
Definition at line 28 of file rational_surface.hpp.
Reimplemented from parametric_surface< C, V >.
Definition at line 32 of file rational_surface.hpp.
typedef point_set<C>::PointIterator PointIterator |
Reimplemented from parametric_surface< C, V >.
Definition at line 33 of file rational_surface.hpp.
typedef algebraic_set<C,V>::Polynomial Polynomial |
Definition at line 35 of file rational_surface.hpp.
typedef C Scalar |
Reimplemented from parametric_surface< C, V >.
Definition at line 31 of file rational_surface.hpp.
rational_surface | ( | void | ) | [inline] |
Definition at line 37 of file rational_surface.hpp.
rational_surface | ( | const Polynomial & | X, | |
const Polynomial & | Y, | |||
const Polynomial & | Z, | |||
const Polynomial & | W = 1 | |||
) | [inline] |
Definition at line 40 of file rational_surface.hpp.
References rational_surface< C, N, V >::set_range().
00040 : 00041 ParametricSurface() { 00042 set_range(0,1,0,1); 00043 m_w=W; 00044 m_p[0]=X; m_p[1]=Y; m_p[2]=Z; 00045 }
void add_to_domain | ( | const Point & | p | ) | [inline] |
Definition at line 199 of file rational_surface.hpp.
Polynomial denominator | ( | ) | const [inline] |
Definition at line 66 of file rational_surface.hpp.
Definition at line 64 of file rational_surface.hpp.
Seq< typename rational_surface< C, N, V >::Point > domain | ( | void | ) | const [inline] |
Definition at line 205 of file rational_surface.hpp.
Definition at line 73 of file parametric_surface.hpp.
References parametric_surface< C, V >::eval().
Implements parametric_surface< C, V >.
Definition at line 143 of file rational_surface.hpp.
00143 { 00144 Scalar w=m_w(u,v); 00145 if (w != 0) { 00146 x=m_p[0](u,v)/w; 00147 y=m_p[1](u,v)/w; 00148 z=m_p[2](u,v)/w; 00149 } else { 00150 std::cerr << "Division by 0 in rational_surface::eval(Scalar& x, Scalar& y, Scalar &z, Scalar u, Scalar v const" << std::endl; 00151 } 00152 }
Definition at line 87 of file rational_surface.hpp.
00087 { 00088 Scalar w=m_w(u,v); 00089 if (w != 0) { 00090 p.setx(m_p[0](u,v)/w); 00091 p.sety(m_p[1](u,v)/w); 00092 p.setz(m_p[2](u,v)/w); 00093 } else { 00094 std::cerr << "Division by 0 in rational_surface::eval(Point& p, Scalar u, Scalar v) const" << std::endl; 00095 } 00096 }
rational_surface< C, N, V >::Point * eval | ( | Scalar | u, | |
Scalar | v | |||
) | const [inline] |
Definition at line 80 of file rational_surface.hpp.
Referenced by rational_surface< C, N, V >::operator()().
Definition at line 104 of file rational_surface.hpp.
References mmx::diff().
00104 { 00105 Polynomial dw0 = diff(m_w,0) , dw1 = diff(m_w,1), 00106 dx0 = diff(m_p[0],0),dx1 = diff(m_p[0],1), 00107 dy0 = diff(m_p[1],0), dy1 = diff(m_p[1],1), 00108 dz0 = diff(m_p[2],0), dz1 = diff(m_p[2],1); 00109 00110 Scalar w=m_w(u,v); 00111 if (w != 0) { 00112 00113 Scalar x0 = (dx0(u,v)* w - m_p[0](u,v)*dw0(u,v))/(w*w) ; 00114 Scalar x1 = (dx1(u,v)* w - m_p[0](u,v)*dw1(u,v))/(w*w); 00115 Scalar y0 = (dy0(u,v)* w - m_p[1](u,v)*dw0(u,v))/(w*w) ; 00116 Scalar y1 = (dy1(u,v)* w - m_p[1](u,v)*dw1(u,v))/(w*w); 00117 Scalar z0 = (dz0(u,v)* w - m_p[2](u,v)*dw0(u,v))/(w*w) ; 00118 Scalar z1 = (dx1(u,v)* w - m_p[2](u,v)*dw1(u,v))/(w*w); 00119 00120 x= (y0 * z1) - (z0 * y1); 00121 y= -(x0 * z1) + (z0 * x1); 00122 z= (x0 * y1) - (y0 * x1); 00123 } else { 00124 std::cerr << "Division by 0 in rational_surface::eval(Scalar& x, Scalar& y, Scalar &z, Scalar u, Scalar v const" << std::endl; 00125 } 00126 //const scalar<double> temp = x*x + y*y + z*z; 00127 //scalar<double> norm = sqrt(temp); 00128 //Scalar temp2 = norm; 00129 //if (norm != 0) { 00130 Scalar a = sqrtf(x*x+y*y+z*z); 00131 if (a != 0) { 00132 x /= a; 00133 y /= a; 00134 z /= a; 00135 00136 00137 } else{ 00138 std::cerr << "Division by 0 in rational_surface::eval(Scalar& x, Scalar& y, Scalar &z, Scalar u, Scalar v const" << std::endl; 00139 } 00140 00141 }
Definition at line 99 of file rational_surface.hpp.
00099 { 00100 normal(p[0],p[1],p[2],u,v); 00101 00102 }
Polynomial numerator | ( | int | i | ) | const [inline] |
Definition at line 67 of file rational_surface.hpp.
rational_surface< C, N, V >::Point * operator() | ( | const Scalar & | u, | |
const Scalar & | v | |||
) | const [inline] |
Definition at line 187 of file rational_surface.hpp.
References rational_surface< C, N, V >::eval().
00187 { 00188 return this->eval(u,v); 00189 }
void sample | ( | Scalar * | lp, | |
unsigned | m, | |||
unsigned | n, | |||
Scalar * | u, | |||
Scalar * | v | |||
) | const [inline, virtual, inherited] |
Definition at line 103 of file parametric_surface.hpp.
References assert, parametric_surface< C, V >::eval(), parametric_surface< C, V >::umax(), parametric_surface< C, V >::umin(), parametric_surface< C, V >::vmax(), and parametric_surface< C, V >::vmin().
00103 { 00104 assert(m>1 && n>1); 00105 Scalar 00106 hu=(this->umax() - this->umin())/(m-1), 00107 hv=(this->vmax() - this->vmin())/(n-1); 00108 00109 Scalar * u0 =u, su=umin(), * v0=v, sv=vmin(); 00110 for (unsigned i=0; i<m;i++){ *u=su; su+=hu; u++; } 00111 for (unsigned j=0; j<n;j++){ *v=sv; sv+=hv; v++; } 00112 00113 u=u0; 00114 for (unsigned i=0; i<m;i++,u++) { 00115 v=v0; 00116 for (unsigned j=0; j<n;j++,v++) { 00117 this->eval(r[0],r[1],r[2],*u,*v); 00118 // *r=x;std::cout<<*r<<" "; 00119 r+=3; 00120 // *r=y;std::cout<<*r<<" "; 00121 // r++; 00122 // *r=z;std::cout<<*r<<" "; 00123 // r++; 00124 // std::cout<<std::endl; 00125 } 00126 } 00127 }
void sample | ( | PointIterator | lp, | |
unsigned | m, | |||
unsigned | n | |||
) | const [inline, virtual, inherited] |
Definition at line 86 of file parametric_surface.hpp.
References assert, parametric_surface< C, V >::eval(), parametric_surface< C, V >::umax(), parametric_surface< C, V >::umin(), parametric_surface< C, V >::vmax(), and parametric_surface< C, V >::vmin().
00086 { 00087 assert(m>1 && n>1); 00088 Scalar 00089 hu=(this->umax() - this->umin())/(m-1), u=this->umin(), 00090 hv=(this->vmax() - this->vmin())/(n-1), v; 00091 Point pp; 00092 for (unsigned i=0; i<m;i++) { 00093 v=vmin(); 00094 for (unsigned j=0; j<n;j++,p++) { 00095 this->eval(p->x(),p->y(),p->z(),u,v); 00096 v+=hv; 00097 } 00098 u+=hu; 00099 } 00100 }
void sample | ( | PointIterator | lp, | |
const Scalar * | u, | |||
unsigned | m, | |||
const Scalar * | v, | |||
unsigned | n | |||
) | const [inline, virtual, inherited] |
Definition at line 130 of file parametric_surface.hpp.
References assert, and parametric_surface< C, V >::eval().
Referenced by use< ssi_def, C >::sample().
void set_denominator | ( | const Polynomial & | d | ) | [inline] |
Definition at line 70 of file rational_surface.hpp.
void set_numerator | ( | const Polynomial & | p, | |
int | i | |||
) | [inline] |
Definition at line 71 of file rational_surface.hpp.
C umax | ( | void | ) | const [inline, virtual] |
Implements parametric_surface< C, V >.
Definition at line 163 of file rational_surface.hpp.
References Seq< C, R >::size().
00163 { 00164 Scalar r=m_domain[0].x(); 00165 for(unsigned i=1; i<m_domain.size();i++) 00166 r=std::max(r,m_domain[i].x()); 00167 return r; 00168 }
C umin | ( | void | ) | const [inline, virtual] |
Implements parametric_surface< C, V >.
Definition at line 155 of file rational_surface.hpp.
References Seq< C, R >::size().
00155 { 00156 Scalar r=m_domain[0].x(); 00157 for(unsigned i=1; i<m_domain.size();i++) 00158 r=std::min(r,m_domain[i].x()); 00159 return r; 00160 }
C vmax | ( | void | ) | const [inline, virtual] |
Implements parametric_surface< C, V >.
Definition at line 179 of file rational_surface.hpp.
References Seq< C, R >::size().
00179 { 00180 Scalar r=m_domain[0].y(); 00181 for(unsigned i=1; i<m_domain.size();i++) 00182 r=std::max(r,m_domain[i].y()); 00183 return r; 00184 }
C vmin | ( | void | ) | const [inline, virtual] |
Implements parametric_surface< C, V >.
Definition at line 171 of file rational_surface.hpp.
References Seq< C, R >::size().
00171 { 00172 Scalar r=m_domain[0].y(); 00173 for(unsigned i=1; i<m_domain.size();i++) 00174 r=std::min(r,m_domain[i].y()); 00175 return r; 00176 }