public float IntersectsAt(PlaneMath plane) { Coords N = TMath.Cross(plane.u, plane.v); Coords AB = plane.A - A; if (TMath.Dot(N, v) == 0) { return(float.NaN); } float t = TMath.Dot(N, AB) / TMath.Dot(N, v); return(t); }
public Coords Reflect(Coords normal) { //R = A - 2(A.N)N Coords norm = normal.GetNormal(); Coords vnorm = v.GetNormal(); float d = TMath.Dot(norm, vnorm) * 2; if (d == 0) { return(v); } return(vnorm - norm * d); }
public float IntersectsAt(Line l) { if (TMath.Dot(Coords.Perp(l.v), v) == 0) { return(float.NaN); } Coords c = l.A - this.A; float t = TMath.Dot(Coords.Perp(l.v), c) / TMath.Dot(Coords.Perp(l.v), v); if (t < 0 || t > 1 && type == LINETYPE.SEGMENT) { return(float.NaN); } return(t); }