42 typedef pair<double,double> AngularCoordinates;
55 template<
typename TSpace>
63 double d_x = x_rel[0]*x_rel[0] + x_rel[1]*x_rel[1] + x_rel[2]*x_rel[2];
66 double d_p = p_rel[0]*p_rel[0] + p_rel[1]*p_rel[1]+ p_rel[2]*p_rel[2];
84 template<
typename TSpace>
94 double d_x = x_rel[0]*x_rel[0] + x_rel[1]*x_rel[1] + x_rel[2]*x_rel[2];
97 double d_p = p_rel[0]*p_rel[0] + p_rel[1]*p_rel[1] + p_rel[2]*p_rel[2];
100 if ((d_p - d_x) > 0.0)
103 if ((d_p - d_x )< 0.0)
116 template<
typename TSpace>
122 double norm = sqrt(aNormal[0]*aNormal[0] + aNormal[1]*aNormal[1] +aNormal[2]*aNormal[2]);
123 return (
RealPoint(aNormal[0]/norm,aNormal[1]/norm,aNormal[2]/norm));
134 template<
typename TSpace>
139 typedef typename Space::RealPoint
RealPoint;
142 RealPoint art = rt(t);
143 RealPoint arp = rp(t);
144 RealPoint artt = rtt(t);
145 RealPoint arpp = rpp(t);
146 RealPoint artp = rtp(t);
148 RealPoint n(art[1]*arp[2]-art[2]*arp[1],art[2]*arp[0]-art[0]*arp[2],art[0]*arp[1]-art[1]*arp[0]);
149 double norme= sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);
153 double E = art[0] * art[0]+ art[1] * art[1]+ art[2] * art[2];
154 double F= art[0] * arp[0]+ art[1] * arp[1]+ art[2] * arp[2];
155 double G = arp[0] * arp[0]+ arp[1] * arp[1]+ arp[2] * arp[2];
156 double L = artt[0] * n[0]+ artt[1] * n[1]+ artt[2] * n[2];
157 double M = artp[0] * n[0]+ artp[1] * n[1]+ artp[2] * n[2];
158 double N = arpp[0] * n[0]+ arpp[1] * n[1]+ arpp[2] * n[2];
159 double H = (E*N-2.0f*F*M+G*L)/(2.0f*(E*G-F*F));
175 template<
typename TSpace>
181 typedef typename Space::RealPoint
RealPoint;
183 RealPoint art = rt(t);
184 RealPoint arp = rp(t);
185 RealPoint artt = rtt(t);
186 RealPoint arpp = rpp(t);
187 RealPoint artp = rtp(t);
190 RealPoint n(art[1]*arp[2]-art[2]*arp[1],art[2]*arp[0]-art[0]*arp[2],art[0]*arp[1]-art[1]*arp[0]);
191 double norme= sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);
195 double E = art[0] * art[0]+ art[1] * art[1]+ art[2] * art[2];
196 double F= art[0] * arp[0]+ art[1] * arp[1]+ art[2] * arp[2];
197 double G = arp[0] * arp[0]+ arp[1] * arp[1]+ arp[2] * arp[2];
198 double L = artt[0] * n[0]+ artt[1] * n[1]+ artt[2] * n[2];
199 double M = artp[0] * n[0]+ artp[1] * n[1]+ artp[2] * n[2];
200 double N = arpp[0] * n[0]+ arpp[1] * n[1]+ arpp[2] * n[2];
202 double K = (L*N-M*M)/(E*G-F*F);
215 template<
typename TSpace>
220 while ( t2.first < t1.first ) t2.first += 2.0*
M_PI;
221 while ( t2.second < t1.second ) t2.second += 2.0*
M_PI;
225 for (
unsigned int i = 1; i <= nb; ++i )
228 t.first = ( ( t2.first - t1.first ) * i ) / nb;
229 t.second = ( ( t2.second - t1.second ) * i ) / nb;
231 h.first=t1.first + t.first;
232 h.second=t1.second + t.second;
234 l += sqrt( ( x1[0] - x0[0] )*( x1[0] - x0[0] )
235 + ( x1[1] - x0[1] )*( x1[1] - x0[1] ) + ( x1[2] - x0[2] )*( x1[2] - x0[2] ) );
248 template<
typename TSpace>
253 while ( t2.first < t1.first ) t2.first += 2.0*
M_PI;
254 while ( t2.second < t1.second ) t2.second += 2.0*
M_PI;
256 double step1 = ( t2.first - t1.first ) / nb;
257 double step2 = ( t2.second - t1.second ) / nb;
260 for (
unsigned int i = 0; i < nb; ++i )
263 for (
unsigned int j = 0; j < nb; ++j )
266 t.second = step2 * j;
267 RealPoint xtp (x( make_pair( t1.first + t.first - step1 ,t1.second + t.second - step2 ) ));
268 RealPoint xt1p1( x( make_pair(t1.first + t.first,t1.second + t.second) ) );
269 RealPoint xt1p( x( make_pair(t1.first + t.first,t1.second + t.second- step2 ) ) );
270 double D = sqrt( ( xt1p[0] - xtp[0] )*( xt1p[0] - xtp[0] ) +
271 ( xt1p[1] - xtp[1] )*( xt1p[1] - xtp[1] ) +
272 ( xt1p[2] - xtp[2] )*( xt1p[2] - xtp[2] ));
273 double d = sqrt( ( xt1p1[0] - xt1p[0] )*( xt1p1[0] - xt1p[0] ) +
274 ( xt1p1[1] - xt1p[1] )*( xt1p1[1] - xt1p[1] ) +
275 ( xt1p1[2] - xt1p[2] )*( xt1p1[2] - xt1p[2] ));
289 template <
typename T>
302 template <
typename T>
307 out <<
"[StarShaped2D]";
314 template <
typename T>
327 template <
typename T>
333 object.selfDisplay( out );