Download SliceRectangleSample.zip, last updated 10/02/2013 (23.18 KB)

Download
  • md5: 1e8ccdf10305cc43789e4fa28c96006b
using System;
using System.Drawing;

namespace SliceRectangleSample
{
  internal static class Intersection
  {
    #region Class Members

    public static Point FindLineIntersection(Point start1, Point end1, Point start2, Point end2)
    {
      float denom;
      int x;
      int y;

      // http://stackoverflow.com/a/1120126/148962

      denom = ((end1.X - start1.X) * (end2.Y - start2.Y)) - ((end1.Y - start1.Y) * (end2.X - start2.X));
      x = 0;
      y = 0;

      // ReSharper disable CompareOfFloatsByEqualityOperator
      if (denom != 0) // ReSharper restore CompareOfFloatsByEqualityOperator
      {
        float numer;
        float r;
        float numer2;
        float s;

        numer = ((start1.Y - start2.Y) * (end2.X - start2.X)) - ((start1.X - start2.X) * (end2.Y - start2.Y));
        r = numer / denom;
        numer2 = ((start1.Y - start2.Y) * (end1.X - start1.X)) - ((start1.X - start2.X) * (end1.Y - start1.Y));
        s = numer2 / denom;

        if (r >= 0 && r <= 1 && s >= 0 && s <= 1)
        {
          x = Convert.ToInt32(start1.X + (r * (end1.X - start1.X)));
          y = Convert.ToInt32(start1.Y + (r * (end1.Y - start1.Y)));
        }
      }

      return new Point(x, y);
    }

    #endregion
  }
}

Donate

Donate