fisica

Description

O sistema de física em fluxus é baseado na biblioteca ODE, que permite a você adicionar propriedades físicas a objetos e colocá-los em movimento. Já que ODE foi projetada para simulações em corpos rígidos, estruturas são descritas em termos de objetos, dobras e forças. Uma explicação muito mais compreensiva destes conceitos pode ser encontrada na documentação de ODE, que você provavelmente baixou se teve que compilar fluxus, ou pode ser encontrado em @url{http://ode.org/ode-docs.html} Para ajudar com a depuração de dobras, tente chamar (render-physics) em cada frame, o que vai renderizar locators mostrando a você posições e eixos de dobras que possuem informação posicional.

(collisions on/off-número)

Returns void

Habilita ou desabilita detecção de colisão. Padrão é desligado.

Example

 (collisions 1)

(ground-plane vetor-plano número-offset)

Returns void

Cria um plano passivo infinito pra usar como 'chão'.

Example

 (ground-plane (vector 0 1 0) 0)

(active-box número-id-primitiva)

Returns void

Permite que o objeto seja afetado pelo sistema físico, usando uma caixa como um volume limite. Como um objeto ativo, ele vai ser transformado por ODE. Nota: rotações só funcionam corretamente se você específicar suas escalagens primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com tranformações cortadas.

Example

 (define mycube (build-cube))
 (active-box mycube)

(active-cylinder número-id-primitiva)

Returns void

Permite que o objeto seja afetado pelo sistema físico, usando um cilindro como um volume limite. Como um objeto ativo, ele vai ser transformado por ODE. Nota: rotações só funcionam corretamente se você específicar suas escalagens primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com tranformações cortadas.

Example

 (define mycube (build-cube))
 (active-cylinder mycube)

(active-sphere número-id-primitiva)

Returns void

Permite que o objeto seja afetado pelo sistema físico, usando uma esfera como um volume limite. Como um objeto ativo, ele vai ser transformado por ODE. Nota: rotações só funcionam corretamente se você específicar suas escalagens primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com tranformações cortadas.

Example

 (define mycube (build-cube))
 (active-sphere mycube)

(active-mesh número-primitivaid)

Returns void

Permite que o objeto seja afetado pelo sistema de física, usando a malha como volume de colisão. Esta função funciona apenas em primitivas, lista de triangulos indexadas. Como um objeto ativo, ela vai ser transformada por ode. Nota: rotações só funcionam corretamente se você especificar suas transformações de escala antes, depois rotacionar (translação não importa), basicamente ode não consegue lidar com cisalhamento de transformações.

Example

 (define myshape (load-primitive "bot.obj"))
 (active-mesh myshape)

(passive-box número-id-primitiva)

Returns void

Permite que o objeto seja resolvido pelo sistema de física, usando uma caixa como o limite. Como um objeto passivo, objetos ativos vão colidir com ele, mas este não vai ser transformado. Nota: rotações só funcionam corretamente se você especificar suas transformaçoes de escala primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com transformações cortadas.

Example

 (define mycube (build-cube))
 (passive-box mycube)

(passive-cylinder número-id-primitiva)

Returns void

Permite que o objeto seja resolvido pelo sistema de física, usando um cilindro como o limite. Como um objeto passivo, objetos ativos vão colidir com ele, mas este não vai ser transformado. Nota: rotações só funcionam corretamente se você especificar suas transformaçoes de escala primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com transformações cortadas.

Example

 (define mycube (build-cube))
 (passive-cylinder mycube)

(passive-sphere número-id-primitiva)

Returns void

Permite que o objeto seja resolvido pelo sistema de física, usando uma esfera como o limite. Como um objeto passivo, objetos ativos vão colidir com ele, mas este não vai ser transformado. Nota: rotações só funcionam corretamente se você especificar suas transformaçoes de escala primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com transformações cortadas.

Example

 (define mycube (build-cube))
 (passive-sphere mycube)

(passive-mesh numero-primitivaid)

Returns void

Permite que o objeto seja atuado no sistema de física, usando a malha como o volume de colisão. Esta função funciona apenas em primitivas, lista-de-triangulos indexados. Como um objeto passivo, objetos ativos podem colidir com ela, mas ela não vai sofrer transformação. Nota: rotações só funcionam corretamente se você especificar suas transformaçoes de escala primeiro, depois rotacionar (translação não importa) basicamente, ode não pode lidar com transformações cortadas.

Example

 (define myshape (load-primitive "bot.obj"))
 (passive-mesh myshape)

(physics-remove numero-primitivaid)

Returns void

Remove o objeto do sistema de física.

Example

 (define mycube (build-cube))
 (active-box mycube)
 (physics-remove mycube)

(surface-params slip1-número slip2-número softerp-número softcfm-número)

Returns void

Ajusta alguns parâmetros globais de superfície que afetam o atrito e reflexão. Veja seção 7.3.7 dos docs de ODE para uma explicação desses parâmetros.

Example

 (surface-params 0.1 0.1 0.1 0.1)

(build-balljoint número-id-primitiva número-id-primitiva vetor-eixo)

Returns void

Cria um balljoint para conectar dois objetos (veja os docs de ode para uma descrição detalhada das diferenças entre os tipos de dobras). ODE considera as juntas(joints) serem uma restrição imposta entre dois objetos. Quando criando uma junção, é importante ter as duas primitivas sendo juntas na posição desejada antes de criar uma junção. Junções podem ser criadas, modificadas e indexadas de uma maneira similar a outras primitivas.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (build-balljoint shape1 shape2 (vector 0 0 0)) 
 (kick shape1 (vector 0 2 0))
 
 (set-physics-debug #t)

(build-fixedjoint número-id-primitiva)

Returns void

Cria uma junção para conectar um objeto ao ambiente global. Isto trava o objeto no lugar.

Example

 (clear)
 (define shape1 (with-state 
         (translate (vector 0 1 0))
         (build-cube)))
 (active-box shape1)
 
 (build-fixedjoint shape1) ; not very exciting... 

(build-hingejoint numero-id-primitiva1 número-id-primitiva2 vetor-ancora vetor eixo)

Returns void

Cria uma junção circular para conectar dois objetos ( veja os docs de ODE para uma descrição detalhada entre tipos de junções). ODE considera as juntas(joints) serem uma restrição imposta entre dois objetos. Quando criando uma junção, é importante ter as duas primitivas sendo juntas na posição desejada antes de criar uma junção. Junções podem ser criadas, modificadas e indexadas de uma maneira similar a outras primitivas.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (build-hingejoint shape1 shape2 (vector 0 0 0) (vector 0 0 1)) 
 (kick shape1 (vector 0 2 0))
 
 (set-physics-debug #t)

(build-sliderjoint número-id-primitiva1 número-id-primitiva2 vetor-eixo)

Returns hingeid-number

Cria uma junção deslizante entre dois objetos (veja a documentação de ODE para uma descrição detalhada das diferenças entre os tipos de conexões). ODE considera as juntas(joints) serem uma restrição imposta entre dois objetos. Quando criando uma junção, é importante ter as duas primitivas sendo juntas na posição desejada antes de criar uma junção. Junções podem ser criadas, modificadas e indexadas de uma maneira similar a outras primitivas.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (build-sliderjoint shape1 shape2 (vector 1 0 0)) 
 (kick shape1 (vector 0 2 0))
 
 (set-physics-debug #t)

(build-hinge2joint número-id-primitiva1 número-id-primitiva2 vetor-ancora vetor-eixo1 vetor-eixo2)

Returns numero-id-dobradiça(hinge)

Cria uma dobradiça de junções para conectar dois objetos (veja a documentação de ODE para uma descrição detalhada das diferenças entre os tipos de conexões). ODE considera as juntas(joints) serem uma restrição imposta entre dois objetos. Quando criando uma junção, é importante ter as duas primitivas sendo juntas na posição desejada antes de criar uma junção. Junções podem ser criadas, modificadas e indexadas de uma maneira similar a outras primitivas.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (build-hinge2joint shape1 shape2 (vector 0 0 0) (vector 1 0 0) (vector 0 1 0)) 
 (kick shape1 (vector 0 2 0))
 
 (set-physics-debug #t)

(build-amotorjoint número-id-primitiva1 número-id-primitiva2 vetor-eixo)

Returns número-id-dobradiça(hinge)

Cria uma junção com mobilidade angular para conectar dois objetos (veja a documentação de ODE para uma descrição detalhada das diferenças entre os tipos de conexões). ODE considera as juntas(joints) serem uma restrição imposta entre dois objetos. Quando criando uma junção, é importante ter as duas primitivas sendo juntas na posição desejada antes de criar uma junção. Junções podem ser criadas, modificadas e indexadas de uma maneira similar a outras primitivas.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (build-amotorjoint shape1 shape2 (vector 1 0 0)) 
 (kick shape1 (vector 0 2 0))
 
 (set-physics-debug #t)

(joint-param número-id-junção param-string número-valor)

Returns número-id-dobradiça(hinge)

Ajusta o parâmetro da junção para uma junta onde param é um dos seguintes: "HiStop", "Vel", "FMax", "FudgeFactor", "Bounce, "CFM", "StopERP", "StopCFM", "SuspensionERP", "SuspensionCFM", "Vel2", "FMax2". Veja Seção 7.5.1 da documentação de ODE para uma explicação de cada um desses parâmetros, e a qual tipos de junções eles aplicam.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (define j (build-hinge2joint shape1 shape2 (vector 0 0 0) (vector 1 0 0) (vector 0 1 0)))
 (joint-param j "Vel2" 0.1)
 (joint-param j "FMax2" 0.2)
 (joint-param j "LoStop" -0.75)
 (joint-param j "HiStop" 0.75)
 
 (set-physics-debug #t)

(joint-angles jointid-number número-angulo número-vel)

Returns void

Ajusta um novo ângulo para este joint, com uma velocidade dada para chegar lá.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (define j (build-hingejoint shape1 shape2 (vector 0 0 0) (vector 0 1 0)))
 (joint-param j "FMax" 20)
 (joint-param j "LoStop" -1)
 (joint-param j "HiStop" 1)
 
 (set-physics-debug #t)
 
 (define (animate)
     (joint-angle j 0.1 (* 5 (sin (time)))))

(joint-slide numero-jointid força)

Returns void

Aplica a força dada na direção do slide. Isto é, aplica uma força de magnitude força, na direçao do eixo do slide, ao corpo1, e com a mesma magnitude mas direção contrária ao corpo2.

Example

 (clear)
 (ground-plane (vector 0 1 0) -1)
 (collisions 1)
 
 (define shape1 (with-state 
         (translate (vector -1 0 0))
         (build-cube)))
 (active-box shape1)
 
 (define shape2 (with-state 
         (translate (vector 1 0 0))
         (build-cube)))
 (active-box shape2)
 
 (define j (build-sliderjoint shape1 shape2 (vector 1 0 0)))
 (joint-param j "FMax" 20)
 (joint-param j "LoStop" -1)
 (joint-param j "HiStop" 1)
 
 (set-physics-debug #t)
 
 (define (animate)
     (joint-slide j (* 5 (sin (time)))))

(set-max-physical número-max)

Returns void

Ajusta o máximo número de objetos que o sistema de física pode lidar. Quando o máximo nível foi alcançado os objetos mais antigos são automaticamente destroidos.

Example

 (clear)
 (set-max-physical 200)
 
 (every-frame
     (with-state
     (translate (vector 0 5 0))
         (scale (srndvec))
         (colour (rndvec))
         (let ((ob (build-cube)))    
             (active-box ob)
             (kick ob (vmul (srndvec) 3))
             (twist ob (vmul (srndvec) 2)))))

(set-mass número-id-primitiva número-massa)

Returns void

Ajusta a massa de um objeto ativo no sistema de física

Example

 (clear)
 (ground-plane (vector 0 1 0) 0)
 (collisions 1)
 (set-max-physical 20)
 
 ; not a great example, but these boxes will have 
 ; different mass, so behave a bit differently.
 
 (every-frame
     (when (> (rndf) 0.92)
         (with-state
             (translate (vector 0 5 0))
             (scale (vmul (rndvec) 5))
             (colour (rndvec))
             (let ((ob (build-cube)))    
                 (active-box ob)
                 (set-mass ob (* (rndf) 10))
                 (kick ob (vmul (srndvec) 3))
                 (twist ob (vmul (srndvec) 2))))))    

(gravity vetor-gravidade)

Returns void

Ajusta a força e direção da gravidade.

Example

 (clear)
 (ground-plane (vector 0 1 0) 0)
 (collisions 1)
 (set-max-physical 20)
 
 (every-frame
     (begin
         (gravity (vector 0 (sin (time)) 0)) ; change gravity! :)
         (when (> (rndf) 0.92)
             (with-state
                 (translate (vector 0 5 0))
                 (scale (rndvec))
                 (colour (rndvec))
                 (let ((ob (build-cube)))    
                     (active-box ob)
                     (kick ob (vmul (srndvec) 3))
                     (twist ob (vmul (srndvec) 2)))))))

(kick número-id-primitiva vetor-chute)

Returns void

Aplica força de translação ao objeto.

Example

 (clear)
 (collisions 1)
 (set-max-physical 20)
 (gravity (vector 0 0 0))

 (every-frame
     (when (> (rndf) 0.92)
         (with-state
             (scale (rndvec))
             (colour (rndvec))
             (let ((ob (build-cube)))
                 (active-box ob)
                 (kick ob (vmul (srndvec) 3))
                 (twist ob (vmul (srndvec) 2))))))

(twist número-id-primitiva vetor-giro)

Returns void

Aplica força rotacional ao objeto

Example

 (clear)
 (collisions 1)
 (set-max-physical 20)
 (gravity (vector 0 0 0))

 (every-frame
     (when (> (rndf) 0.92)
         (with-state
             (scale (rndvec))
             (colour (rndvec))
             (let ((ob (build-cube)))
                 (active-box ob)
                 (kick ob (vmul (srndvec) 3))
                 (twist ob (vmul (srndvec) 2))))))

(add-force número-primitivaid vetor-força)

Returns void

Adiciona força ao corpo

Example

 (clear)
 (collisions 1)
 (for ([i (in-range 15)])
    (let* ([p (vmul (srndvec) 15)]
           [c (with-state
                    (translate p)
                    (build-cube))])
        (active-box c)
        (set-gravity-mode c #f)
        (add-force c (vmul p -10))))

(add-torque número-primitivaid vetor-torque)

Returns void

Adiciona torque ao corpo

Example

 (clear)
 (define c (build-cube))
 (active-box c)
 (add-torque c #(10 0 0))

(set-gravity-mode número-primitivaid modo-booleano)

Returns void

Ajusta se o corpo é influenciado pela gravidade do mundo ou não.

Example

 (clear)
 (collisions 1)
 (define a (with-state
               (translate (vector -.95 5 0))
               (build-cube)))
 (define b (build-cube))
 (active-box a)
 (active-box b)
 (set-gravity-mode b #f)

(has-collided número-id-primitiva)

Returns void

Retorna verdadeiro se a primitiva pega colidiu no ultimo frame.

Example

 (clear)
 (ground-plane (vector 0 1 0) 0)
 (collisions 1)
 (set-max-physical 20)
 
 (define ob (with-state
     (translate (vector 0 5 0))
     (build-cube)))
 
 (active-box ob)
 
 (every-frame
     (when (has-collided ob)
         (with-primitive ob
             (colour (rndvec)))))