Estrutura de dados mais rápida no Java (processamento para visualização 4D)
-
26-09-2019 - |
Pergunta
Eu tenho um aplicativo para o qual preciso usar uma estrutura de visualização. Atualmente, estou me inclinando para o processamento para uso em um aplicativo Java Desktop.
Problema: tenho ~ 500k+ vetores de estado que preciso visualizar. Pontos 4D - XYZ e Time (tipo GPS)
Preciso ser capaz de selecionar fatias de tempo rápido e facilmente, também tendo a capacidade de jogá -las a tempo. Eu tenho a capacidade de alterar a entrada, usando arquivos planos ou um db.
Portanto, a pergunta é: qual estrutura de dados acomodará melhor minhas necessidades? Eu leio os arquivos em um ArrayLists? Hashmap? Ou um banco de dados na memória? Ou alguma outra coisa?
O desempenho é obrigatório para visualizar em 3D. O período é superior a 8 horas. Portanto, nem todos eles serão exibidos de uma só vez.
Alguém tentou usar uma estrutura de codificação criativa para esse tipo de uso? Alguma sugestão?
Obrigado!
Solução
Processar com o OpenGL é uma opção, mas se você tiver problemas de desempenho, eu recomendaria dar uma olhada OpenFrameworks ou libcinder.
Eles são C ++, não Java, mas o OpenFrameworks, por exemplo, tem uma sintaxe muito semelhante ao processamento.
Compare Matt Swoboda's Recode entrada para outras implementações de processamento.
A idéia é: tente processar com o OpenGL para ver se você obtém a taxa de quadros necessários; caso contrário, tente o OpenFramewoks ou Libcinder.
Hth
Outras dicas
JMONKEY Fornece um gráfico de cenas que faz algo como o que você descreve.
Ele mantém uma representação do espaço 3D que muda com o tempo. Eu penso normalmente Ele mede o tempo com o relógio do sistema, o que significa que você não o manipula diretamente, mas aposto que você pode conectar um componente que permitiria que você especifique o tempo ... (ou seja, verifique o estado do gráfico no momento em que você especificar ).
A matriz 2D parece uma boa ideia. Com um bom algoritmo de classificação, como o Quicksort ou Mergesort, você poderá selecionar fatias de tempo.
float [][]vectors=new float[4][500000];
Apenas certifique -se de classificá -los do começo ao fim. Manter simples e testá -lo?