예제 #1
0
        public override HitResult Hit(HitData data)
        {
            var t = (Pt.Z - data.P0.Z) / data.PD.Z;

            if (t < 0)
            {
                return(null);
            }
            var tx = data.P0.X + data.PD.X * t;
            var ty = data.P0.Y + data.PD.Y * t;
            var d  = Math.Pow(Pt.X - tx, 2) + Math.Pow(Pt.Y - ty, 2);

            if (d > 3)
            {
                return(null);
            }
            return(new HitResult(this, tx, ty, Pt.Z, data));
        }
예제 #2
0
 public override HitResult Hit(HitData data)
 {
     if (minx == maxx)
     {
         var t = (minx - data.P0.X) / data.PD.X;
         if (t < 0)
         {
             return(null);
         }
         var tz = data.P0.Z + data.PD.Z * t;
         var ty = data.P0.Y + data.PD.Y * t;
         var d  = (tz >= minz) && (ty >= miny) && (tz <= maxz) && (ty <= maxy);
         if (!d)
         {
             return(null);
         }
         return(new HitResult(this, minx, ty, tz, data));
     }
     else
     {
         var tz = (minz + maxz) / 2;
         var t  = (tz - data.P0.Z) / data.PD.Z;
         if (t < 0)
         {
             return(null);
         }
         var tx = data.P0.X + data.PD.X * t;
         var ty = data.P0.Y + data.PD.Y * t;
         var d  = (tx >= minx) && (ty >= miny) && (tx <= maxx) && (ty <= maxy);
         if (!d)
         {
             return(null);
         }
         return(new HitResult(this, tx, ty, tz, data));
     }
 }
예제 #3
0
        //public virtual void Draw(Graphics g, Rectangle rect)
        //{
        //    g.FillEllipse(new SolidBrush(Get()), rect);
        //}

        public virtual HitResult Hit(HitData data)
        {
            return(null);
        }
예제 #4
0
 public HitResult(Lit lit, float tx, float ty, float tz, HitData data)
 {
     this.Lit      = lit;
     this.Distance = Math.Sqrt(Math.Pow(data.P0.X - tx, 2) + Math.Pow(data.P0.Y - ty, 2) + Math.Pow(data.P0.Z - tz, 2));
 }