Offline oracle: replay an aim-point schedule through the finder's coverage marker and return the area-weighted coverage fraction.
At orbit CoM point pc(i)\bm p_c^{(i)}pc(i) and aim point xaim(i)\bm x_{\text{aim}}^{(i)}xaim(i):
u^(i)=xaim(i)−pc(i)∥xaim(i)−pc(i)∥\hat{\bm u}^{(i)} = \frac{\bm x_{\text{aim}}^{(i)} - \bm p_c^{(i)}}{\|\bm x_{\text{aim}}^{(i)} - \bm p_c^{(i)}\|} u^(i)=∥xaim(i)−pc(i)∥xaim(i)−pc(i)
pe(i)=pc(i)+rcamu^(i)\bm p_e^{(i)} = \bm p_c^{(i)} + r_{\text{cam}} \hat{\bm u}^{(i)} pe(i)=pc(i)+rcamu^(i)
EE placed on the camera sphere of radius rcamr_{\text{cam}}rcam; look-axis ze=xaim(i)−pe(i)\bm z_e = \bm x_{\text{aim}}^{(i)} - \bm p_e^{(i)}ze=xaim(i)−pe(i).
Roll reference fixed to world-xxx: ex=[1,0,0]⊤\bm e_x = [1,0,0]^\topex=[1,0,0]⊤.
ze(i)=xaim(i)−pe(i)∥xaim(i)−pe(i)∥\bm z_e^{(i)} = \frac{\bm x_{\text{aim}}^{(i)} - \bm p_e^{(i)}}{\|\bm x_{\text{aim}}^{(i)} - \bm p_e^{(i)}\|} ze(i)=∥xaim(i)−pe(i)∥xaim(i)−pe(i)
Re(i)=framexz (ex,ze(i))R_e^{(i)} = \text{frame}_{xz}\!\left(\bm e_x, \bm z_e^{(i)}\right) Re(i)=framexz(ex,ze(i))
Roll continuity (RprevR_{\text{prev}}Rprev chaining) is irrelevant — visibility uses only ze\bm z_eze.
Strided sweep over NNN orbit samples with stride Δs\Delta_sΔs:
S=⋃k=0⌊N/Δs⌋V (posekΔs)\mathcal{S} = \bigcup_{k=0}^{\lfloor N/\Delta_s \rfloor} \mathcal V\!\left(\text{pose}_{k\Delta_s}\right) S=k=0⋃⌊N/Δs⌋V(posekΔs)
where V\mathcal VV is the visible-triangle set at a given pose. Finder state (seen_triangles, triangle_stats) is deep-snapshotted before the sweep and restored in-place in a finally block — side-effect-free by construction.
seen_triangles
triangle_stats
finally
Let S⊆{0,…,N△−1}\mathcal{S} \subseteq \{0,\ldots,N_\triangle-1\}S⊆{0,…,N△−1} be the seen triangle set.
f^cov=min (∑j∈SAjAtotal,1)\hat f_{\text{cov}} = \min\!\left(\frac{\displaystyle\sum_{j \in \mathcal{S}} A_j}{A_{\text{total}}}, 1\right) f^cov=minAtotalj∈S∑Aj,1
AjA_jAj = area of triangle jjj; Atotal=∑j=0N△−1AjA_{\text{total}} = \sum_{j=0}^{N_\triangle - 1} A_jAtotal=∑j=0N△−1Aj.
This is identical to the sim's inspection.area_coverage_frac by construction.
inspection.area_coverage_frac