41 template <
typename TConstIterator>
44 :myBegin(), myEnd(), myPreimagePtr(), myFlagIsInit(
false), myFlagIsCW(true)
48 template <
typename TConstIterator>
51 :myBegin(other.myBegin), myEnd(other.myEnd), myPreimagePtr(other.myPreimagePtr),
52 myFlagIsInit(other.myFlagIsInit), myFlagIsCW(other.myFlagIsCW)
56 template <
typename TConstIterator>
72 template <
typename TConstIterator>
78 template <
typename TConstIterator>
85 Pair firstPair( *myBegin );
87 if ( (firstPair.first == oFirstPair.first)
88 &&(firstPair.second == oFirstPair.second) )
95 Pair oLastPair( *oIt );
97 if ( (lastPair.first == oLastPair.first)
98 &&(lastPair.second == oLastPair.second) )
108 return ( (!isValid()) && (!other.
isValid()) );
112 template <
typename TConstIterator>
117 return !(*
this == other);
120 template <
typename TConstIterator>
129 template <
typename TConstIterator>
142 template <
typename TConstIterator>
147 if ( myPreimagePtr.get() != 0 )
149 return myPreimagePtr->
isValid();
157 template <
typename TConstIterator>
165 template <
typename TConstIterator>
173 template <
typename TConstIterator>
178 ASSERT( myPreimagePtr.get() != 0 );
179 return myPreimagePtr->getUf();
182 template <
typename TConstIterator>
187 ASSERT( myPreimagePtr.get() != 0 );
188 return myPreimagePtr->getUl();
191 template <
typename TConstIterator>
196 ASSERT( myPreimagePtr.get() != 0 );
197 return myPreimagePtr->getLf();
200 template <
typename TConstIterator>
205 ASSERT( myPreimagePtr.get() != 0 );
206 return myPreimagePtr->getLl();
209 template <
typename TConstIterator>
218 template <
typename TConstIterator>
223 ASSERT( myPreimagePtr.get() != 0 );
224 myPreimagePtr->getSeparatingStraightLine(alpha, beta, gamma);
227 template <
typename TConstIterator>
231 const double& alpha,
const double& beta,
const double& gamma)
const
233 ASSERT( (alpha!=0)||(beta!=0) );
234 double d2 = ( alpha * alpha + beta * beta );
235 double s = beta*x - alpha*y;
236 x = (beta*s - alpha*gamma)/d2;
237 y = -(alpha*s + beta*gamma)/d2;
243 template <
typename TConstIterator>
255 template <
typename TConstIterator>
260 ASSERT( myPreimagePtr.get() != 0 );
261 Pair aPair( *myEnd );
262 bool isExterior =
false;
268 isExterior = myPreimagePtr->isLeftExteriorAtTheFront( aPair.first, aPair.second );
270 isExterior = myPreimagePtr->isRightExteriorAtTheBack( aPair.first, aPair.second );
277 template <
typename TConstIterator>
282 ASSERT( myPreimagePtr.get() != 0 );
283 Pair aPair( *myEnd );
284 bool isExterior =
false;
290 isExterior = myPreimagePtr->isRightExteriorAtTheFront( aPair.first, aPair.second );
292 isExterior = myPreimagePtr->isLeftExteriorAtTheBack( aPair.first, aPair.second );
299 template <
typename TConstIterator>
304 ASSERT( myPreimagePtr.get() != 0 );
308 bool isExterior =
false;
314 isExterior = myPreimagePtr->isRightExteriorAtTheBack( aPair.first, aPair.second );
316 isExterior = myPreimagePtr->isLeftExteriorAtTheFront( aPair.first, aPair.second );
323 template <
typename TConstIterator>
328 ASSERT( myPreimagePtr.get() != 0 );
332 bool isExterior =
false;
338 isExterior = myPreimagePtr->isLeftExteriorAtTheBack( aPair.first, aPair.second );
340 isExterior = myPreimagePtr->isRightExteriorAtTheFront( aPair.first, aPair.second );
348 template <
typename TConstIterator>
353 ASSERT( myPreimagePtr.get() != 0 );
354 Pair aPair( *myEnd );
361 isOK = myPreimagePtr->canBeAddedAtTheFront( aPair.first, aPair.second );
363 isOK = myPreimagePtr->canBeAddedAtTheBack( aPair.first, aPair.second );
367 if ( myPreimagePtr->canBeAddedAtTheFront( aPair.first, aPair.second ) )
369 else if ( myPreimagePtr->canBeAddedAtTheBack( aPair.first, aPair.second ) )
376 template <
typename TConstIterator>
381 ASSERT( myPreimagePtr.get() != 0 );
382 Pair aPair( *myEnd );
389 isOK = myPreimagePtr->addFront( aPair.first, aPair.second );
391 isOK = myPreimagePtr->addBack( aPair.first, aPair.second );
395 if ( myPreimagePtr->addFront( aPair.first, aPair.second ) )
400 else if ( myPreimagePtr->addBack( aPair.first, aPair.second ) )
415 template <
typename TConstIterator>
420 ASSERT( myPreimagePtr.get() != 0 );
430 isOK = myPreimagePtr->canBeAddedAtTheBack( aPair.first, aPair.second );
432 isOK = myPreimagePtr->canBeAddedAtTheFront( aPair.first, aPair.second );
436 if ( myPreimagePtr->canBeAddedAtTheBack( aPair.first, aPair.second ) )
438 else if ( myPreimagePtr->canBeAddedAtTheFront( aPair.first, aPair.second ) )
445 template <
typename TConstIterator>
450 ASSERT( myPreimagePtr.get() != 0 );
460 isOK = myPreimagePtr->addBack( aPair.first, aPair.second );
462 isOK = myPreimagePtr->addFront( aPair.first, aPair.second );
466 if ( myPreimagePtr->addBack( aPair.first, aPair.second ) )
471 else if ( myPreimagePtr->addFront( aPair.first, aPair.second ) )
489 template <
typename TConstIterator>
495 out <<
"[GeometricalDSS]" << std::endl;
498 Pair firstPair( *myBegin );
499 out <<
"\t From " << firstPair.first << firstPair.second << std::endl;
502 Pair lastPair( *it );
503 out <<
"\t To " << lastPair.first << lastPair.second << std::endl;
504 ASSERT( myPreimagePtr.get() != 0 );
505 out << (*myPreimagePtr);
509 out <<
"\t not valid" << std::endl;
511 out <<
"[end of GeometricalDSS]" << std::endl;
514 template <
typename TConstIterator>
519 return "GeometricalDSS";
525 template <
typename TConstIterator>
531 object.selfDisplay( out );