Exemple #1
0
        public bool intersectWith(Line2D l, Vector2D o)
        {
            bool found = false;

            float a1, a2, b1, b2;

            // calculate slopes, deal with infinity
            if (End.X - Start.X == 0)
                b1 = (float)1e+10;
            else
                b1 = (End.Y - Start.Y) / (End.X - Start.X);

            if (l.End.X - l.Start.X == 0)
                b2 = (float)1e+10;
            else
                b2 = (l.End.Y - l.Start.Y) / (l.End.X - l.Start.X);

            // calculate position
            a1 = Start.Y - b1 * Start.X;
            a2 = l.Start.Y - b2 * l.Start.X;
            o.X = -(a1 - a2) / (b1 - b2);
            o.Y = a1 + b1 * o.X;

            // did the lines cross?
            if ((Start.X - o.X) * (o.X - End.X) >= -ROUNDING_ERROR_32 &&
                (l.Start.X - o.X) * (o.X - l.End.X) >= -ROUNDING_ERROR_32 &&
                (Start.Y - o.Y) * (o.Y - End.Y) >= -ROUNDING_ERROR_32 &&
                (l.Start.Y - o.Y) * (o.Y - l.End.Y) >= -ROUNDING_ERROR_32)
            {
                found = true;
            }
            return found;
        }
Exemple #2
0
 public double GetAngleWith(Line2D l)
 {
     Vector2D vect = Vector;
     Vector2D vect2 = l.Vector;
     return vect.GetAngleWith(vect2);
 }
Exemple #3
0
 public static Line2D From(float xMin, float yMin, float xMax, float yMax)
 {
     Line2D line = new Line2D();
     line.Start = new Vector2D();
     line.End = new Vector2D();
     line.Start.Set(xMin, yMin);
     line.End.Set(xMax, yMax);
     return line;
 }