/// <summary> /// Determines whether two objects are equal. /// </summary> public override bool Equals(object obj) { if (obj == null || (!object.ReferenceEquals(this.GetType(), obj.GetType()))) { return(false); } Rotation r = (Rotation)obj; if (GeometRi3D.UseAbsoluteTolerance) { return((this.ToRotationMatrix - r.ConvertTo(this.Coord).ToRotationMatrix).MaxNorm < GeometRi3D.Tolerance); } else { return((this.ToRotationMatrix - r.ConvertTo(this.Coord).ToRotationMatrix).MaxNorm / this.ToRotationMatrix.MaxNorm < GeometRi3D.Tolerance); } }
/// <summary> /// Rotate vector /// </summary> public Vector3d Rotate(Rotation r) { if (this._coord != r.Coord) { r = r.ConvertTo(this._coord); } return(r.ToRotationMatrix * this); }
/// <summary> /// Rotate point around point 'p' as a rotation center. /// </summary> public Point3d Rotate(Rotation r, Point3d p) { if (this._coord != r.Coord) { r = r.ConvertTo(this._coord); } if (this._coord != p.Coord) { p = p.ConvertTo(this._coord); } return(r.ToRotationMatrix * (this - p) + p); }
/// <summary> /// Combine two rotations. /// </summary> public Rotation Mult(Rotation r) { Matrix3d m = this.ToRotationMatrix * r.ConvertTo(this.Coord).ToRotationMatrix; return(new Rotation(m, this.Coord)); }