public MyVector MutliplyMatrix(MyMaxtrix m)
        {
            var newX = this.X * m.M11 + this.Y * m.M21 + 0 * m.M31;
            var newY = this.X * m.M12 + this.Y * m.M22 + 0 * m.M32;

            return(new MyVector(newX, newY));
        }
        private void CalcArrowEdgeVec(Point p1, Point p2, out MyVector topEdgeVec, out MyVector bottomEdgeVec)
        {
            //sin(-θ)=-sinθ
            //cos(-θ)=cosθ
            var lineVec = new MyVector(p1.X - p2.X, p1.Y - p2.Y);

            lineVec.Normalize();
            lineVec.MultplyLen((float)ArrowEdgeLength);
            var rad                = ArrowEdgeAngle / 2 * (Math.PI / 180);
            var sinθ               = Math.Sin(rad);
            var cosθ               = Math.Cos(rad);
            var topRotateMatrix    = new MyMaxtrix(cosθ, sinθ, -sinθ, cosθ, 0, 0);
            var bottomRotateMatrix = new MyMaxtrix(cosθ, -sinθ, sinθ, cosθ, 0, 0);

            topEdgeVec    = lineVec.MutliplyMatrix(topRotateMatrix);
            bottomEdgeVec = lineVec.MutliplyMatrix(bottomRotateMatrix);
        }
 public MyVector MutliplyMatrix(MyMaxtrix m)
 {
     var newX = this.X * m.M11 + this.Y * m.M21 + 0 * m.M31;
     var newY = this.X * m.M12 + this.Y * m.M22 + 0 * m.M32;
     return new MyVector(newX, newY);
 }
 private void CalcArrowEdgeVec(Point p1, Point p2, out MyVector topEdgeVec, out MyVector bottomEdgeVec)
 {
     //sin(-θ)=-sinθ
     //cos(-θ)=cosθ
     var lineVec = new MyVector(p1.X - p2.X, p1.Y - p2.Y);
     lineVec.Normalize();
     lineVec.MultplyLen((float)ArrowEdgeLength);
     var rad = ArrowEdgeAngle / 2 * (Math.PI / 180);
     var sinθ = Math.Sin(rad);
     var cosθ = Math.Cos(rad);
     var topRotateMatrix = new MyMaxtrix(cosθ, sinθ, -sinθ, cosθ, 0, 0);
     var bottomRotateMatrix = new MyMaxtrix(cosθ, -sinθ, sinθ, cosθ, 0, 0);
     topEdgeVec = lineVec.MutliplyMatrix(topRotateMatrix);
     bottomEdgeVec = lineVec.MutliplyMatrix(bottomRotateMatrix);
 }