@RafaelA here’s something we could try:
For each surface in your original, vertical plane analysis, extract the:
- unit surface normal vector = surf_normal
- unit radiation vectors = radiation_vec (all that hit surface)
- original radiation value (scalar) = radiation_original
Then for each:
radiation_new = [(radiation_original) / dot_product(surf_normal, radiation_vec)] * [dot_product((0,0,1), radiation_vec))]
This basically assumes that the radiation on a surface is just the projection of the radiation vector onto surface area. So reverse that calculation to get the original radiation, and redo it with a vector pointing up (0,0,1) to get the amount projected onto a hypothetical vertically-oriented surface.
Currently at work, but I can give it a shot with your gh script if I get some time today.
S
Update 1: I took a look at the script and think there’s an obstacle that makes this a lot harder. In order to do the calc I suggested, we need all the sky patch vectors for every point, and unfortunately, I’m not sure which component provides that data.
Update 2: Alright, I gave in and resorted to python to figure this out. The solution is a bit hacky, I modified the intersectionMtx output to include the sky patch vectors, and then revised the Real Time Radiation results component to implement my formula.
Here’s the results:
Old
Revised
Looks better? Doesn’t match up as perfectly as I thought it would, not sure why, maybe there’s some subtle error in the calculation somewhere I’m not thinking of. At least it’s fast.
At any rate you can test this process out in the attached gh script: Solar_Radiation_Section_SVedit.gh (541.8 KB)