# How to draw the projection of a figure on another plane and find the corresponding circumference and area?

In the rectangular ABCD-A1B1C1D1 with the edge length of 2, the known midpoints of edges BB1 and B1C1 are E, F respectively, and point P is in the plane BCC1B1, which is the vertical plane ACD1 of PQ and the vertical foot is Q. When point P moves in the triangle EFB1 (including the boundary), the trajectory of point Q is obtained to form a graph. Mark the boundary and vertex position of the graph, and find the perimeter and area of the projected graph.

The locus of point Q is the projection of plane EFB1 onto plane ACD1

project the triangle B1,E,F onto the triangle A,C,D1.

The correct figure area obtained by projection is:

Sqrt[3]/6

Clear["Global*"];
c = {0, 0, 0};
d = {2, 0, 0};
b = {0, 2, 0};
a = b + d;
h = 2;
c1 = {0, 0, h};
d1 = d + c1
a1 = a + c1
b1 = b + c1
e = 1/2 (b1 + b)
f = 1/2 (b1 + c1)
labels = {Text[Style[A, 12, FontFamily -> "Times"], a, {-1, -1}],
Text[Style[B, 12, FontFamily -> "Times"], b, {1, 1}],
Text[Style[C, 12, FontFamily -> "Times"], c, {1, 1}],
Text[Style[D, 12, FontFamily -> "Times"], d, {-2, 0}],
Text[Style[A1, 12, FontFamily -> "Times"], a1, {3, 0}],
Text[Style[B1, 12, FontFamily -> "Times"], b1, {-1, -2}],
Text[Style[C1, 12, FontFamily -> "Times"], c1, {0, 1}],
Text[Style[D1, 12, FontFamily -> "Times"], d1, {3, 0}],
Text[Style[E, 12, Red, FontFamily -> "Times"], e, {3, 0}],
Text[Style[F, 12, Red, FontFamily -> "Times"], f, {3, 0}]};
dashLines = {Dashed,
AbsoluteThickness[2], {Black, Line[{{e, f}, {d, b1}}]}, {Blue,
Line[{{d1, a}, {d1, c}, {a, c}}]}, {Red,
Line[{{c, d}, {c1, c}, {c, b}}]}};
realLines = {AbsoluteThickness[2],
Line[{{a, d}, {a, b}, {a1, a}, {b, b1}, {a1, d1}, {a1, b1}, {c1,
d1}, {b1, c1}, {d, d1}}]};
Show[Graphics3D[{dashLines, realLines, labels}, Boxed -> False,
ViewPoint -> {2, 3.5, 1.28}],
RegionPlot3D[Polygon[{e, f, b1}], MeshFunctions -> {#1 + #2 + #3 &},
Mesh -> 20, PlotStyle -> Cyan],
Graphics3D[{Arrow[{{c1, c1 + {0, 0, 1}}, {d, d + {1, 0, 0}}, {b,
b + {0, 1, 0}}}],
Text[Style["z", 20, Italic, FontFamily -> "Times"],
c1 + {0, 0, 1}, {-1, -1}],
Text[Style["y", 20, Italic, FontFamily -> "Times"],
b + {0, 1, 0}, {-2, -1}],
Text[Style["x", 20, Italic, FontFamily -> "Times"],
d + {1, 0, 0}, {2, -1}]}]]


• The normal of the Triangle[{d1,a,c}] is Cross[d1 - a, d1 - c]. We projection to this triangle according to its normal and relative to the point d1 (or a or c)
reg1 = ScalingTransform[0, Cross[d1 - a, d1 - c], d1]@
Polygon[{b1, e, f}]
reg2 = ScalingTransform[0, Cross[d1 - a, d1 - c], c]@
Polygon[{b1, e, f}]
reg3 = ScalingTransform[0, Cross[d1 - a, d1 - c], a]@
Polygon[{b1, e, f}]
Area /@ {reg1, reg2, reg3}

RegionEqual[reg1, reg2, reg3]


True.

Clear[g];
g = Show[
Graphics3D[{dashLines, realLines, labels}, Boxed -> False,
ViewPoint -> {2, 3.5, 1.28}],
RegionPlot3D[Polygon[{e, f, b1}],
MeshFunctions -> {#1 + #2 + #3 &}, Mesh -> 20, PlotStyle -> Cyan],
Graphics3D[{Arrow[{{c1, c1 + {0, 0, 1}}, {d, d + {1, 0, 0}}, {b,
b + {0, 1, 0}}}],
Text[Style["z", 20, Italic, FontFamily -> "Times"],
c1 + {0, 0, 1}, {-1, -1}],
Text[Style["y", 20, Italic, FontFamily -> "Times"],
b + {0, 1, 0}, {-2, -1}],
Text[Style["x", 20, Italic, FontFamily -> "Times"],
d + {1, 0, 0}, {2, -1}]}]];
Show[g, Graphics3D[{Red, reg1}]]


• Another way is projection the three points {b1,e,f} to the Triangle[{d1,a,c}].
proj = ScalingTransform[0, Cross[d1 - a, d1 - c], d1];
proj /@ {b1, e, f}
% // Triangle // Area


1/(2 Sqrt[3]).

Graphics3D[{Triangle[{d1, a, c}], Green, Triangle[{b1, e, f}], Cyan,
MapThread[Arrow[{#1, #2}] &, {{b1, e, f}, proj /@ {b1, e, f}}], Red,
Triangle[proj /@ {b1, e, f}]}, ViewProjection -> "Orthographic",
ViewPoint -> {1.21, 3.07, 0.70}]


• Thank you very much cvgmt! I'm mainly thinking about the use of this ScalingTransform right now Aug 8, 2023 at 12:56
• reg1 = ScalingTransform[0, Cross[d1 - a, d1 - c], d1]@ Polygon[{b1, e, f}]The first parameter after ScalingTransform is 0, the second parameter is the normal vector of the plane ACD1, and the third parameter D1 is a vertex of the plane ACD1. What is the meaning and function of these parameters after ScalingTransform? Aug 8, 2023 at 13:07
• @csn899 ScalingTransform[s,v,p] gives scaling s along the direction of v, centered at the point p. When s==0, the 3D object will collapse to a 0 hight object,that is the projection. Aug 8, 2023 at 13:13
• Can we obtain the coordinates of several vertices of the projected graph? Aug 8, 2023 at 13:16
• @csn899 I have post the code. proj = ScalingTransform[0, Cross[d1 - a, d1 - c], d1]; proj /@ {b1, e, f} Aug 8, 2023 at 13:19

If I understand your description correct, then you want to project from the point D the triangle B1,E,F onto the triangle A,C,D1.

This can be done by noting that (to simplify the formulas, I use that C is the origin and I am using lowercase characters) every point on acd1 can be written as a linear combination of a and d1. And every point on the line from d to some point p can be written as: d+ x1 (p-d) where x is some factor. Naming the projections of b1,e,f: pb1,pe,pf we can solve for the coordinates of these points by:

pb1 = d + x3 (b1 - d) /.
Solve[x1 a + x2 d1 == d + x3 (b1 - d), {x1, x2, x3}][[1]]
pe = d + x3 (e - d) /.
Solve[x1 a + x2 d1 == d + x3 (e - d), {x1, x2, x3}][[1]]
pf = d + x3 (f - d) /.
Solve[x1 a + x2 d1 == d + x3 (f - d), {x1, x2, x3}][[1]]


This looks like:

Show[Graphics3D[{dashLines, realLines, labels,
Line[{{e, d}, {f, d}, {b1, d}}], Red, Triangle[{pb1, pe, pf}]},
Boxed -> False, ViewPoint -> {2, 3.5, 1.28}],
RegionPlot3D[Polygon[{e, f, b1}], MeshFunctions -> {#1 + #2 + #3 &},
Mesh -> 20, PlotStyle -> Cyan],
Graphics3D[{Arrow[{{c1, c1 + {0, 0, 1}}, {d, d + {1, 0, 0}}, {b,
b + {0, 1, 0}}}],
Text[Style["z", 20, Italic, FontFamily -> "Times"],
c1 + {0, 0, 1}, {-1, -1}],
Text[Style["y", 20, Italic, FontFamily -> "Times"],
b + {0, 1, 0}, {-2, -1}],
Text[Style["x", 20, Italic, FontFamily -> "Times"],
d + {1, 0, 0}, {2, -1}]}]]


The area can be calculated using the formula from Heron:

sa = Norm[pb1 - pe];
sb = Norm[pe - pf];
sc = Norm[pf - pb1];
s = (sa + sb + sc)/2;
area = Sqrt[s (s - sa) (s - sb) (s - sc)] // N

0.046188
`
• The area of the projection figure turned out wrong Aug 8, 2023 at 11:20
• The correct figure area obtained by projection is: Sqrt[3]/6 Aug 8, 2023 at 11:22
• @csn899 Can you give some reasons for your claim? Aug 8, 2023 at 12:15
• The process of hand calculation is as follows: take the midpoint G of A1B1, then the plane EFG is parallel to the plane ACD1, and the line DB1 is perpendicular to the two planes, so the area of the projected figure of the triangle EFB1 on the plane ACD1 is one third of the area of the triangle EFG. The easy triangle EFG is an equilateral triangle with sides of Sqrt[2], so the area of the projected figure is Sqrt[3]/6 Aug 8, 2023 at 12:30
• This seems wrong. Aug 9, 2023 at 9:33