/// <summary> /// /// </summary> /// <param name="mat"></param> public override void TransformBy(Matrix2D mat) { var pt0 = GetPointAtParam(StartParam); var pt1 = GetPointAtParam((StartParam + EndParam) / 2); var pt2 = GetPointAtParam(EndParam); pt0 *= mat; pt1 *= mat; pt2 *= mat; var vec = MinorAxis * mat; Minor = vec.Length; vec = MajorAxis * mat; Major = vec.Length; Center *= mat; Rotation = vec.Angle; var vec0 = pt0 - Center; var vec2 = pt2 - Center; StartAngle = vec0.Angle - Rotation; EndAngle = vec2.Angle - Rotation; IsClockWise = Vector2D.IsClockWise(vec0, pt1 - Center, vec2); }
public Vector2D Mirror(Vector2D vec) { return(TransformBy(Matrix2D.Mirror(vec))); }
/// <summary> /// 获取旋转后的向量 /// </summary> /// <param name="angle"></param> /// <returns></returns> public Vector2D RotateBy(Angle angle) { return(TransformBy(Matrix2D.Rotation(angle))); }
public abstract void TransformBy(Matrix2D mat);
public override void TransformBy(Matrix2D mat) { StartPoint *= mat; EndPoint *= mat; }
/// <summary> /// 按直线的镜像矩阵 /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public static Matrix2D Mirror(Point2D start, Point2D end) { return(Matrix2D.Mirror(start, end - start)); }
/// <summary> /// /// </summary> /// <param name="line"></param> /// <returns></returns> public static Matrix2D Mirror(LineSegment2D line) { return(Matrix2D.Mirror(line.StartPoint, line.EndPoint)); }