Você está aqui: Cards de Ética e Legislação Profissional |
||
|
||
|
|
||
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: 627 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 |
Revit C# ::: Dicas & Truques ::: Tratamento de Erros |
Como corrigir o erro OperationCanceledException em macros e add-ins do Revit C# APIQuantidade de visualizações: 482 vezes |
|
Nesta dica mostrarei como podemos tratar a exceção OperationCanceledException em macros e plug-ins feitos para o Revit usando a Revit C# API. Esta exceção está no namespace Autodesk.Revit.Exceptions e deve ser declarada por seu nome completo, para não ser confundida com System.OperationCanceledException. O erro OperationCanceledException ocorre quando uma operação é cancelada de forma inesperada. Por exemplo, no código abaixo nós pedimos para o usuário selecionar um grupo e, em seguida, informar um ponto na área de desenho do Revit para que o grupo seja copiado e colocado no ponto indicado. Se o usuário clicar com o botão direito ou pressionar Esc, a operação é cancelada automaticamente. O tratamento da exceção OperationCanceledException nos permite reagir a isso, indicando ao usuário o melhor caminho a ser seguido. O código apresentado aqui já foi visto em dicas e truques sobre a criação e manipulação de grupos de elementos no Revit usando a Revit C# API. No entanto, no código apresentado eu não fiz o tratamento de exceções. Veja o código Revit C# API completo para o exemplo:
using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
namespace Estudos {
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.
TransactionMode.Manual)]
[Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")]
public partial class ThisApplication {
private void Module_Startup(object sender, EventArgs e) {
// vamos obter uma referência ao Document ativo
Document doc = this.ActiveUIDocument.Document;
// Vamos definir um objeto Reference para guardar
// o elemento selecionado pelo usuário
Reference ref_selecionado = null;
// pedimos para o usuário selecionar um grupo
Selection selecao = this.ActiveUIDocument.Selection;
try {
ref_selecionado = selecao.PickObject(ObjectType.Element,
"Selecione um grupo");
Element elem = doc.GetElement(ref_selecionado);
Group group = elem as Group;
// vamos pedir para o usuário selecionar um ponto na área de
// desenho do Revit
XYZ ponto = selecao.PickPoint(
"Selecione um ponto para posicionar o grupo");
// criamos uma nova transação e posicionamos a cópia do
// grupo nas coordenadas indicadas pelo usuário
Transaction transacao = new Transaction(doc);
transacao.Start("Copiar Grupo no Revit");
doc.Create.PlaceGroup(ponto, group.GroupType);
transacao.Commit();
// mostramos o resultado
TaskDialog.Show("Aviso", "O grupo foi copiado com sucesso.");
}
// Se o usuário clicar com o botão direito ou pressionar Esc
catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) {
TaskDialog.Show("Aviso", "Erro: Operação cancelada pelo usuário");
}
catch (Exception ex) {
TaskDialog.Show("Aviso", "Erro: " + ex.Message);
}
}
private void Module_Shutdown(object sender, EventArgs e) {
// para fazer alguma limpeza de memória ou algo assim
}
#region Revit Macros generated code
private void InternalStartup() {
this.Startup += new System.EventHandler(Module_Startup);
this.Shutdown += new System.EventHandler(Module_Shutdown);
}
#endregion
}
}
Se o usuário cancelar a operação, ou seja, não selecionar nenhum grupo (talvez pressionando a tecla Esc), o código reagirá e mostrará a mensagem: Erro: The user aborted the pick operation. Se, em vez de selecionar um grupo, o usuário selecionar um outro elemento, então a mensagem de erro será: Erro: Referência de objeto não definida para uma instância de um objeto. |
C# ::: Dicas & Truques ::: Strings e Caracteres |
Como transformar uma string em um array de caracteres em C# usando o método ToCharArray()Quantidade de visualizações: 13985 vezes |
|
O método ToCharArray() da classe String da linguagem C# permite retornar um array de char contendo todos os caracteres presente na string original. Podemos tirar proveito disso para manipular os caracteres individuais de uma palavra, frase ou texto. Veja um código C# completo no qual demonstramos o seu uso:
using System;
namespace Estudos {
class Program {
static void Main(string[] args) {
string frase = "Gosto de C#";
Console.WriteLine("String original: " + frase);
// obtém um array de caracteres a partir da string
char[] letras = frase.ToCharArray();
// exibe os caracteres no array
for (int i = 0; i < letras.Length; i++) {
Console.WriteLine(letras[i]);
}
Console.WriteLine("Pressione uma tecla para sair...");
Console.ReadKey();
}
}
}
Ao executar este código C# nós teremos o seguinte resultado: String original: Gosto de C# G o s t o d e C # |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como testar se um arquivo existe usando a linguagem CQuantidade de visualizações: 14411 vezes |
Muitas vezes precisamos saber se um determinado arquivo existe antes de efetuarmos alguma operação. O trecho de código abaixo mostra como você pode implementar uma função file_exists() em C que pode ser usada em seus programas. O segredo aqui é tentar abrir o arquivo passado como argumento para a função. Se o arquivo for aberto com sucesso, sabemos que ele existe e a função retorna o valor 1 (true), do contrário retorna 0 (false):
#include <stdio.h>
#include <stdlib.h>
/*
Implementação de uma função file_exists() em C. Se
o arquivo existir o valor 1 (true) será retornado. Caso
contrário a função retornará 0 (false).
*/
int file_exists(const char *filename)
{
FILE *arquivo;
if(arquivo = fopen(filename, "r"))
{
fclose(arquivo);
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
// testa se o arquivo existe
if(file_exists("c:\\testes.txt")){
printf("O arquivo existe no local especificado.\n");
}
else
printf("O arquivo NAO existe no local especificado.\n");
printf("\n\n");
system("PAUSE");
return 0;
}
|
Delphi ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Delphi para iniciantes: Como usar o laço de repetição for do DelphiQuantidade de visualizações: 22681 vezes |
|
O laço for do Delphi (linguagem Object Pascal) é usado quando queremos que um determinado bloco de instruções seja executado um determinado número de vezes. Na maioria das vezes a execução deste laço é controlada por uma variável de controle, que deve ser declarada antes de seu uso. Veja um laço for que contará de 0 até 10 (incluído):
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer; // variável de controle
begin
for i := 0 to 10 do
begin
ShowMessage(IntToStr(i)); // mostra a mensagem 10 vezes
end;
end;
Veja que o valor da variável de controle i começa em 0 e é incrementado a cada iteração até que seu valor seja igual a 10, o que faz com que a execução do laço seja interrompida. A variável de controle de um laço for deve ser do tipo ordinal (inteiro, caractere, Boolean, enumerações ou sub-faixas) e não pode ser alterada dentro do laço. Veja:
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer; // variável de controle
begin
// este laço for pretende exibir os números pares de 0 a 10
for i := 0 to 10 do
begin
ShowMessage(IntToStr(i));
i := i + 2; // vamos ter problemas aqui
end;
end;
Ao tentarmos compilar este código teremos o seguinte erro: [DCC Error] Unit1.pas(107): E2081 Assignment to FOR-Loop variable 'i' Este erro nos informa que não é possível atribuir valor a uma variável de controle dentro do laço for. Se quisermos que o laço "conte" de trás para frente, podemos substituir a palavra-chave to por downto. Veja:
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer; // variável de controle
begin
// este laço for conta de 10 até 0
for i := 10 downto 0 do
begin
ShowMessage(IntToStr(i));
end;
end;
Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






