Normalmente, temos dados sobre a localização do terreno , por isso precisamos usá-lo. O chão determina uma figura sólida em 3D. Você projeta esta figura radialmente na esfera unitária centralizada no visualizador: isso mapeia o solo em uma região da esfera. Calcule a área da região restante : esse é o ângulo sólido subtendido pelo céu (em estereótipos ). Divida-o pela área total da esfera (igual a 4 pi) e multiplique por 100 para obter a porcentagem de céu.
Se você preferir uma explicação mais vívida, coloque o espectador no centro de uma pequena bolha esférica e peça-lhe para pintar no céu. Divida a quantidade de tinta que ela usa pela quantidade necessária para pintar a bolha inteira e multiplique por 100.
Na realidade, existem alguns detalhes técnicos não tão simples.
A projeção na esfera é bastante direta quando o terreno é dado como uma rede triangulada (um NIF), porque você só precisa escrever um código para projetar um triângulo em uma esfera. Quando o solo é dado como um modelo de elevação em grade (DEM), você pode conceber cada célula da grade como um quadrilátero 3D. Você pode dividir isso em dois triângulos ao longo de uma diagonal e mapear cada triângulo na esfera. Em ambos os casos, você fica com uma coleção de triângulos projetados na esfera. Ao projetar a esfera em um mapa (por exemplo, com uma projeção estereográfica), a agregação desses triângulos em uma região poligonal pode ser reduzida a um problema padrão de geometria computacional plana (usando um método de varredura plana, por exemplo). O resto é fácil (para um SIG).
Esta imagem mostra uma pequena cidade de arranha-céus simulados em uma projeção gnomônica centrada em um espectador no centro da cidade, olhando para cima. O SIG pode "mesclar" (formar a união) dos polígonos que representam os lados e os telhados desses edifícios e, em seguida, calcular a área do espaço (branco) restante. Uma projeção gnomônica foi escolhida porque as linhas arquitetônicas retas são renderizadas como segmentos de linha em vez de curvas.
Um GIS pode ser colocado em serviço para fazer esse cálculo quando você tiver apenas um terreno e edifícios. É provável que os edifícios estejam disponíveis como coleções de retângulos. Um vértice de um retângulo possui coordenadas euclidianas (x, y, z) em relação a um visualizador. Converta-os em coordenadas esféricas: latitude e longitude. Crie um polígono para o retângulo convertido. Faça isso para todos os retângulos de todas as partes de todos os edifícios, resultando em uma "camada de recurso de polígono". Então, no SIG, (1) calcule a união teórica dos conjuntos, (2) calcule a área resultante, (3) subtraia-a da metade da área da superfície da terra (a outra metade é para o solo), e (4) divida por toda a área da terra (multiplicando por 100 para obter uma porcentagem). O esforço computacional é proporcional a N * log (N) em que N é o número de vértices. A precisão depende de quão bem o GIS representa os retângulos (pode ser necessário dividir os lados do retângulo em sequências de vértices mais espaçados). Dependendo dos seus requisitos de precisão, você pode considerar abordagens baseadas em Monte-Carlo (por exemplo, o traçado de raios preconizado em outra resposta) quando você tiver mais de centenas de milhares de vértices - ou seja, quando o espectador estiver completamente cercado por (e puder ver partes de) dezenas de milhares de edifícios :-).