Changes in src/Line.cpp [f932b7:6256f5]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Line.cpp
rf932b7 r6256f5 37 37 Line::~Line() 38 38 {} 39 40 Line &Line::operator=(const Line& rhs){ 41 if(this!=&rhs){ 42 origin.reset(new Vector(*rhs.origin)); 43 direction.reset(new Vector(*rhs.direction)); 44 } 45 return *this; 46 } 39 47 40 48 … … 234 242 } 235 243 244 LinePoint Line::getLinePoint(const Vector &point) const{ 245 ASSERT(isContained(point),"Line point queried for point not on line"); 246 Vector helper = point - (*origin); 247 double param = helper.ScalarProduct(*direction); 248 return LinePoint(*this,param); 249 } 250 251 LinePoint Line::posEndpoint() const{ 252 return LinePoint(*this, numeric_limits<double>::infinity()); 253 } 254 LinePoint Line::negEndpoint() const{ 255 return LinePoint(*this,-numeric_limits<double>::infinity()); 256 } 257 258 bool operator==(const Line &x,const Line &y){ 259 return *x.origin == *y.origin && *x.direction == *y.direction; 260 } 261 236 262 Line makeLineThrough(const Vector &x1, const Vector &x2){ 237 263 if(x1==x2){ … … 240 266 return Line(x1,x1-x2); 241 267 } 268 269 270 /******************************** Points on the line ********************/ 271 272 LinePoint::LinePoint(const LinePoint &src) : 273 line(src.line),param(src.param) 274 {} 275 276 LinePoint::LinePoint(const Line &_line, double _param) : 277 line(_line),param(_param) 278 {} 279 280 LinePoint& LinePoint::operator=(const LinePoint &src){ 281 ASSERT(src.line==line,"Operation on two points of different lines"); 282 param=src.param; 283 return *this; 284 } 285 286 Vector LinePoint::getPoint() const{ 287 ASSERT(!isInfinite(),"getPoint() on infinite LinePoint called"); 288 return (*line.origin)+param*(*line.direction); 289 } 290 291 Line LinePoint::getLine() const{ 292 return line; 293 } 294 295 bool LinePoint::isInfinite() const{ 296 return isPosInfinity() || isNegInfinity(); 297 } 298 bool LinePoint::isPosInfinity() const{ 299 return param == numeric_limits<double>::infinity(); 300 } 301 bool LinePoint::isNegInfinity() const{ 302 return param ==-numeric_limits<double>::infinity(); 303 } 304 305 bool operator==(const LinePoint &x, const LinePoint &y){ 306 ASSERT(x.line==y.line,"Operation on two points of different lines"); 307 return x.param == y.param; 308 309 } 310 bool operator<(const LinePoint &x, const LinePoint &y){ 311 ASSERT(x.line==y.line,"Operation on two points of different lines"); 312 return x.param<y.param; 313 }
Note:
See TracChangeset
for help on using the changeset viewer.