# VentoApp: Plataforma para Cálculo de Forças Devidas ao Vento (NBR 6123:2023) ## Plano Técnico de Implantação e Arquitetura de Software Este documento serve como especificação técnica detalhada para o desenvolvimento do **VentoApp**. Ele foi estruturado para guiar engenheiros de software e Modelos de Linguagem (LLMs) na codificação completa da plataforma, garantindo rigor normativo, responsividade multiplataforma (mobile/desktop), interatividade 3D orbital e precisão de cálculo. --- ## 1. Stack Tecnológica Recomendada Para atender à exigência de rodar em dispositivos móveis e desktops com alto desempenho gráfico (3D) e capacidade offline, a arquitetura recomendada é baseada em web standards modernos: * **Frontend Framework:** React.js ou Vue.js (com TypeScript para garantir tipagem estática e evitar bugs matemáticos). * **Build Tool:** Vite (rápido e otimizado). * **Engine 3D:** Three.js com React Three Fiber (R3F) para controle declarativo do ambiente 3D, ou BabylonJS. * **Estilização (UI/UX):** Vanilla CSS ou Tailwind CSS, utilizando conceitos de *glassmorphism*, temas Dark/Light nativos e transições suaves de micro-interações. * **Gerenciador de Estado:** Redux Toolkit ou Zustand (Zustand é recomendado pela simplicidade em aplicações com intensa reatividade gráfica). * **Banco de Dados Local (Offline):** IndexedDB (via biblioteca Wrapper `Dexie.js`) para persistência de projetos no navegador do usuário sem necessidade de conexão imediata com o backend. * **Geração de PDF:** `react-pdf` ou `jspdf` combinada com `html2canvas` para renderização de relatórios altamente diagramados diretamente no cliente. * **Módulos de Teste:** Jest ou Vitest (essencial para validar as rotinas matemáticas de forma rigorosa). --- ## 2. Arquitetura de Software (Engine de Cálculo) A Engine de Cálculo deve ser isolada da interface do usuário. Recomenda-se utilizar o padrão de projeto **Strategy** para desacoplar as regras de carregamento de vento de acordo com o tipo de estrutura geométrica. ### Diagrama Conceitual de Classes/Módulos: ``` +--------------------------------+ | Configuração Global | | (V0, S1, S2, S3, Categoria, | | Classe, Rugosidade, z) | +--------------------------------+ | v +--------------------------------+ | Kernel de Pressão (q) | | Calcula Vk e Dinâmica q | +--------------------------------+ | +---------------------+---------------------+ | | | v v v +-----------------+ +-----------------+ +-----------------+ | Calculadora | | Calculadora | | Calculadora | | Galpao | | TorreTrel | | SiloCilindro | | (Strategy A) | | (Strategy B) | | (Strategy C) | +-----------------+ +-----------------+ +-----------------+ | | | +---------------------+---------------------+ | v +--------------------------------+ | Conversor de Cargas Globais | | e Coeficientes Locais | +--------------------------------+ ``` --- ## 3. Lógica e Modelagem Matemática (NBR 6123) O Kernel do sistema deve programar rigorosamente as seguintes equações físicas: ### 3.1. Pressão Dinâmica Básica 1. **Velocidade Característica ($V_k$):** $$V_k = V_0 \cdot S_1 \cdot S_2 \cdot S_3$$ *Onde:* * $V_0$: Velocidade básica do vento (obtida do banco de dados de isopletas/municípios do Brasil ou inserida manualmente pelo usuário). * $S_1$: Fator topográfico (Fórmulas para taludes/encostas e vales conforme Seção 5.2 da norma). * $S_2$: Fator de rugosidade e dimensões (Equação exponencial: $S_2 = b \cdot F_r \cdot (z/10)^p$ onde os parâmetros $b$, $F_r$ e $p$ dependem da categoria de rugosidade (I a V) e da classe da estrutura (A, B, C) conforme Tabela 2 da norma). * $S_3$: Fator estatístico (Valores discretos definidos conforme o grupo de ocupação da estrutura, variando de $0,83$ a $1,10$ conforme Tabela 3). 2. **Pressão Dinâmica ($q$):** $$q = 0,613 \cdot V_k^2 \quad (\text{em } N/m^2 \text{ ou } Pa)$$ ### 3.2. Mecanismo de Interpolação de Tabelas (NBR 6123) Muitas tabelas da norma fornecem coeficientes de pressão externa ($C_{pe}$) discretos para relações geométricas específicas (ex: $h/b = 0.5, 1.0, 2.0$ e $a/b = 1.0, 1.5, 2.0, 4.0$). * A Engine de Cálculo deve implementar uma função de **Interpolação Bilinear** para mapear dados geométricos exatos inseridos pelo usuário. * *Fórmula de Interpolação Bilinear:* Dados quatro pontos conhecidos $Q_{11}(x_1, y_1)$, $Q_{12}(x_1, y_2)$, $Q_{21}(x_2, y_1)$ e $Q_{22}(x_2, y_2)$, a interpolação para o ponto $(x, y)$ é dada por: $$f(x, y) \approx \frac{(x_2 - x)(y_2 - y)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{11}) + \frac{(x - x_1)(y_2 - y)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{21}) + \frac{(x_2 - x)(y - y_1)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{12}) + \frac{(x - x_1)(y - y_1)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{22})$$ --- ## 4. Estrutura dos Módulos Geométricos O app deve comportar o cadastro das seguintes estruturas físicas de forma independente: ### 4.1. Módulo Galpão Retangular (Edificações Correntes) * **Entradas de dados necessárias:** * Comprimento ($a$), Largura ($b$), Pé-direito lateral ($h$), Inclinação do telhado ($\theta$ ou %). * Espaçamento entre pórticos principais (para linearização de cargas em pilares). * Espaçamento entre terças (para linearização de cargas no telhado). * Permeabilidade das paredes (área de abertura em cada uma das 4 fachadas e seleção de abertura dominante ativa para o cálculo de $C_{pi}$). * **Lógica interna:** * Mapeia as zonas de parede (A, B, C, D) e cobertura (E, F, G, H, I, J) conforme as Tabelas 4 e 5 da NBR 6123. * Calcula a pressão interna combinada $C_{pi}$ (limites normativos $+0,9$ a $-0,9$, dependendo das aberturas). * Executa a combinação de cargas: $p = (C_{pe} - C_{pi}) \cdot q$. * Saída: Vetores de pressão local aplicados em cada região. ### 4.2. Módulo Torres de Linhas de Transmissão e Telecomunicações * **Entradas de dados necessárias:** * Altura da torre ($H$), largura da base ($B_{base}$), largura do topo ($B_{topo}$). * Número de tramos (módulos verticais). * Tipo de seção (Triangular ou Quadrada). * Perfis constitutivos (Cantoneiras de abas iguais ou Perfis Tubulares). * Taxa de solidez da treliça ($\phi$). * **Lógica interna:** * Determina o coeficiente de arrasto ($C_a$) para vento perpendicular e vento diagonal conforme Tabela 18 da norma. * Aplica fatores de blindagem caso haja painéis paralelos. * Calcula a força global por tramo usando a fórmula de força de arrasto: $$F = C_a \cdot q \cdot A_e$$ *(Onde $A_e$ é a área efetiva projetada dos membros da torre).* ### 4.3. Módulo Silos Cilíndricos e Reservatórios * **Entradas de dados necessárias:** * Diâmetro ($D$), Altura do cilindro ($H$), Tipo de cobertura (plana, cônica, calota esférica). * **Lógica interna:** * Calcula os coeficientes de pressão externa como função do ângulo de incidência do vento ($\alpha$, variando de $0^\circ$ a $180^\circ$) conforme a Figura 16 da norma. * Aplica fatores de correção para relação $H/D$. --- ## 5. Visualização 3D Orbital e Experiência do Usuário (UI/UX) A interface deve ser desenhada com o fluxo em etapas ("Wizard") e com o visualizador 3D acoplado: ### 5.1. O Visualizador 3D (Implementação WebGL) * Utilizar **React Three Fiber** para renderizar um modelo paramétrico da estrutura selecionada. * O modelo é gerado proceduralmente com base nos inputs de largura, comprimento, altura e inclinação. * **Texturas Dinâmicas (Mapas de Pressão / Vertex Coloring):** * Mapear as coordenadas 3D de cada polígono do modelo para a sua respectiva zona de pressão. * Pintar os polígonos usando um gradiente de cores: * **Vermelho/Laranja:** Altas pressões positivas (esforço empurrando para dentro da estrutura). * **Azul/Roxo:** Altas pressões negativas (sucção/arrancamento). * **Verde/Cinza:** Zonas neutras ou de baixa pressão. * Mostrar setas indicativas de força tridimensionais (vetores normais às superfícies) saindo ou entrando nas faces da estrutura de acordo com a hipótese de vento selecionada. ### 5.2. Interatividade no Modelo 3D * **Controle Orbital:** Rotação livre com botão esquerdo do mouse (desktop) ou arrastar com um dedo (mobile); Pan com botão direito/dois dedos; Zoom com scroll/pinch. * **Raycasting para Inspeção:** Ao clicar (ou tocar) em um polígono do modelo 3D, o sistema deve detectar a zona colidida e disparar uma gaveta de informações (Drawer lateral) mostrando o memorial de cálculo daquela face da estrutura. --- ## 6. Fluxo de Geração de Relatórios e Exportação de Dados O aplicativo deve gerar memórias de cálculo profissionais em formato PDF e permitir a integração com outros softwares. ### 6.1. Memorial em PDF Ilustrado (Didático) O PDF exportado deve seguir uma estrutura moderna com grid limpo: * **Capa:** Nome do projeto, dados do cliente, engenheiro responsável, ART/CREA, data e localização geográfica. * **Fatores Globais:** Tabela com valores e justificativas adotadas para $V_0, S_1, S_2, S_3$ e o valor resultante da pressão dinâmica de projeto ($q$). * **Modelagem 3D Estática:** Captura de tela gerada automaticamente pelo canvas do WebGL mostrando o mapa de calor de pressões para as principais hipóteses de vento. * **Tabelas de Carga de Projeto:** Planilhas detalhadas das pressões em cada parede e vertente de telhado para vento a $0^\circ$ e $90^\circ$, combinadas com sobrepressão e sucção interna. * **Equações Passo a Passo:** Renderização de fórmulas matemáticas formatadas em LaTeX (com substituição numérica passo a passo) para fins de auditoria acadêmica. ### 6.2. Exportação de Dados para Softwares Estruturais * **Ftool Integration:** Exportação de um arquivo formato texto com extensão proprietária compatível com o Ftool, onde o pórtico representativo do galpão já vem desenhado com todas as cargas lineares distribuídas aplicadas sobre as barras. * **Formatos Abertos:** Exportação de dados das cargas em formato **CSV/Excel** ou arquivo **JSON** estruturado para que o engenheiro possa importar em sistemas internos ou outros softwares de cálculo estrutural tridimensional. --- ## 7. Estratégia de Testes e Validação de Confiabilidade Para garantir que o aplicativo seja auditável e 100% confiável, a seguinte rotina de testes deve ser implementada no processo de CI/CD (Integração Contínua): * **Testes de Unidade Matemáticos (Vitest/Jest):** * Cadastrar uma suite de testes unitários baseados nos exemplos resolvidos de livros de referência (ex: *"O Vento na Engenharia Estrutural"*, de J. Blessmann, ou manuais acadêmicos de vento em galpões). * O teste insere dimensões idênticas às dos exemplos e valida, casa decimal por casa decimal, se os coeficientes e pressões finais obtidos pela engine do app batem exatamente com as referências bibliográficas. * Qualquer alteração no código que altere os resultados de cálculo gera falha no build, impedindo a publicação de versões com erros de engenharia.