AutoCAD .NET API C# ::: Dicas & Truques ::: Polyline - Polilinha |
Como selecionar uma polilinha no AutoCAD e mostrar as coordenadas de suas vértices usando a AutoCAD .NET C# APIQuantidade de visualizações: 462 vezes |
Em várias situações nós precisamos efetuar cálculos usando os vértices de uma polilinha. Nesta dica eu mostro como podemos pedir para o usuário selecionar uma polilinha na área de desenho do AutoCAD e mostrar as coordenadas x e y de cada um dos vértices. No código abaixo eu trato duas formas de polilinhas no AutoCAD: a polilinha 2D Polyline e a polilinha 3D, representada pelo objeto Polyline3d. Note que as formas de se extrair os vértices desses dois objetos são completamente diferentes. Se a polilinha for 2D, seus vértices são extraído usando-se a função GetPoint2dAt(), que retorna um objeto Point2d. Se a polilinha for 3D, ela será representada por um objeto da classe Polyline3d, e seus vértices são retornados como objetos PolylineVertex3d a partir de uma chamada à função GetObject() da classe Transaction. Veja o código AutoCAD .NET C# API completo para o exemplo: using System; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; [assembly: CommandClass(typeof(PluginEstudos.Class1))] namespace PluginEstudos { public class Class1 { [CommandMethod("estudos")] public void Estudos() { // vamos obter o documento atual Document doc = Application.DocumentManager.MdiActiveDocument; // vamos obter a base de dados Database db = doc.Database; // vamos pedir para o usuário selecionar uma polilinha PromptEntityResult resultado = doc.Editor.GetEntity( "Selecione uma polilinha: "); // a seleção foi feita com sucesso if (resultado.Status != PromptStatus.OK) { Application.ShowAlertDialog("Nenhum elemento selecionado."); return; } // iniciamos uma transação using (Transaction trans = db.TransactionManager.StartTransaction()) { // obtemos a polilinha selecionada DBObject objeto = trans.GetObject(resultado.ObjectId, OpenMode.ForRead); // vamos testar se a polilinha é do tipo leve ou otimizada Polyline polilinha2d = objeto as Polyline; if (polilinha2d != null) { // vamos percorrer todos os vértices, um de cada vez int numero_vertices = polilinha2d.NumberOfVertices; for (int i = 0; i < numero_vertices; i++) { // vamos obter um objeto Point2d ou Point3d Point2d ponto = polilinha2d.GetPoint2dAt(i); // e escrevemos na janela de comandos doc.Editor.WriteMessage("\nX = " + ponto.X.ToString("0.00") + "; Y = " + ponto.Y.ToString("0.00")); } } // é uma polilinha do tipo pesada, ou heavy else { Polyline3d polilinha3d = objeto as Polyline3d; if (polilinha3d != null) { // percorremos cada um dos vértices foreach (ObjectId id_vertice in polilinha3d) { PolylineVertex3d vertice3d = (PolylineVertex3d)trans.GetObject( id_vertice, OpenMode.ForRead); // e escrevemos na janela de comandos doc.Editor.WriteMessage("\nX = " + vertice3d.Position.X.ToString("0.00") + "; Y = " + vertice3d.Position.Y.ToString("0.00")); } } } // fechamos a transação trans.Commit(); } } } } Ao executar este código AutoCAD .NET C# API nós teremos o seguinte resultado: Command: Selecione uma polilinha: X = 168.91; Y = 159.91 X = 415.17; Y = 126.24 X = 317.08; Y = 24.18 X = 80.53; Y = 104.29 |
Delphi ::: Classes, Controles e Componentes ::: TRegistry (Registro do Windows) |
Como criar chaves no registro do Windows usando o método CreateKey() da classe TRegistry do DelphiQuantidade de visualizações: 15161 vezes |
Em algumas situações gostariámos de criar novas chaves e/ou sub-chaves no registro do Windows. Isso pode ser feito por meio do método CreateKey() da classe TRegistry. Este método recebe uma string especificando o nome da chave a ser criada e retorna um valor Boolean indicando se a chave foi criada com sucesso. Veja um trecho de código no qual criamos uma chave chamada "Arquivo de Códigos" dentro da chave raiz HKEY_CURRENT_USER: procedure TForm3.Button4Click(Sender: TObject); var chave: String; reg: TRegistry; begin // uses Registry // vamos definir o nome da chave a ser criada chave := 'Arquivo de Códigos'; // vamos criar uma instância da classe TRegistry reg := TRegistry.Create; // a chave raiz padrão é HKEY_CURRENT_USER mas, por via das dúvidas // vamos reafirmar isso reg.RootKey := HKEY_CURRENT_USER; // vamos criar a chave informada if reg.CreateKey(chave) then begin ShowMessage('A chave foi criada com sucesso.'); end else begin ShowMessage('Não foi possível criar a chave informada.'); end; // vamos liberar o registro reg.Free; end; Alguns aplicativos, por exemplo os da Adobe, Macromedia, Microsoft, etc, guardar informações relacionadas aos seus aplicativos na sub-chave SOFTWARE dentro da chave HKEY_LOCAL_MACHINE. Assim, vamos criar uma chave para um aplicativo fictício. Vamos chamar nossa chave de "Simulador Nota Fiscal Eletrônica 1.0". Note que, se esta chave já existir no registro nada acontecerá: procedure TForm3.Button4Click(Sender: TObject); var chave: String; reg: TRegistry; begin // uses Registry // vamos definir o nome da chave a ser criada chave := 'Simulador Nota Fiscal Eletrônica 1.0'; // vamos criar uma instância da classe TRegistry reg := TRegistry.Create; // vamos criar uma chave dentro de HKEY_LOCAL_MACHINE\SOFTWARE reg.RootKey := HKEY_LOCAL_MACHINE; // vamos criar a chave informada if reg.CreateKey('\SOFTWARE\' + chave) then begin ShowMessage('A chave foi criada com sucesso.'); end else begin ShowMessage('Não foi possível criar a chave informada.'); end; // vamos liberar o registro reg.Free; end; Execute este código e logo em seguida abra uma janela de terminal e digite regedit.exe. vá na seção HKEY_LOCAL_MACHINE\SOFTWARE e veja se a chave "Simulador Nota Fiscal Eletrônica 1.0" foi realmente criada. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Python ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como converter graus em radianos em Python - Trigonometria em PythonQuantidade de visualizações: 3111 vezes |
Quando estamos trabalhando com trigonometria na linguagem Python, é importante ficarmos atentos ao fato de que todos os métodos e funções trigonométricas em Python recebem seus argumentos em radianos, em vez de graus. Nesta dica veremos como converter graus em radianos (sem a chatice de ficar relembrando regra de três). Veja a fórmula abaixo: \[Radianos = Graus \times \frac{\pi}{180}\] Agora veja como esta fórmula pode ser escrita em código Python: import math # função principal do programa def main(): # valor em graus graus = 30 # obtém o valor em radianos radianos = graus * (math.pi / 180) # mostra o resultado print(graus, "graus convertidos para", "radianos é", radianos) if __name__== "__main__": main() Ao executarmos este código Python nós teremos o seguinte resultado: 30 graus convertidos para radianos é 0.5235987755982988 Por fim, saiba que a linguagem Python nos oferece o método math.radians() que nos permite converter ângulos em graus para radianos. Meu propósito nesta dica foi mostrar a você como o cálculo de conversão pode ser escrito em Python. Em outras dicas dessa seção abordaremos o método math.radians(). |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como usar o método charAt() da classe String para obter o caractere em uma determinada posição de uma frase ou texto - RevisadoQuantidade de visualizações: 400 vezes |
Em várias situações, principalmente quando estamos trabalhando com palavras e textos em Java, surge a necessidade de acessarmos as letras individuais de strings. Para isso podemos usar o método charAt() da classe String. Este método recebe um inteiro indicando o índice do caractere na String. Lembre-se de que os índices começam sempre em 0 em Java. O retorno do método charAt() é um char. Veja um exemplo: public class Estudos{ public static void main(String[] args){ String frase = "Programar em Java é muito bom"; // Lembre-se: o indice começa em 0 char letra = frase.charAt(2); System.out.println("O caractere no índice 2 é: " + letra); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: O caractere no índice 2 é: o Esta dica foi revisada e testada no Java 8. |
Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular vetor unitário em Java - Java para Física e EngenhariaQuantidade de visualizações: 533 vezes |
Um vetor unitário ou versor num espaço vetorial normado é um vetor (mais comumente um vetor espacial) cujo comprimento ou magnitude é 1. Em geral um vetor unitário é representado por um "circunflexo", assim: __$\hat{i}__$. O vetor normalizado __$\hat{u}__$ de um vetor não zero __$\vec{u}__$ é o vetor unitário codirecional com __$\vec{u}__$. O termo vetor normalizado é algumas vezes utilizado simplesmente como sinônimo para vetor unitário. Dessa forma, o vetor unitário de um vetor __$\vec{u}__$ possui a mesma direção e sentido, mas magnitude 1. Por magnitude entendemos o módulo, a norma ou comprimento do vetor. Então, vejamos a fórmula para a obtenção do vetor unitário: \[\hat{u} = \dfrac{\vec{v}}{\left|\vec{v}\right|}\] Note que nós temos que dividir as componentes do vetor pelo seu módulo de forma a obter o seu vetor unitário. Por essa razão o vetor nulo não possui vetor unitário, pois o seu módulo é zero, e, como sabemos, uma divisão por zero não é possível. Veja agora o código Java que pede as coordenadas x e y de um vetor 2D ou R2 e retorna o seu vetor unitário: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos ler os valores x e y System.out.print("Informe o valor de x: "); double x = Double.parseDouble(entrada.nextLine()); System.out.print("Informe o valor de y: "); double y = Double.parseDouble(entrada.nextLine()); // o primeiro passo é calcular a norma do vetor double norma = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); // agora obtemos as componentes x e y do vetor unitário double u_x = x / norma; double u_y = y / norma; // mostra o resultado System.out.println("O vetor unitário é: (x = " + u_x + "; y = " + u_y); } } Ao executar este código Java nós teremos o seguinte resultado: Informe o valor de x: -4 Informe o valor de y: 6 O vetor unitário é: (x = -0.5547001962252291; y = 0.8320502943378437 Veja agora uma modificação deste código para retornarmos o vetor unitário de um vetor 3D ou R3, ou seja, um vetor no espaço: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos ler os valores x, y e z System.out.print("Informe o valor de x: "); double x = Double.parseDouble(entrada.nextLine()); System.out.print("Informe o valor de y: "); double y = Double.parseDouble(entrada.nextLine()); System.out.print("Informe o valor de z: "); double z = Double.parseDouble(entrada.nextLine()); // o primeiro passo é calcular a norma do vetor double norma = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2)); // agora obtemos as componentes x, y e z do vetor unitário double u_x = x / norma; double u_y = y / norma; double u_z = z / norma; // mostra o resultado System.out.println("O vetor unitário é: (x = " + u_x + "; y = " + u_y + "; z = " + u_z); } } Ao executarmos este novo código nós teremos o seguinte resultado: Informe o valor de x: 3 Informe o valor de y: 7 Informe o valor de z: 5 O vetor unitário é: (x = 0.329292779969071; y = 0.7683498199278324; z = 0.5488212999484517 |
Java ::: Dicas & Truques ::: Mouse e Teclado |
Computação Gráfica em Java - Código completo Java Swing para um programa de desenho usando eventos do mouseQuantidade de visualizações: 31511 vezes |
Nesta dica apresento um código completo para um programa de desenho usando os eventos os mouse, feito em Java Swing. Veja que o único evento que tivemos que implementar foi mouseDragged, que é disparado quando o usuário arrasta o mouse com o botão direito ou esquerdo pressionado. Observe também a criação de uma classe JPanel personalizada que servirá como painel de desenho. Fique atento à forma como subscrevemos o método paintComponent() na classe PainelDesenho para obtermos o objeto Graphics que nos permitirá desenhar na superfície do JPanel. O resultado é exibido na imagem abaixo: ![]() E aqui está o código completo para o exemplo: package arquivodecodigos; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Estudos extends JFrame{ public Estudos(){ super("Eventos do Mouse e Teclado"); Container c = getContentPane(); PainelDesenho painel = new PainelDesenho(); c.add(painel, BorderLayout.CENTER); c.add(new JLabel("Arraste o mouse para desenhar..." ), BorderLayout.SOUTH ); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class PainelDesenho extends JPanel{ private int quantPontos = 0; private Point pontos[] = new Point[10000]; public PainelDesenho(){ this.setBackground(Color.WHITE); this.addMouseMotionListener( new MouseMotionAdapter(){ public void mouseDragged(MouseEvent e){ if(quantPontos < pontos.length){ pontos[quantPontos] = e.getPoint(); quantPontos++; repaint(); } } } ); } @Override public void paintComponent(Graphics g){ super.paintComponent(g); for(int i = 0 ; i < quantPontos; i++) g.fillOval(pontos[i].x, pontos[i].y, 4, 4); } } |
Java ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Java para iniciantes - Como usar o laço do-while da linguagem JavaQuantidade de visualizações: 52956 vezes |
O laço do-while é uma variação do laço while. A diferença é que, no laço do-while a condição de continuidade é testada após a execução do bloco de códigos desejado. Isso nos faz crer que este laço é executado no mínimo uma vez. Veja sua sintáxe:do{ // bloco de instruções }while(condição); Se a condição testada for verdadeira, o laço continua sua execução. Do contrário a execução do programa segue a partir do ponto onde o laço se encontra. Veja um exemplo: import javax.swing.JOptionPane; public class Estudos{ public static void main(String[] args) { int valor; int soma = 0; // Lê continuamente até o usuário informar 0 do{ // efetua a próxima leitura String str = JOptionPane.showInputDialog(null, "Informe um valor inteiro:\n(ou 0 para sair)", "Estudos", JOptionPane.QUESTION_MESSAGE); valor = Integer.parseInt(str); soma += valor; }while(valor != 0); JOptionPane.showMessageDialog(null, "A soma é: " + soma, "Estudos", JOptionPane.INFORMATION_MESSAGE); } } Use o laço do-while quando você tiver instruções dentro do laço que precisem ser executadas no mínimo uma vez. |
PHP ::: Fundamentos da Linguagem ::: Tipos de Dados |
PHP para iniciantes - Como usar o tipo de dados float do PHPQuantidade de visualizações: 12640 vezes |
Números de ponto-flutuante, ou float (também conhecido com double ou real) representam números com casas decimais. Assim como o tipo integer, a faixa de limite deste tipo depende da arquitetura da máquina na qual o PHP está sendo executado. A faixa de números de ponto-flutuante em PHP equivale à faixa do tipo de dados double de seu compilador C. Geralmente esta faixa está entre 1.7E-308 e 1.7E+308 com 15 dígitos de precisão. Se precisarmos de uma precisão ainda maior, podemos usar as extensões BC e GMP. O PHP reconhece números de ponto-flutuante escritos de duas formas diferentes. Eis a que usamos mais comumente: 3.14 0.017 -7.1 E a forma usando notação científica: 0.314E1 // 0.314*101, ou 3.14 17.0E-3 // 17.0*10-3, ou 0.017 Valores de ponto-flutuante são apenas representações aproximadas de números. Por exemplo, em muitos sistemas, 3,5 é na verdade representado como 3,4999999999. Isso quer dizer que devemos ter cuidado ao comparar valores de ponto-flutuante usando ==. O mais correto é comparar usando várias casas decimais: if(int($a * 1000) == int($b * 1000)){ // comparação baseada em três casas decimais } Se quisermos verificar se uma variável é do tipo float, podemos usar as funções is_float() ou is_real(). Veja: <? $valor = 0.6; if(is_float($valor)){ echo 'A variável $valor é do tipo float'; } ?> |
C ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como testar múltiplas condições usando a construção if...else if...else da linguagem CQuantidade de visualizações: 12106 vezes |
Em algumas situações precisamos usar a estrutura condicional if...else (se...senão) da linguagem C para testarmos múltiplas condições. Para estes casos, o C nos permite combinar if...else if...else várias vezes. Veja o trecho de código a seguir: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ int valor = 20; if(valor == 15){ printf("O valor a igual a 15"); } else if(valor > 15){ printf("O valor e maior que 15"); } else{ printf("O valor e menor que 15"); } printf("\n\n"); system("PAUSE"); return 0; } Ao executarmos este código nós teremos o seguinte resultado: O valor é maior que 15 |
Portugol ::: Dicas & Truques ::: Cadeias e Caracteres |
Como testar se uma sub-cadeia está contida em uma cadeia de caracteres em Portugol usando a função posicao_texto()Quantidade de visualizações: 437 vezes |
Nesta dica mostrarei como podemos verificar se uma substring está contida em uma string em Portugol. Para isso nós vamos usar a função posicao_texto() da biblioteca Texto. A função posicao_texto() pede a sub-cadeia a ser pesquisada, a cadeia na qual a pesquisa será feita e o índice do primeiro caractere a partir do qual a sub-string será pesquisada. Se a substring for encontrada, a função retorna a posição do primeiro caractere. Caso contrário o valor -1 será retornado. Veja o código completo para um programa Portugol no qual testamos se uma palavra está contida em uma frase: programa { // vamos importar a biblioteca Texto inclua biblioteca Texto --> tx funcao inicio() { // vamos criar uma frase cadeia frase = "Gosto de programar em Portugol" // vamos criar uma sub-cadeia cadeia palavra = "Portugol" // vamos verificar se a sub-cadeia está contida na cadeia se (tx.posicao_texto(palavra, frase, 0) != -1) { escreva("A substring está contida na string") } senao { escreva("A substring não está contida na string") } } } Ao executar este código Portugol nós teremos o seguinte resultado: A substring está contida na string. |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |