Here is what I would suggest:

Tower Pyramids.rbxl (32.0 KB)

Due to the clipping planes not getting negated, you may need to scale the wedges.

In terms of a mathematical approach using parts to get the angle, this would probably involve Pythagorean theorem to get the lengths and then use trigonometry to solve it.

Just so variables are clear:

h - height of pyramid

d - distance from center to known edge L

L - length of known edge

J - length of unknown (or known in this case) edge

r - radius of the octagon

e - distance from center to edge J

Edit: Validated my math. Forgot to double d for finding J, assuming it is unknown. Example code to show it works:

```
local L = 4
local h = 12
local d = 4
local r = math.sqrt(((L/2) ^ 2) + (d ^ 2))
local J = math.sqrt(2 * (((L - (2 * d))/2) ^ 2))
local e = math.sqrt((r ^ 2) - ((J/2) ^ 2))
print(math.deg(math.atan2(h,d))) --Expected: ~71.6 degrees
print(math.deg(math.atan2(h,e))) --Expected: ~70.5 degrees
```