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)); }
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)); } }
//public virtual void Draw(Graphics g, Rectangle rect) //{ // g.FillEllipse(new SolidBrush(Get()), rect); //} public virtual HitResult Hit(HitData data) { return(null); }
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)); }