//============================================================================= Vector2F Rectangle2::up_() const { Vector2F result = width_; result.setPerpendLeft(); result.setLength(height_); return result; }
//============================================================================= double Ray2::nearestParam( const Point2F& pt ) { double parameter = 0.0; Vector2F dir = getDir(); dir.setPerpendLeft(); intersectParam( *this, Ray2(pt, dir), parameter); return parameter; }
//============================================================================= Point2F Ray2::getPoint(double parameter, double offset) const { Vector2F delta = dir_; delta.multiply(parameter); Point2F result = origin_; result.add(delta); if (offset == 0.0) return result; Vector2F offsetVec = dir_; offsetVec.setPerpendLeft(); offsetVec.multiply( offset/offsetVec.getLength() ); result.add(offsetVec); return result; }