Smoothing a hand-drawn curve

后端 未结 6 1325
孤城傲影
孤城傲影 2020-11-30 19:06

I\'ve got a program that allows users to draw curves. But these curves don\'t look nice - they look wobbly and hand-drawn.

So I want an algorithm that will automatic

6条回答
  •  没有蜡笔的小新
    2020-11-30 19:39

    For Silverlight users of Kris' answer, Point is hobbled and Vector doesn't exist. This is a minimal Vector class that supports the code:

    public class Vector
    {
       public double X { get; set; }
       public double Y { get; set; }
       public Vector(double x=0, double y=0)
       {
          X = x;
          Y = y;
       }
    
       public static implicit operator Vector(Point b)
       {
          return new Vector(b.X, b.Y);
       }
    
       public static Point operator *(Vector left, double right)
       {
          return new Point(left.X * right, left.Y * right);
       }
       public static Vector operator -(Vector left, Point right)
       {
          return new Vector(left.X - right.X, left.Y - right.Y);
       }
    
       internal void Negate()
       {
          X = -X;
          Y = -Y;
       }
    
       internal void Normalize()
       {
          double factor = 1.0 / Math.Sqrt(LengthSquared);
          X *= factor;
          Y *= factor;
       }
    
       public double LengthSquared { get { return X * X + Y * Y; } }
    }
    

    Also had to address use of Length and +,- operators. I chose to just add functions to the FitCurves class, and rewrite their usages where the compiler complained.

      public static double Length(Point a, Point b)
      {
         double x = a.X-b.X;
         double y = a.Y-b.Y;
         return Math.Sqrt(x*x+y*y);
      }
    
      public static Point Add(Point a, Point b)
      {
         return new Point(a.X + b.X, a.Y + b.Y);
      }
    
      public static Point Subtract(Point a, Point b)
      {
         return new Point(a.X - b.X, a.Y - b.Y);
      }
    

提交回复
热议问题