Cross sections of quadrilateral pryamids
Question: Given two convex quadrilaterals, is there a pyramid having each of these as a cross section?
pryamid1
Analysis:
Let VOrABC be an arbitrary quadrilateral pyramid, with base OrABC in the xy-plane and vertex V. By translation and scaling we can assume that Or is the origin and
. So the three points B, C, and V determine the pyramid.
>
Or := [0,0,0]: A := [1,0,0]: B := [b1,b2,0]:
C:= [c1,c2,0]: V := [v1,v2,v3]:
Now any cross-section of the pyramid is similar, by parallel translation, to one containing the origin Or. So we can fix one point of the square to be Or. Call the other vertices of the cross-section Ap, Bp, and Cp as shown in the diagram above. Since Ap is on the line through A and V we can write Ap = (1-r)A + rV, for some number r. Similarly, Bp = (1-s)B + sV and Cp = (1-t)C + tV for some numbers s and t.
>
Ap := expand((1-r)*A + r*V):
Bp := expand((1-s)*B + s*V ):
Cp := expand((1-t)*C + t*V):
Since Or, Ap, Bp, and Cp all lie in the cross sectioning plane, and Ap and Cp are independent, we also know that Bp is a linear combination of Ap and Cp, say
for some numbers s1 and s2.
> eqn := expand(Bp-(s1*Ap+s2*Cp));
There are three (linear) equations in s, s1, and s2. These can be solved directly with 'solve'.
> sol:=solve({op(eqn)},{s1,s2,s});
>
This shows that s, s1, and s2 are functions of r and t, given that b1, b2, c1, and c2 are constants. Note that v1 and v2 do not appear in the expressions for s, s1, and s2 given in sol.
> indets(eqn),indets(sol);
>
Also, notice that there is a denominator %1 in sol. When %1 = 0, the system has no solution.
>
We are left with 4 variables, v1, v2, r, and t. The idea is we want to choose values for these so that Or Ap Bp Cp is a square. What are the equations which force Or Ap Bp Cp to be a square? First it must be the case that
, that is
and
.
>
eq1 := s1 =1;
eq2 := s2 = 1;
These equations taken together say that Or Ap Bp Cp is a parallelogram. To get a square, we need two other conditions: Or Ap and Or Ap have the same length (equation 3) and are perpendicular (equation 4).
> eq3 := Ap[1]^2+Ap[2]^2=Bp[1]^2+Bp[2]^2;
> eq4 := Ap[1]*Bp[1]+Ap[2]*Bp[2] ;
Now solve these 4 equations for the 4 variables r, t, v1 and v2 in terms of b1,b2, c1, and c2.
> sln :=solve(subs(sol,{eq1,eq2,eq3,eq4}),{v1,v2,r,t});
> indets([sln]);
There are two solutions to this system. Each solution contains two denominators, %1 and %2. When either of these is 0, the system of equations does not have a solution.
Here is a word which draws a picture of the square cross section of the pyramid with base Or A B C.
>
cross_section := proc(h,x,y,z,w,i)
local vars, vars2, vert, quad2, quad1, rays;
vars :=subs({b1=x,b2=y,c1=z,c2=w},sln[i]);
vars2 := subs({b1=x,b2=y,c1=z,c2=w,op(vars)},sol);
vert := subs([v3=h,b1=x,b2=y,c1=z,c2=w,op(vars2),op(vars)],[v1,v2,v3]);
quad2 :=plots[polygonplot3d](
subs([v3=h,b1=x,b2=y,c1=z,c2=w,op(vars2),op(vars)],
[Or,Ap, s1*Ap+s2*Cp,Cp]),style=patch,color=tan,scaling=constrained);
quad1 :=plots[polygonplot3d](
subs([v3=h,b1=x,b2=y,c1=z,c2=w,op(vars2),op(vars)],
[Or ,A,B,C]),style=patch,color=grey,scaling= constrained);
rays := plots[polygonplot3d](
subs([v3=h,b1=x,b2=y,c1=z,c2=w,op(vars2),op(vars)],
{[[0,0,0],vert],[A,vert],[Ap,vert],[B,vert],[Bp,vert],[C,vert],[Cp,vert]}),
thickness=2,color=blue);
plots[display]([rays,quad1,quad2]);
end:
Here is a display showing that for a given height and base, there are two distinct square cross sections.
>
plots[display]([cross_section(1,2,3,0,1,1),
cross_section(1,2,3,0,1,2)]);
This picture shows that when the quadrilateral is not convex, the square has three vertices on the reflection of the pyramid through its vertex.
> cross_section(1,1/2,1/2,0,2,1);
Exercises
Exercise: Solve these equations for s, s1, and s2 by elimination. That is, solve eqn[1] for s and substitute that into eqn[2]. Then solve eqn[2] for s1 and substitute that and the value for s into eqn[3]. Then solve eqn[3] for s2, and substitute that into the values for s and s2. Check your result by substituting that back into the original equations.
Solution.
First solve eqn[1] for s.
> ssln := solve(eqn[1],s);
Then substitute that value for s into eqn[2] and solve the result for s1.
> s1sln := solve(subs( s=ssln,eqn[2]),s1);
Then substitute that value for s1 into
> ssln := simplify(subs(s1=s1sln,ssln));
> eqn;
> s2sln := solve(subs({s=ssln,s1=s1sln},eqn[3]),s2);
> ssln := simplify(subs(s2=s2sln ,ssln));
> s1sln := simplify(subs(s2=s2sln,s1sln));
Checking, we see the equations are satisfied.
> simplify(subs({s=ssln,s1=s1sln,s2=s2sln},eqn));