Parámetros: Física
El medio en que se mueven los bots: velocidad máxima, eficiencia del empuje, rozamiento, fluido, gravedad, rebote de los choques, empujones al azar, inercia y tamaño.
Estos parámetros definen el medio en que se mueven los bots: cuánto pueden correr, qué los frena, qué los empuja y cómo chocan. Cambian mucho el tipo de estrategia que conviene. En un mundo sin rozamiento, un bot que dejó de empujar sigue andando para siempre; en uno con rozamiento fuerte, quedarse quieto es gratis y moverse es caro.
En el modo básico de Experimentar, el control Medio fija de una vez cinco de estos parámetros con los valores del DarwinBots original:
| Medio | Densidad del medio | Viscosidad | Rozamiento estático | Rozamiento dinámico | Gravedad Z (contra el suelo) |
|---|---|---|---|---|---|
| Espacio (como arranca la app) | 0 | 0 | 0 | 0 | 0 |
| Fluido | 0,0000001 | 0,0005 | 0 | 0 | 0 |
| Sólido (el de la Liga F1) | 0 | 0 | 0,6 | 0,4 | 2 |
Si cambiás alguno a mano, el control pasa a Personalizado. Todo lo que pasa en las fases de fuerzas y choques y de movimiento está en Física, con ejemplos medidos; acá va lo que cambia cada parámetro. Lo que cuesta moverse no está en este grupo sino en los costos (Mover, Girar).
Velocidad máxima
Tope de velocidad de un bot.
- Por defecto
- 40
- Rango habitual
- 0 a 1000
- Variable
MaxVelocity- Clave
opt:11- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
El tope de la velocidad de un bot, en unidades por ciclo; los bots lo leen en .maxvel. La app arranca con 40 y la Liga F1 lo sube a 180. Recorta dos cosas: la velocidad final de cada ciclo y el empujón que el bot puede darse con .up y compañía, así que el costo de moverse tampoco pasa de este tope (ver el empuje voluntario).
Con 40, cruzar un campo de 32000 lleva al menos 800 ciclos.
Eficiencia del motor
Fracción del impulso pedido que se convierte en movimiento. Con 0 los bots no se mueven por su cuenta.
- Por defecto
- 0.66
- Rango habitual
- 0 a 1
- Variable
PhysMoving- Clave
opt:12- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Qué fracción del empuje pedido se convierte en movimiento. Con 0,66, el valor de la app y de la Liga F1, 40 .up store le da a un bot liviano unos 26 de velocidad en el primer ciclo. El costo se calcula sobre el empuje pedido, no sobre lo que rinde: bajar este valor encarece moverse sin abaratar nada.
Con 1 todo el empuje se aprovecha; con 0 los bots no se pueden mover por su cuenta (la gravedad, los choques y los lazos los siguen moviendo). En el modo estanque, flotar cuesta más cuanto más bajo es este valor.
Movimiento browniano
Empujones al azar en cada ciclo.
- Por defecto
- 0
- Rango habitual
- 0 a 100
- Variable
PhysBrown- Clave
opt:13- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Empujones al azar: en cada ciclo, cada bot recibe un empujón en una dirección al azar, de hasta la mitad de este valor, y un pequeño giro también al azar. Como todo empujón, se divide por la masa, así que a los bots pesados apenas los mueve. La app lo trae en 0.
Sirve para que nada quede del todo quieto: mezcla poblaciones y saca a los vegetales de las posiciones fijas donde nacieron. Con mareas (Mareas (ciclos; 0 = no)) el motor lo reescribe en cada ciclo. Ver el movimiento browniano.
Densidad del medio
Resistencia por el empuje del fluido (agua ≈ 1e-7).
- Por defecto
- 0
- Rango habitual
- 0 a 0.001
- Variable
Density- Clave
opt:14- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- básico y avanzado
La densidad del fluido. Junto con Viscosidad, decide el arrastre: una resta de velocidad que crece con la rapidez y con el radio del bot, y que no depende de su masa. Si cualquiera de los dos vale 0, no hay arrastre. La densidad además agrega masa añadida: el fluido que el bot arrastra consigo le da más inercia, sin hacerlo más pesado para la gravedad.
La app la trae en 0; el agua del original es 0,0000001 (1e-7), que es lo que pone el medio Fluido. Los valores útiles son muy chicos: el rango habitual llega a 0,001. Ver el fluido.
Viscosidad
Resistencia viscosa del fluido (agua ≈ 0,0005).
- Por defecto
- 0
- Rango habitual
- 0 a 0.1
- Variable
Viscosity- Clave
opt:15- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- básico y avanzado
La viscosidad del fluido, la otra mitad del arrastre (ver Densidad del medio). La app la trae en 0; el agua del original, la del medio Fluido, es 0,0005. Con esos valores un bot con el tope de 40 no pasa de 20 mientras empuja y se clava en cuanto deja de hacerlo; con una viscosidad diez veces menor, se desliza varios ciclos. La tabla de el fluido compara los dos.
Rozamiento estático
Rozamiento con el suelo para empezar a moverse.
- Por defecto
- 0
- Rango habitual
- 0 a 2
- Variable
CoefficientStatic- Clave
opt:16- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- básico y avanzado
El rozamiento para arrancar. Si un bot está quieto y lo que lo empuja en ese ciclo no supera masa × Gravedad Z (contra el suelo) × este coeficiente, no se mueve, y el empuje se cobra igual. Si ya se está moviendo, solo frena los empujes de costado. Sin gravedad Z no hace nada.
La app lo trae en 0 y la Liga F1 en 0,6: con eso, un bot de masa 1 necesita pedir más de 1,8 de empuje (2 .up store) para arrancar. El umbral crece con la masa, así que los bots muy pesados quedan clavados. Ver el rozamiento.
Rozamiento dinámico
Rozamiento con el suelo en movimiento.
- Por defecto
- 0
- Rango habitual
- 0 a 2
- Variable
CoefficientKinetic- Clave
opt:17- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- básico y avanzado
El rozamiento en movimiento: en cada ciclo le resta a la rapidez del bot masa × Gravedad Z (contra el suelo) × este coeficiente, sin dejarla negativa. No se divide por la masa, así que frena mucho más a los pesados. Sin gravedad Z no hace nada.
La app lo trae en 0 y la Liga F1 en 0,4: un bot de masa 1 pierde 0,8 de rapidez por ciclo y, si deja de empujar a 40, se detiene en unos 50 ciclos.
Elasticidad de los choques
0 = choques blandos; 1 = rebote total.
- Por defecto
- 0
- Rango habitual
- 0 a 1
- Variable
CoefficientElasticity- Clave
opt:18- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Cuánto rebotan los bots al chocar entre sí. Con 0, el valor de la app y de la Liga F1, el choque es blando: en la dirección del golpe los dos terminan con la misma velocidad, como si uno empujara al otro. Con 1 rebotan como bolas de billar. También cambia cuánto se separan por ciclo dos bots superpuestos: con 0 se deshace cerca de un cuarto de la superposición, con 1 casi toda.
Con rebote alto, un bot que embiste sale despedido; con choques blandos, puede empujar a otro. Ver los choques entre bots.
Gravedad Z (contra el suelo)
Aprieta los bots contra el suelo: activa el rozamiento.
- Por defecto
- 0
- Rango habitual
- 0 a 100
- Variable
Zgravity- Clave
opt:19- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- básico y avanzado
Una gravedad que no mueve a nadie: aprieta a los bots contra el «suelo» y es la que hace funcionar el rozamiento. Los dos coeficientes (Rozamiento estático y Rozamiento dinámico) se multiplican por ella, así que con 0 (como arranca la app) no hay rozamiento aunque los coeficientes no sean 0. La Liga F1 usa 2.
Gravedad Y (hacia abajo)
Tira de los bots hacia el borde inferior.
- Por defecto
- 0
- Rango habitual
- 0 a 100
- Variable
Ygravity- Clave
opt:20- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
La gravedad hacia abajo: en cada ciclo le suma este valor a la velocidad vertical de cada bot, pese lo que pese. Con 1, un bot quieto cae a 1, 2, 3… hasta el tope de velocidad. La app la trae en 0.
Con paredes, todo termina en el fondo; si arriba y abajo están conectados (Arriba ↔ abajo conectados), los bots caen para siempre. En el modo estanque (Estanque (luz por profundidad)) es la que permite flotar con .setboy. Con mareas (Mareas (ciclos; 0 = no)) el motor la reescribe en cada ciclo. Ver gravedad y flotabilidad.
Sin inercia
Los bots se frenan en seco al dejar de empujar.
- Por defecto
- no
- Rango habitual
- sí / no
- Variable
ZeroMomentum- Clave
opt:10- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Sin inercia: al final de cada ciclo el motor anula la velocidad de todos. Un bot avanza solo mientras empuja y se frena en seco cuando deja de hacerlo. Nada se acumula de un ciclo para el otro: con gravedad 1, un bot cae siempre 1 por ciclo en lugar de ir cada vez más rápido. Apagado en la app.
En una prueba, un bot que empujaba 40 con la eficiencia por defecto avanzó 26 por ciclo, siempre lo mismo, y quedó quieto en el ciclo en que dejó de empujar. Mientras se movía, .velscalar informaba 26, pero .velup y .veldx leían 0.
Radio fijo
Todos los bots del mismo tamaño, sin importar el cuerpo.
- Por defecto
- no
- Rango habitual
- sí / no
- Variable
FixedBotRadii- Clave
opt:21- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Todos los bots miden lo mismo, 60 de radio, tengan el cuerpo o los cloroplastos que tengan. La masa sigue cambiando como siempre; solo cambia el tamaño, que decide cuándo dos bots se tocan, cuánto los frena el fluido y cuánta luz tapan. Sin esta opción, un bot de 1000 de cuerpo mide 114 y uno lleno de cloroplastos se acerca a 415 (ver el estado físico de un bot). Apagado en la app.
Con radios fijos, engordar no te hace más fácil de alcanzar ni le quita luz a los vecinos.