Mensagens

C# - (Im)precisão de cálculos 2ª parte

Imagem
C# - (Im)precisão de cálculos Como em todas as linguagens, fazer cálculos é um compromisso entre rapidez e precisão. Na sequência do posta anterior, em que o algoritmo acumulava um erro próprio da precisão de cálculo, decidi mudar o algoritmo. A diferença de resultados é enorme como se esperava. Moral da história, a arquitectura do programa tem influência, assim como a comprovação prévia e controlo de qualidade do resultado. Aqui o print dos resultados correctos tirado do Autocad. E a agora a nova listagem: Pode-se ver que a interacção 20 corresponde aos 2,5% assinalados a magenta no print de CAD. Pode-se ver que a interacção 45 corresponde ao ponto final a 5% assinalado no print de CAD a azul. Abaixo só uma amostra da alteração do algoritmo. Cumprimentos

C# - (Im)precisão de cálculos

Imagem
C# - (Im)precisão de cálculos Como em todas as linguagens, fazer cálculos é um compromisso entre rapidez e precisão. Num programa em que estou a trabalhar, os cálculos das coordenadas finais de uma semi-recta, não dão certo com o que se obtém do Autocad. O Autocad é uma calculadora de referência para estas comprovações. O erro que se verifica tem a ver com a questão de os números de ponto ou vírgula flutuante serem uma aproximação e não um resultado preciso. Ao usar estes números para operações, ainda por cima encadeadas, o erro propaga-se. Na imagem seguinte, nas primeiras linhas, os ângulos calculados pelo programa para a inclinação de 5% (no print escreve-se 0.005 mas aí não deveria ter % à frente), tenho depois o valor calculado por uma calculadora. Verifica-se que o valor é igual/aproximado. 0.00499958 radianos mas ao detalhe já não são iguais. O programa pega numa inclinação incial, e vai calculando as coordenadas finais com a elevação da inclinação da recta. Na última linha pode...

C# - Intersecção duas rectas no plano

Imagem
C# - Intersecção duas rectas no plano No pacote de algoritmos necessários a programas de engenharia, está o cálculo de coordenadas de intersecção entre duas rectas. No dia a dia de um cálculo por computador, um programa de traçado, um programa de CAD ... está o cálculo das coordenadas da intersecção entre duas rectas. Geralmente as rectas são definidas por dois pontos, portanto são segmentos de recta. Podem usar-se para determinar intersecções entre dois alinhamentos em planta ou alçado/rasante, intersecções entre uma secção transversal e uma superfície... O algoritmo de cálculo é bastante divulgado em todas as linguagens, cabendo ao programador desenvolver mais ou menos estratégias para despistar erros e comunicar os resultados. Já desde a programação com a FX-880p fazia este tipo de cálculos, na altura para Topografia. Aqui um resultado de output na linha de comandos. Este programa está a ler da pasta corrente, um ficheiro de texto com os dados, assim o utilizador evita estar a tecla...

C# - Valores Máximos Mínimos para números de ponto flutuante e cadeias interpoladas

Imagem
C# - Valores Máximos Mínimos para números de ponto flutuante e cadeias interpoladas Conhecer os tipos de dados que podemos usar é essencial numa linguagem de programação. O CSharp sendo uma linguagem "fortemente tipada" e tendo vários tipos de dados, tem potencialidades e complexidades próprias. Por exemplo para os normais cálculos de engenharia podemos pensar em usar grandes números, mas quais... em CSharp podemos ter FLOAT DOULE e DECIMAL. Cegamente pode-se escolher Number, como em Javascript que dá para quase tudo, mas por razões de eficiência e memória podemos adaptar melhor a nossa escolha. FLOAT e DOUBLE são armazenados em base2, enquanto o DECIMAL é armazenado em BASE 10, isto leva a que os dois primeiros sempre produzam aproximações do resultado (por defeito são DOUBLE). Por exemplo: 3.0000001 x 2.50 = ? Em Float: 7.5 Em Decimal: 7.500000250 Aqui um print dos valores máximos e mínimos de cada um destes tipos de números. E uma interpolação de cadeias de strings...para ...

C# - Autocad apagar Textos

Imagem
C# - Autocad apagar Textos Uma funcionalidade comum é apagar entidades de CAD, neste caso apagar textos de acordo com o conteúdo. Na sequência do exemplo anterior, em que substituía textos, neste caso apago textos (dos dois tipos de textos) se estes coincidirem com o texto de referência. Isto também se pode fazer nativamente no CAD, serve para ir incrementando as opções e futuramente montar várias destas funcionalidades num ou vários plugins. Aqui o texto(s) de base: O programa apaga o "Apaga textos!": E agora escreve o número de textos apagados no editor. No exemplo acima escreveu "4" porque havia um erro no programa, já corrigido. Para se poder apagar temos de abrir a base de dados do CAD em modo escrita: Aqui as linha que regeneram, actualizam, o desenho, e que escrevem no editor: Cumprimentos

C# - Autocad Distancia dois pontos

Imagem
C# - Autocad Distancia dois pontos Este plugin tem a funcionalidade de calcular a distância entre dois pontos dados, nada de novo mas... Passo a passo se vai juntando uma série de funcionalidades para construir algo mais grande e completo. Esta faz o mesmo que o "dist" do Autocad, mas o resultado é mostrado numa janela, depois faço para mostrar na barra inferior. Pica-se em dois pontos, calcula a distância plana, e a diferença de cotas. Este bloco de código é válido para todas as linguagens de programação, com a respectiva adaptação... O output em janela foi formatado para que apareçam 6 decimais.

C# - Autocad substituir textos

Imagem
C# - Autocad substituir textos Uma das operações interessantes num plugin para CAD é a substituição de textos. A funcionalidade de substituir textos, é fácil de usar no Autocad, porém a capacidade de manipular esta funcionalidade de modo programático aumenta o seu potencial, tal como com todas as outras funcionalidades. No exemplo de hoje, consegui substituir o texto, quer de um TEXT quer de um MTEXT, estes dois são diferentes, têm características diferentes e são manipulados de forma diferente na programação. Abaixo o par de textos originais: O Verde é um texto simples, e o laranja um texto multi-linha. A substituição resulta no seguinte: Uma amostra do código: E uma comparação das propriedades para os dois tipos de texto: Cumprimentos