Pergunta

Atualmente estou elaborando um programa que envolverá algumas física (nada muito extravagante, algumas bolas de bater para o outro)

O que é mais exata do tipo de dados que pode utilizar para representar a posição (sem um sentimento de saltos discretos) em c#?

Também, qual é a menor quantidade de tempo que pode ficar entre t e t+1?Um carrapato?

EDITAR:Esclarecimento:O que é a menor unidade de tempo em C#? [TimeSpan].Tick?

Foi útil?

Solução

Em .Net decimal vai ser o mais preciso do tipo de dados que você poderia usar para a posição.Gostaria apenas de escrever uma classe para a posição de:

public class Position
{
    decimal x;
    decimal y;
    decimal z;
}

Quanto tempo, o processador não pode dar-lhe qualquer coisa menor do que um carrapato.

Soa como um projeto divertido!Boa sorte!

Outras dicas

O tipo de dados Decimal, embora preciso, pode não ser a melhor escolha dependendo do que você quer fazer.Geralmente Direct3D e GPUs utilizar 32-bit flutua, e vetores de 3 (total de 96 bits) para representar uma posição em x,y,z.

Este, geralmente, dão mais do que suficiente precisão, a menos que você precisa para misturar enorme escala (planetas) e nível microscópico (basquete) no mesmo "mundo".

Razões para a não utilização de casas Decimais pode ser de tamanho (4 x maior), velocidade (ordens de magnitude mais lento) e não trigonométricas funções disponíveis (AFAIK).

No Windows, o QueryPerformanceCounter Função de API vai dar a você a mais alta resolução de relógio, e QueryPerformanceFrequency a freqüência do contador.Eu acredito que o Cronômetro descrito em outros comentários molda esta em um .net classe.

A menos que você está fazendo foguete-ciência, um decimal é WAAAY um exagero.E apesar de poder dar-lhe posições mais precisas, que não será, necessariamente, dar-lhe mais precisos (por exemplo) velocidades, uma vez que é um ponto fixo de tipo de dados e, portanto, está limitado a um intervalo menor do que um float ou double.

O uso de carros alegóricos, mas deixe a porta aberta para mover-se até o dobro em caso de precisão acaba por ser um problema.

Eu iria usar um Vetor do tipo de dados.Assim como na Física, quando você quiser um modelo de objetos de movimento, você pode usar vetores.Usar um Vector2 ou Vector3 a turma do XNA quadro ou rolo de seu própria estrutura Vector3 para representar a posição.Vector2 é para 2D e Vector3 é 3D.

TimeSpan estrutura ou a Cronómetro classe serão seus melhores opções para o cálculo de variação no tempo.Se eu tivesse que recomendar, eu iria usar o Cronômetro.

Eu acho que você deve ser capaz de fugir com o tipo de dados Decimal, sem problema.Ele tem mais precisão disponível.No entanto, o tipo de dados duplo deve ser apenas a de multa.

Sim, um tick é o menor e estou ciente (usando o Sistema.O diagnóstico.Cronómetro de classe).

Eu não tenho certeza se entendi sua última pergunta, por favor, você poderia esclarecer?

Editar:

Eu ainda não entendo, mas você pode usar qualquer tipo que quiser (por exemplo, duplos) para representar o tempo (se o que você realmente quer é representar a discretização de tempo para a física do problema, caso em que o carrapato é irrelevante).Para a maioria dos problemas de física, duplos seria suficiente.

O carrapato é a precisão melhor que você pode conseguir quando a medição do tempo com a sua máquina.

Para uma simulação em que você está provavelmente melhor fora de usar um decimal/duplo (mesmo tipo de posição) para um tempo adimensional, em seguida, convertê-lo a partir de/para algo significativo na entrada/saída.Caso contrário, você vai ser a realização de uma tonelada de elenco de operações quando você mover as coisas ao redor.Você irá obter precisão arbitrária este caminho, também, porque você pode escolher a escala de tempo a ser como grande/pequeno como você quer.

Olá Juan, eu recomendo que você use o Vector3 de classe, como sugerido por vários outros, já que é fácil de usar e acima de tudo suporta todas as operações que você precisa (como a adição, multiplicação, multiplicação matricial, etc...) sem a necessidade de implementá-lo.Se você tiver qualquer dúvida sobre como proceder - herança e, em fase posterior, você sempre pode mudar o interior de implementação, ou se desconectar de vector3.

Também, não uso nada menos precisos do que flutuar - todos os processadores estes dias é rápido o suficiente para ser mais preciso do que números inteiros (a menos que ele significou para dispositivos móveis, mas até lá...) O uso de menos de bóia você iria perder precisão muito rápido e acabar com o sobressalto rotações e translações, especialmente se você planeja usar mais do que uma única matriz/quaternion multiplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top