Saúde e educação das crianças > Educação bebê > Artigos relacionados > Interseção Rays

Interseção Rays

Being um otário para testes de interseção rápido, eu só tinha que tentar otimizar do Trombone e meu raio-triângulo intercepta ou apresentado na revista de ferramentas gráficas (JGT) em 1997. Eric Haines e eu virei isto (e algumas outras otimizações para o 2D caso) em um pequeno artigo para o Jornal do Dr. Dobb. No entanto, não havia espaço suficiente para discutir todos os detalhes, portanto esta página exists.First de tudo, eu pensei que seria interessante ver o que acontece com o tempo de intersecção como o número de visitas de aumentos de 0% a 100%. Em segundo lugar, como dissemos em nosso artigo JGT, a divisão (afinal de contas, a divisão é muito caro, o que é por isso que se preocupam com isso) pode ser empurrado posteriormente no código, fazendo testes diferentes, dependendo do sinal do determinante . Então, eu implementei isso, e eu acredito que o código é ainda mais limpa agora (por exemplo, basta tirar o "else if" e você tem um teste para abate blackface) Em terceiro lugar, eu tentei um monte de maneiras diferentes para ordenar os cálculos no código, e, finalmente, em três versões diferentes: 1) Ter a divisão na end.2) Tendo a divisão no início da code.3) Tendo a divisão no início do código mais mover um produto cruzado para fora do "se -else se "-Case. (Versão número 0 é simplesmente o código JGT original) .O código para estes quatro versões estão disponíveis abaixo. Eu executar o meu programa de teste (compilado com "-O2 gcc") em três computadores diferentes: um SGI Octane com um MHz R10K 175, uma Sun UltraSPARC-III 333 MHz, e em um PC Linux com um processador Pentium III 700 MHz Para fazer o teste e os horários razoáveis ​​(pelo menos em alguns aspectos), primeiro eu randomizados 1000 pares diferentes de raios-triângulo e colocá-los em uma lista. Então eu comecei o relógio pela primeira otimização, e percorrer a lista de 10.000 vezes, e então parou o relógio. Fazendo dessa forma, eu acho que evitar acessos de desempenho previsão de desvio, que eu possa começar se eu repetir o mesmo teste para um par de raios triângulo 10.000 vezes seguidas (e, em seguida, o próximo par, e assim por diante). Tudo isso foi feito para todas as quatro versões do código. 1. Usando o método ComputeIntersectionBox (...), que leva um raio e uma caixa como argumentos e calcula a intersecção mais próximo do raio ea caixa. Este método funciona através da formação de um avião com cada uma das faces da caixa e procura de uma intersecção com cada um dos planos. Uma vez que uma intersecção é encontrado, é feita uma verificação se ou não o ponto é sobre a superfície da caixa, verificando se o ponto de intersecção se situa entre os pontos de canto. Quando eu olhar para raios após a execução deste algoritmo em duas caixas diferentes, eu obter os cruzamentos corretos. 2. Usando o método ComputeIntersectionScene (...) sem usar as transformações de matrizes em uma cena que tem duas esferas, um dodecaedro (uma malha triangular), e duas caixas. ComputeIntersectionScene (...) de forma recursiva percorre todos os nós do grafo de cena e calcula a intersecção mais próximo com o raio dado. Este teste em particular, não aplicar quaisquer transformações que nós pai pode ter que também precisa ser aplicado a seus filhos. Com este teste, eu também obter os cruzamentos corretos. 3. Usando o método ComputeIntersectionScene (...) com as transformações de matriz. Esse teste funciona como o descrito acima, excepto que, antes de encontrar um cruzamento entre o raio e um nó na cena, o raio é transformado de coordenadas da estrutura usando o inverso da matriz de transformação do nó e depois do cruzamento foi calculado nó, esta intersecção é transformado de volta no mundo coordenadas pela aplicação da matriz de transformação para o ponto de intersecção.
&

Artigos relacionados

Artigos relacionadosEducação familiarcriança em Idade EscolarDiferente de Educação Infantil