Ejemplo n.º 1
0
        public static intersection line_point_intersect(Vec p1, Vec p2, Vec p0, double rad)
        {
            var v = new Vec(p2.Y - p1.Y, -(p2.X - p1.X)); // perpendicular vector
            var d = Math.Abs((p2.X - p1.X) * (p1.Y - p0.Y) - (p1.X - p0.X) * (p2.Y - p1.Y));

            d = d / v.length();
            if (d > rad)
            {
                return(null);
            }

            v.normalize();
            v.scale(d);
            var    up = p0.add(v);
            double ua = 0;

            if (Math.Abs(p2.X - p1.X) > Math.Abs(p2.Y - p1.Y))
            {
                ua = (up.X - p1.X) / (p2.X - p1.X);
            }
            else
            {
                ua = (up.Y - p1.Y) / (p2.Y - p1.Y);
            }
            if (ua > 0.0 && ua < 1.0)
            {
                return(new intersection()
                {
                    ua = ua, up = up
                });
            }
            return(null);
        }