Problem
A trapezoidal prism is "cut" by an infinite plane. The plane passes through the center of the trapezoidal prism, and the normal vector to the plane is known. The prism is isosceles (meaning its trapezoidal faces are isosceles). I wish to determine or approximate the surface area of the intersection in a computationally efficient manner.
What I've Tried
I have already determined a "brute force" method for accomplishing this, however it is far too computationally expensive for my purposes (I need to perform this operation on the order of $10^7$ to $10^{10}$ times). I suspect that, especially given the symmetries and simplifying assumptions I'm able to make (isosceles prism, plane passes through center) that there's a far simpler method if not some analytic or near-analytic formula. Here's what I'm doing now:
- Find Edge-Plane Intersections
- Iterate over each edge of the prism. Compute the intersection point with the plane (if any) using parametric line-plane intersection formula.
- Filter Valid Intersection Points Keep only those within edge bounds (0 ≤ t ≤ 1). Remove duplicates using a tolerance check.
- Order Points to Form Polygon
- Compute the centroid of intersection points.
- Construct a local 2D basis (orthonormal to the plane normal).
- Sort them by angle around the centroid to get polygon ordering.
- Compute Polygon Area
- Use the triangle fan method and 3D cross products.
- Sum triangle areas formed by the ordered vertices.
Steps Toward a Solution
I've given this a considerable amount of thought, and I feel as though I'm tantalizingly close to a solution.
Figure 1. Planes intersecting a rectangular prism and a trapezoidal prism.
If instead of a trapezoidal prism, we were working with a rectangular prism, the solution becomes a bit simpler. We can project the polygon formed by the intersection onto one of the $x-y$, $x-z$, or $y-z$ plane by simply ignoring the third coordinate. Using the shoelace formula, we can then determine the area of this projected polygon. The surface are of the intersection is the area of the projected polygon divided by the cosine of the angle between the normal to the plane and the ignored axis.
This becomes even simpler in a handful of special cases, such as those depicted above, where the area of the projected polygon is simply the area of one of the faces. The angle between the normal and the ignored axis (let it be the $z$ axis) is simply:
$$\theta = \frac{\hat{n}\cdot\hat{z}}{|\hat{n}||\hat{z}|} = \hat{n}_z$$
So that the area of the intersection ends up being something as simple as:
$$\frac{\text{Area of face}}{\cos(\hat{n}_z)}$$
And in code I could perhaps do something simple like perform a check on the angle of the normal vector w.r.t. one of the axes to determine which face to use. There's more work to be done, but it seems plausible to me that I could come up with a simple formula for the surface area of the intersection of a cube.
What I have, however, is a trapezoidal prism. I could break this trapezoidal prism up into a rectangular prism (for which the intersectional surface area may be easy to compute) and a set of wedges. I could perhaps make the approximation that the "corners" can be ignored.
Determining the surface area of the cross sections with the wedges seems difficult, but I suspect that I can treat these as rectangular prisms as well. Notice that (I think) the sum of the surface area of the cross sections of the plane with the wedges at top and bottom drawn here is the same as the surface area of the cross section of the rectangular prism drawn with the dotted line.
It has also been suggested to me that I could use Cauchy's surface area formula. I am not familiar with this, however, and my reading has not made it obvious to me how this formula could be applied.



