Průnik přímky a roviny

Rovina rho je zadána body I, J, K; přímka p je zadána body L, M.
Průsečík rho a p je označen R.

lambda (žlutá) = pomocná rovina obsahující přímku LM,
r (oranžová) = průsečnice rovin lambda a rho,
R = průsečík přímek r a p je hledaným průsečíkem rho a p.

B = Point(yAxis)
L_1 = PointIn(Plane[z = 0])
M_1 = PointIn(Plane[z = 0])
K = Point(zAxis)
J = Point(yAxis)
I = Point(xAxis)
A = Intersect(zAxis, yAxis)
C = Point(Circle[B, Distance[A, B], Segment[A, B]])
M = Point(OrthogonalLine[M_1, Plane[z = 0]])
krychle, D, E, F, G, H, stenaABCD, stenaADHE, stenaABFE, stenaBCGF, stenaCDHG, stenaEFGH, hranaAD, hranaAB, hranaBC, hranaCD, hranaAE, hranaDH, hranaEH, hranaEF, hranaBF, hranaFG, hranaCG, hranaGH = Cube(A, B, C)
rho = Plane(I, J, K)
L = Point(OrthogonalLine[L_1, Plane[z = 0]])
p = Line(M, L)
stopa_2 = IntersectPath(rho, Plane[y + 0z = 0])
stopa_1 = IntersectPath(rho, Plane[z = 0])
R = Intersect(rho, p)
lambda = Plane(L, M, (x(M), y(M), 0))
p_1 = Line(L_1, M_1)
r = IntersectPath(rho, lambda)
nu = Plane(y + 0z = 0)
P_p = Intersect(p, Plane[z = 0])
N_p = Intersect(p, Plane[y + 0z = 0])
R_1: (x(R), y(R), 0)
n = IntersectPath(lambda, nu)
P = Intersect(lambda, stopa_1)
N = Intersect(lambda, stopa_2)
N_1: (x(N), y(N), 0)
u_L = Segment(L, L_1)
u_M = Segment(M, M_1)
u_N = Segment(N, N_1)
u_R = Segment(R, R_1)
u_Np = Segment(N_p, N_1)