O problema central abordado é determinar quais pontos em uma nuvem de pontos 3D seriam visíveis a partir de um dado ponto de vista C. Nuvens de pontos são uma representação simples e flexível, que podem ser consideradas uma amostragem de uma superfície contínua. A visibilidade direta é complexa porque, exceto em casos degenerados, pontos individuais em uma nuvem não se ocluem mutuamente. O objetivo é extrair a informação de visibilidade sem ter que reconstruir explicitamente a superfície subjacente. A reconstrução de superfície é um desafio, tanto teórico quanto de implementação, frequentemente exigindo informação adicional como normais e amostragem densa. O desafio é evitar a fase de reconstrução completa.
Fonte: Artigo - Direct Visibility of Point Sets.
O operador HPR, proposto por Katz, Tal e Basri, é um método simples e rápido que determina os pontos visíveis numa nuvem de pontos 3D a partir de um ponto de vista C.
O operador HPR é composto por duas fases principais:
onde \( R \) é o raio da esfera.
Fontes: Artigo - Direct Visibility of Point Sets. Documento - HPR: Visibilidade em Nuvens de Pontos 3D.
O operador HPR é muito eficiente, com uma complexidade assintótica de \(O(n \log n\)). Esta complexidade é dominada pela segunda etapa (cálculo do fecho convexo), já que a inversão esférica, uma operação vetorial, leva \(O(n\)).
Esse tópico será melhor detalhado na aba de "Análise Assintótica"
Fontes: Artigo - Direct Visibility of Point Sets.
O fecho convexo de um conjunto de pontos \(P\) é o menor conjunto convexo que contém \(P\). Em \(\mathbb{R}^3\), o fecho convexo de um conjunto de pontos é um poliedro convexo (ou 3-polítopo). O fecho convexo é o fecho convexo dos seus vértices.
A fronteira de um poliedro convexo consiste em vértices (0-face), arestas (1-face) e faces (facetas, ou 2-face)
Fontes: Documento - 05-convexhull-3d.pdf. Documento - cg-hull3d.pdf.
O Quickhull é um algoritmo estático de comum implementação para o cálculo do fecho convexo, incluindo em 3D, e é utilizado em bibliotecas como CGAL (Função convex_hull_3()). De maneira conceitual, ele segue uma estratégia semelhante à do algoritmo de ordenação quicksort, pois: Primeiro, identifica os pontos extremos do conjunto e esses pontos forma uma estrutura inicial de fecho convexo. Então, o conjunto de pontos é dividido recursivamente em subconjuntos, adicionando apenas os pontos que realmente contribuem para a fronteira do fecho. Sua eficiência decorre de que muitos pontos são eliminados nas primeiras etapas e apenas uma fração deles acaba pertencendo à fronteirado fecho convexo. Além disso, o algorito evita comparar todos os pares de pontos.
Esse tópico será melhor detalhado na aba de "Análise Assintótica"
Fontes: Documento - 05-convexhull-3d.pdf. Manual do Utilizador - CGAL 6.1 - 3D Convex Hulls: User Manual.O Quickhull 3D geralmente segue um método incremental:
Durante a realização deste trabalho, a equipe enfrentou algumas dificuldades significativas, principalmente relacionadas à implementação em Python. Duas integrantes do grupo não possuíam conhecimento prévio da linguagem, o que dificultou a identificação e correção de problemas no código. Muitas vezes, erros de sintaxe ou de lógica passaram despercebidos, tornando necessário o esforço conjunto para localizar e compreender cada falha.
Outro desafio importante foi a visualização dos resultados, especialmente ao trabalhar com grandes conjuntos de pontos em 3D. Configurar plots interativos, ajustar cores, tamanhos e transparências para que o resultado fosse legível e representativo exigiu várias tentativas, aprendizado e paciência. Além disso, a equipe enfrentou limitações de hardware: os computadores disponíveis não conseguiam processar ou renderizar de forma eficiente centenas ou milhares de pontos, tornando necessário reduzir a quantidade de pontos em algumas experiências ou adotar técnicas de amostragem para conseguir gerar os gráficos.
Também foi necessário compreender e aplicar conceitos de geometria computacional, como fecho convexo e detecção de pontos visíveis (HPR), o que demandou tempo adicional para entender tanto a matemática envolvida quanto a implementação prática em Python.
Apesar dessas dificuldades, o trabalho permitiu que todas as integrantes adquirissem experiência prática em programação, depuração de código e visualização científica, contribuindo significativamente para o aprendizado coletivo.