Point2d Point2d::WithMagnitude(double v) { double m = Magnitude(); if(m < 1e-20) { dbp("!!! WithMagnitude() of zero vector"); Point2d r = { v, 0 }; return r; } else { return ScaledBy(v/m); } }
Vector Vector::WithMagnitude(double v) { double m = Magnitude(); if(EXACT(m == 0)) { // We can do a zero vector with zero magnitude, but not any other cases. if(fabs(v) > 1e-100) { dbp("Vector::WithMagnitude(%g) of zero vector!", v); } return From(0, 0, 0); } else { return ScaledBy(v/m); } }
Quaternion Quaternion::WithMagnitude(double s) { return ScaledBy(s/Magnitude()); }
ExprVector ExprVector::WithMagnitude(Expr *s) { Expr *m = Magnitude(); return ScaledBy(s->Div(m)); }