public bool Intersects(Polygon obj) { Vector3 n1 = Normal (), n2 = obj.Normal (); if (Vector3.Dot (n1,n2) == 0) //if(this.Contains(obj.U)) return false; double d1 = -(n1.X * U.X + n1.Y * V.X + n1.Z * W.X); double d2 = -(n2.X * obj.U.X + n2.Y * obj.V.X + n2.Z * obj.W.X); double div1 = Vector3.Dot (n1, n1); double div2 = Vector3.Dot (n1, n2); double k2 = (-d1 / div1 - d2 / (div1 * div2)) * (div1 * div2 / (div1 * div2 + Vector3.Dot (n2, n2))); double k1 = (-d1 - k2 * div2) / div1; Rect3 intersection = new Rect3 (k1 * n1 + k2 * n2, Vector3.Cross (n1, n2), true); }