Os cuento por qué usar la ia para programar es una castaña que solo ahorra trabajo en cuestiones triviales

Nadie crea nada nuevo ni nadie ha creado nunca nada nuevo jamás en la historia, todo lo que "inventamos" son refritos de algo que ya hemos visto u oído, y el conocimiento es una acumulación incremental.

Pero bueno tu a lo tuyo, que el palillo en la boca está para algo...

¿Por qué actúas como si no hubieras leído este mensaje?


Lo has leído. ¿Por qué lo ocultas?
 
Nunca me había preocupado por estos temas ya que mis necesidades de programación suelen ser bastante específicas, no valen soluciones estándar. Cosas de programar videojuegos totalmente rompedores.

Pero hoy quería hacer una cosa bastante sencilla (y engorrosa), quería identificar donde estaban las "islas" en una variable bidimensional de unos y ceros. Como era una idea muy abstracta y clara de entender, se lo pregunto a Gemini y lo clava a la primera, un código muy limpio y fácil de entender.

Pienso: ya está, genial, voy a ahorrar mucho tiempo en tonterías como ésta.

Comienzo con el siguiente paso, que es dibujar el contorno de esas "islas" tal y como está definido por la colisión física en el motor de desarrollo (Unity). Y aquí la IA empieza a patinar, sigo probando con Gemini y el resultado no es el esperado: realmente no entiende cuál es el propósito, el código emitido es imposible que sea capaz de dar la vuelta completa a la "isla", ni que compruebe realmente que ha dado la vuelta y ha llegado al inicio. No vale ni como esqueleto porque la lógica no es apta para el tipo de geometría, y obviamente la IA no lo va a entender aunque se lo explicara en chino mandarín.

Pruebo la misma petición en Copilot de M$ y sale un resultado mucho peor, las definiciones de las funciones y poco más.

En definitiva, esto no le quita el trabajo a nadie, es como decir que los monos le van a quitar el trabajo a los payasos del circo.
Creo que tendrias que dividir el algoritmo por partes o buscar alguna solucion parecida. Seguro que hay algun programador que se ha planteado parecido y no solo en videojuegos, en teledeteccion por satelite, etc.
 
A ver qué la IA, SE LO VA A COMER TODO

FIN

Solo veo foreros acojonados, picateclas al paredón, con la robótica todos al guano.

Renta básica universal y fin
 

Me da que más bien todos medicados/abortados/envenenados/eutanasiados/democratizados.

No existe ninguna razon para pensar que pueda ser de otro modo, y sólo hay que mirar a la historia para saberlo.

En realidad ya han empezado...
 
Me da que más bien todos medicados/abortados/envenenados/eutanasiados/democratizados.

No existe ninguna razon para pensar que pueda ser de otro modo, y sólo hay que mirar a la historia para saberlo.

En realidad ya han empezado...
Todo dios RBU, siempre se trato de IA en 2030 y 2050, ia, agi y asi


Me alegro que lo veas claro, siempre lo supieron, el resto era un movimiento de titiriteros, solo importó eso
 
el conocimiento es una acumulación incremental.

Esta frase es interesante y creo que es uno de esos "saltos cualitativos" de los que he estado hablando en este hilo.
El error está en el término "conocimiento".


Lo explicaré así:

Los datos no son información.
La información no es conocimiento.
El conocimiento no es sabiduría.
La sabiduría no es verdad.
La verdad no es belleza.



Los testigos de los robots consideran (aunque nunca lo formulen) que la mera información es conocimiento, y ahí es donde se les cuela el error.
 
Me da que más bien todos medicados/abortados/envenenados/eutanasiados/democratizados.

No existe ninguna razon para pensar que pueda ser de otro modo, y sólo hay que mirar a la historia para saberlo.

En realidad ya han empezado...

Existen muchas razones para pensar que puede ser de otro modo.
¿Por qué no las contemplas?
 
Creo que tendrias que dividir el algoritmo por partes o buscar alguna solucion parecida. Seguro que hay algun programador que se ha planteado parecido y no solo en videojuegos, en teledeteccion por satelite, etc.
Si la solución es algo completamente trivial, el bucle son 10 líneas de código, no se puede dividir en partes, pero el bot por la razón que sea no entiende el "conceto" porque no lo tendrá suficientemente entrenado o algo que se me escapa

Lo pongo por si alguien siente curiosidad, no está optimizado

do
{
RaycastHit2D hit = Physics2D.Raycast(current + direction * 2.5f, -direction, 4f, solidMask.value);

if (hit.collider != null)
{
direction = hit.normal;
advDir = RotateVector90_2D(hit.normal, false);

current = hit.point + advDir * 0.35f;

points.Add( hit.point );
}

if ( (Vector2.Distance(hit.point, start) <= 0.5f && points.Count > 2) )
break;

} while ( true );
 
Última edición:
Si la solución es algo completamente trivial, el bucle son 10 líneas de código, no se puede dividir en partes, pero el bot por la razón que sea no entiende el "conceto" porque no lo tendrá suficientemente entrenado o algo que se me escapa

Seguramente no estás formulando la pregunta de la forma correcta, porque dudo mucho que el problema que tienes no se lo haya planteado alguien antes.

Yo he hecho preguntas que no encuentras en stackoverflow ni en google, y aun así me las ha contestado bien...
 
Seguramente no estás formulando la pregunta de la forma correcta, porque dudo mucho que el problema que tienes no se lo haya planteado alguien antes.

Yo he hecho preguntas que no encuentras en stackoverflow ni en google, y aun así me las ha contestado bien...
me harté de formularle la pregunta, normalmente o lo pilla a la primera o no lo hace nunca
 
Si la solución es algo completamente trivial, el bucle son 10 líneas de código, no se puede dividir en partes, pero el bot por la razón que sea no entiende el "conceto" porque no lo tendrá suficientemente entrenado o algo que se me escapa

Lo pongo por si alguien siente curiosidad, no está optimizado

do
{
RaycastHit2D hit = Physics2D.Raycast(current + direction * 2.5f, -direction, 4f, solidMask.value);

if (hit.collider != null)
{
direction = hit.normal;
advDir = RotateVector90_2D(hit.normal, false);

current = hit.point + advDir * 0.35f;

points.Add( hit.point );
}

if ( (Vector2.Distance(hit.point, start) <= 0.5f && points.Count > 2) )
break;

} while ( true );

Yo no tengo ni idea de lo que estás haciendo, pero le he pasado esa finción a Cursor y esto es lo que me ha respondido sin darle el contexto ni documentación.

The function you've provided appears to be a loop that uses raycasting to trace a path in a 2D environment, typically used in physics simulations or games. Here's a breakdown of what each part of the function does:

1. **Raycasting**:
- `RaycastHit2D hit = Physics2D.Raycast(current + direction * 2.5f, -direction, 4f, solidMask.value);`
- This line casts a ray from a point (`current + direction * 2.5f`) in a specified direction (`-direction`), over a distance of 4 units. The `solidMask.value` likely specifies which layers the ray should interact with, filtering out non-relevant collisions.
- `current` is the starting point of the ray, `direction` is the direction in which the ray is cast, and `2.5f` is a scalar that adjusts the starting point relative to `current`.

2. **Collision Detection**:
- `if (hit.collider != null)`
- This condition checks if the ray has hit an object (`hit.collider` is not `null`).
- If there is a collision, the code inside this block executes.

3. **Direction Adjustment**:
- `direction = hit.normal;`
- The direction of the ray is updated to the normal of the surface it hit. This is typical in scenarios where you want the path to "bounce" or reflect off surfaces.
- `advDir = RotateVector90_2D(hit.normal, false);`
- This line calculates a new direction (`advDir`) by rotating the normal vector of the hit surface by 90 degrees. The `false` parameter likely indicates the direction of rotation (clockwise or counterclockwise).

4. **Position Update**:
- `current = hit.point + advDir * 0.35f;`
- Updates the current position to the point of collision (`hit.point`) adjusted by `advDir` scaled by `0.35f`. This adjustment moves the starting point of the next raycast slightly away from the wall to prevent the next ray from immediately hitting the same wall.

5. **Path Recording**:
- `points.Add(hit.point);`
- This line adds the collision point to a list called `points`, which presumably stores all the points where collisions have occurred, tracing out the path.

6. **Loop Termination Condition**:
- `if ((Vector2.Distance(hit.point, start) <= 0.5f && points.Count > 2))`
- This condition checks if the current hit point is close to the start point (`Vector2.Distance(hit.point, start) <= 0.5f`) and if at least three points have been recorded (`points.Count > 2`). If both conditions are met, the loop breaks.
- This is likely a mechanism to stop the tracing once it has returned close to the starting point, indicating a complete loop or path closure.

7. **Infinite Loop**:
- `do { ... } while (true);`
- The loop is designed to run indefinitely until explicitly broken by the `break` statement inside the loop.

This function is typically used in scenarios where you need to trace a path that reflects off surfaces, such as light rays in a light simulation, pathfinding in robotics, or even tracing bullet paths in games. The use of raycasting combined with vector manipulation allows for dynamic interaction with the environment based on physics.
 
Volver