Example #1
0
 public static void DrawGradientIntPolygon(this Texture2D texture, IntPolygon polygon, Color color0, Color color1)
 {
     if (polygon.Count < 2)
     {
         return;
     }
     for (var i = 0; i < polygon.Count; i++)
     {
         var distance = Vertex2.Distance((Vertex2)polygon[i], (Vertex2)polygon[i + 1]);
         Action <int, int> draw;
         if (distance > 0)
         {
             draw = (x, y) =>
             {
                 var percent = Vertex2.Distance((Vertex2)polygon[i], new Vertex2(x, y)) / distance;
                 texture.SetPixel(x, y, Color.Lerp(color0, color1, percent));
             };
         }
         else
         {
             draw = (x, y) => texture.SetPixel(x, y, color0);
         }
         BresenhamLine(polygon[i], polygon[i + 1], draw);
     }
     texture.Apply();
 }
Example #2
0
        public static float PointToLine(Vertex2 point, Vertex2 lineStart, Vertex2 lineEnd)
        {
            Vertex2 v = lineEnd - lineStart;
            Vertex2 w = point - lineStart;

            float c1 = Vertex2.Dot(w, v);
            float c2 = Vertex2.Dot(v, v);
            float b  = c1 / c2;

            Vertex2 pb = lineStart + b * v;

            return(Vertex2.Distance(point, pb));
        }
Example #3
0
        public static void DrawGradientLine(this Texture2D texture, int x0, int y0, int x1, int y1, Color color0,
                                            Color color1)
        {
            var distance = Vertex2.Distance(new Vertex2(x0, y0), new Vertex2(x1, y1));
            Action <int, int> draw;

            if (distance > 0)
            {
                draw = (x, y) =>
                {
                    var percent = Vertex2.Distance(new Vertex2(x0, y0), new Vertex2(x, y)) / distance;
                    texture.SetPixel(x, y, Color.Lerp(color0, color1, percent));
                };
            }
            else
            {
                draw = (x, y) => texture.SetPixel(x, y, color0);
            }
            BresenhamLine(x0, y0, x1, y1, draw);
            texture.Apply();
        }
Example #4
0
        public static float PointToLineSegment(Vertex2 point, Vertex2 segmentStart, Vertex2 segmentEnd)
        {
            Vertex2 v = segmentEnd - segmentStart;
            Vertex2 w = point - segmentStart;

            float c1 = Vertex2.Dot(w, v);

            if (c1 <= 0)
            {
                return(Vertex2.Distance(point, segmentStart));
            }

            float c2 = Vertex2.Dot(v, v);

            if (c2 <= c1)
            {
                return(Vertex2.Distance(point, segmentEnd));
            }

            float   b  = c1 / c2;
            Vertex2 pb = segmentStart + b * v;

            return(Vertex2.Distance(point, pb));
        }