elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 24
11  Programación / Programación C/C++ / Re: Programa para cifrar archivo de texto en: 12 Mayo 2023, 04:13 am
Bueno, eso es otro problema distinto. Se trata de un error de enlazado. Hay varias razones para que se produzca el error de referencias no definidas, la más común es que el enlazador no encuentre las bibliotecas/librerías donde se definen esas funciones. En tu makefile incluyes la ruta "C:/Program Files/OpenSSL-Win64/lib", ¿estás seguro de que los archivos .a correspondientes (en este caso, libssl y libcrypto) se encuentran exactamente en ese directorio?  Porque es algo común que las bibliotecas open source creen subdirectorios para cada compilador. Yo lo primero que haría sería verifica que el directorior sea el correcto.
12  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 11 Mayo 2023, 03:29 am
Aquí vas a ver muchas cosas que parecen contrarias a la intuición, pero resultan claras una vez que se entiende bien el tema. Trataré de darte ejemplos breves para aclarar tus dudas, pero lo ideal es tener unas buenas bases de trigonometría y algo de física (mecánica, en concreto) para entenderlo al 100%.

Como recordatorio: el ángulo representa la distribución de velocidades. Como en tu programa se busca que la pelota avance (obviamente, no es aceptable tirar la pelota hacia atrás), mientras mayor sea el ángulo, habrá más velocidad hacia arriba y menos hacia adelante, o sea, la pelota se elevará más.

La principal confusión que veo que tienes es sobre la manera en que el ángulo influye en la distancia recorrida. No es válido decir que si le das más altura a la pelota, mayor será la distancia, ni tampoco lo opuesto. La realidad es que depende. Cuando el lanzamiento es muy bajo, hay mayor velocidad hacia adelante (horizontal), y se avanza más rápido, pero como la pelota está cerca del suelo, también cae rápido, así que no tiene tiempo de viajar mucho. Si el tiro es elevado, avanza hacia adelante más lentamente, pero tarda más en caer, lo que le da más tiempo para avanzar. Por lo tanto, si se quisiera que la pelota llegara lo más lejos posible, no debería ir ni muy elevada ni muy baja. Para cada tiro existe un ángulo que ofrece el mejor balance y da la mayor distancia posible con la fuerza disponible. Dicho de otra forma, si lo que se busca es recorrer una distancia específica, este es el ángulo que te permite lograrlo usando menos fuerza. No es tan simple decir cuál es este ángulo más eficiente, ya que depende de la altura y velocidad iniciales de la pelota, pero de cualquier forma no lo necesitas. Baste saber que ese ángulo existe, y que mientras más te alejes de él (ya sea hacia arriba o hacia abajo) menor será la eficiencia, y por lo tanto, mayor la cantidad de fuerza necesaria para recorrer una distancia d.

si la puede elevar a 19.5 m también debería poderla elevar a 18.6 ¿no?

Eso podría ser correcto si sólo interesara elevar la pelota, sin importar donde caiga ni nada más, pero aquí de lo que se trata es de que llegue a un punto específico (y se eleve a cierta altura al pasar por la red), lo cual hace que no sea tan simple, como expliqué arriba. Si se diera el caso de que para llegar al punto deseado y alcanzar una altura de 18.6 m al pasar la red, requirieras más fuerza de la disponible, lo que habría que hacer es intentar acercarse al ángulo más eficiente: si el ángulo que se usó es mayor que el óptimo, hay que hacer tiros más bajos; si es menor, hay que hacer tiros más altos. En este último caso, para llegar al destino buscado, un tiro más elevado requeriría menos fuerza que uno más bajo. Obviamente, no necesitas estar probando ángulos, ya que el método del otro foro y el de aquí te calculan directamente el que debes usar, pero el ejemplo sirve para ilustrar el punto.

Citar
En mi opinióbn sí, es la condición nro 5:
...
 Profundo significa que cae en el punto deseado, veloz que puede caer antes (aunque tiene la misma trayectoria en XY y debe pasar encima de la red); si dices que con tu método cae en el punto deseado es profundo, cae lejos de la red (considerando la distancia Y hacia ella) pero en el área de saque. Cuando ya no sea el saque, los tiros sí pueden caer más al fondo de la cancha, pero eso es simplemente que canbia el destino deseado, el método debería servir también. ¿Sabes más o menos las reglas del tenis?

Sí, me había confundido porque acababa de ver el video que pusiste, y como no me quedaba muy claro que sucedía, pensé que te referías a otra cosa.

Citar
En la realidad, para que un golpe llegue más lejos, conviene pegarle un poco hacia arriba.

...se supone que entre más fuerza se tenga más fuerza hacia adelante se puede usar, y por lo tanto menos fuerza hacia arriba es necesario hacer

Creo que eso ya quedó aclarado con lo anterior: son suposiciones que, aunque puedan sonar lógicas, no son del todo correctas. En ciertos cases se cumplen y en otros ocurre lo contrario.

Citar
Pues dime paso a paso cómo es, lo aplico y te digo si tiene un problema, cual.

Pues creo que ya lo había explicado al inicio, aunque supongo que pudiera ser algo confuso porque está repartido en dos mensajes. Ahora no tengo tiempo, pero cuando pueda pongo los pasos en uno sólo.
13  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 9 Mayo 2023, 03:05 am
¿Cual es la diferencia?

Como te había dicho, las ecuaciones que estoy poniendo usan exactamente la fuerza que tu personaje tenga, de manera que cuando digo "lo más bajo posible", es lo más bajo posible con la fuerza disponible. Pudiera ser que no tengas la suficiente para pasar la pelota a exactamente 18.6 m al llegar a la red, pero sí a 19.5 m. En tal caso, si pidieras exactamente 18.6 m, la respuesta sería que es imposible. Si en cambio pides la menor altura posible (siempre que sea por encima de la red) se te daría el ángulo que la pasa a 19.5 m.

Citar
Repito:
Código:
...pero debe lanzarla hacia arriba para que pique en lo profundo del área del saque, o para que bote ahí al menos

Eso no estaba estaba originalmente, así que mi método no lo toma en cuenta. De todas formas creo es mejor que primero trates de hacer que funcione bien con las condiciones originales.

Citar
En el siguiente video puedes ver esos casos, pero no está bien porque la fuerza se reparte 100% en XY y luego también puede usarse 100% en Z o algo así, el código es un lío además.
https://drive.google.com/file/d/1jyrIyycu_joxlfIblj5IDEwZ_Y3giSPR/view?usp=share_link

Sin conocer bien todos los parámetros, como las coordenadas (¿y AlexAcc es la gravedad?), es difícil saber bien lo que pasa, pero en ninguno de los casos la fuerza se está repartiendo al 100% en XY. Como te había dicho anteriormente, la velocidad total no es la suma de las individuales sino:

v = raiz(vx2 + vy2).

De hecho, aún incorporando la velocidad en Z, no llega al 100% de la disponible. ¿Estás usando el método del otro foro?

Citar
Por lo que dices tu método daría el resultado que quiero. Si además sirve para determinar 2 posibles tipos de tiro (profundo o veloz), mejor.

Si te refieres a profundo y veloz tal como los definiste arriba, no. Ninguno de los dos tiros que obtengas hará que la pelota pique en el área de saque, porque, de nuevo, esa condición no estaba cuando escribí mis primeras dos respuestas. Con los dos posibles ángulos que te dan mis ecuaciones, la pelota cae directamente en el destino deseado en la cancha rival, simplemente uno es más "globeado" y otro más directo.

Citar
Que el tiro no sea el más óptimo está bien, si el personaje no tiene suficiente fuerza no debe poderla usar de la nada ¿o es posible que con menos fuerza pueda hacer tiros mejores?

Con mi método obtienes el tiro ideal usando exactamente la fuerza disponible. Sin embargo, en algunos casos, usando menos fuerza podrías conseguir tiros que pasen más bajo, es decir, más cercanos a la red (y obviamente, cumpliendo con tus otras condiciones), pero determinar esto complicaría las cosas, por lo que aquí también creo que es mejor que te enfoques en tratar de implementar correctamente mi método o el del otro foro.
14  Programación / Programación C/C++ / Re: Programa para cifrar archivo de texto en: 6 Mayo 2023, 18:54 pm
Pues es justo lo que el warning te dice: la función AES_set_encrypt_key está en proceso de obsolescencia y se desaconseja su uso. Lo correcto sería que busques cuál función la sustituye en OpenSSL 3.0 y la uses en su lugar. O si no quieres hacer eso, podrías simplemente desactivar esa advertencia con la opción: -Wno-deprecated-declarations.
15  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 5 Mayo 2023, 04:43 am
Me entreveré porque hay 2 tipos de tiros: Rápido y profundo.

La diferencia se nota si el personaje no tiene tanta fuerza.

En el profundo, se intenta que la bola bote en lo más profundo del área de saque, por lo que, si el personaje no tiene suficiente fuerza (pero suficiente como para pasar la red), golpeará un poco hacia arriba, será como un globito, la bola pasará a una distancia considerable de la red.

En el rápido, se intenta que la bola llegue a la cancha rival lo más rápido posible, independientemente de si bota profundo o no, por lo que siempre que el personaje tenga suficiente fuerza como para pasar la red, pasará a la mínima altura posible (18.6).

Prefiero que los cálculos sean para el profundo, ya que si se saca hacia el centro con poca fuerza, botaría fuera del área de saque y tendría que corregir eso; primero quiero lo mínimo necesario, o más importante.

Sí, esa parte está clara, la pelota no sólo debe pasar por encima de la red sino que además debe hacerlo a la menor altura posible. Pero "lo más bajo posible" es distinto de "exactamente".

Piensa bien qué es lo que quieres hacer, porque si arbitrariamente cambias las condiciones, no se llega a ningún lado. Como te dije, lo que te pusieron en el otro foro es para que la pelota pase exactamente a la mínima altura posible, y en ese caso, la velocidad no la puedes decidir tú, sino que se calcula con las ecuaciones que te dieron. Y esas velocidad resultante no tiene por qué corresponderse con la "fuerza" que tiene tu jugador. Es decir, no usan AlexFuerza para nada, sino que te imponen el valor que esa variable debe tener.

El método que yo te puse no tiene la restricción de que la pelota tenga que pasar exactamente a una altura, sino simplemente que lo haga sobre la red, y por eso no impone o "inventa" la fuerza, sino que la toma directamente de la que tú eliges (mi variable v0 es lo mismo que AlexFuerza) y lo que te da es el ángulo (o distribución de las velocidades, que es lo que pedías) o ángulos, pues pueden ser dos, con los que debe ser lanzada la pelota para que caiga en el destino deseado. Luego se verifica si alguno de esos ángulos pasa por encima de la red, y si ambos lo hacen, eliges el que convenga: el menor tendrá más velocidad "hacia adelante" y el mayor se elevará más. Sin embargo, también tiene sus limitaciones. Dado que no es nada flexible con la fuerza (toma exactamente el valor de AlexFuerza, que al menos yo entendí que era lo que pretendías), el tiro no necesariamente será el más óptimo, a diferencia del otro que te dieron, pero que no usa tu fuerza. No hay una única solución perfecta que cumpla todas las condiciones, por lo que antes que nada debes pensar cuál te parece más conveniente.
16  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 3 Mayo 2023, 04:29 am
Actualmente no tengo mucho tiempo, pero si tienes algunas dudas puntuales con respecto a lo que te expliqué anteriormente, te podría ayudar cuando pueda.

Sólo vi muy de pasada lo del otro foro, pero por lo que veo el método es esencialmente el mismo que te di, aunque algunas cosas allá las calculan de forma más directa, pero, en mi opinión, más difícil de entender si no estás muy metido en las matemáticas, como creo que es el caso. También parece que te estaban dando ecuaciones para que la bola pase sobre la red exactamente a una cierta altura (¿?), pero, al menos aquí en este foro, lo que pedías era simplemente que fuera mayor o igual a un valor.

Si la gravedad atrayera 1cm/s a la pelota, y la pelota está en 100cm, entonces con mi fórmula ocurriría esto:
En 1s cayó 1cm.
En 2s cayó 1cm+2cm
En 3s cayó 3cm+3cm
En 4s cayó 6cm+4cm
En 5s cayó 10cm+5cm
¿Con la fórmula que me dices qué ocurriría?

Esos cálculos están mal. Como te había dicho, con tu fórmula sí estás aplicando una especie de "aceleración" pero no correctamente. Si la gravedad es 1 cm/s2,  entonces, si empezamos a contar en el momento en que la bola comienza a caer:

en 1 s, habrá caído 0.5 cm
en 2 s, habrá caído 2 cm
en 3 s, habrá caído 4.5 cm

porque la distancia s recorrida por un cuerpo con aceleración constante a (en este caso, la gravedad, o g), luego de t segundos es:

s = v0 * t + a * t2/2

donde v0 es la velocidad inicial. Como en tu ejemplo calculas el momento justo en que empieza a caer, v0 = 0, por lo que sólo queda: a * t2/2, y de ahí salen las distancias que te puse. Esas son las que te daría con la fórmula que yo te puse, y que en realidad es la misma que se usa en este fragmento de código que acabas de poner:

Código
  1. BallZ = BallZwhenstriked + AlexFuerzadetiros * Tiempotranscurridodeltiro * Senodelangulodeltiro;
  2. BallZ = BallZ - 0.01 * Tiempotranscurridodeltiro*Tiempotranscurridodeltiro /2;

Citar
Considerando que estás trabajando en 2d y midiendo las distancias de un modo más complejo que yo, primero te pediría que me digas cómo obtengo DistanciahastaDestinoX y DistanciahastaDestinoY.

Primero, corrijo un error de tecleo de mi mensaje anterior. Donde puse:

Citar
Nota que estamos combinando DistanciahastaDestinoX y DistanciahastaDestinoX en una sola dimensión,


Debería decir:

Citar
Nota que estamos combinando DistanciahastaDestinoX y DistanciahastaDestinoY en una sola dimensión,

Creo que era muy obvio, pero mejor aclarar.

Ahora, DistanciahastaDestinoX y DistanciahastaDestinoY son exactamente las variables que se supone que tú ya tienes, como pusiste en tu primer mensaje. Recuerda que como te mencioné ahí, cuando use tus nombres de variables, me estaré refiriendo a ellas desde la vista aérea. O sea, en cualquier ecuación que yo ponga, si aparecen nombres de variables de tu código, las debes poner tal cuál las tengas, sin necesidad de convertirlas.


Citar
Empecemos por eso o, si quieres, continúa donde la otra persona me dejó, te muestro lo que me parece más relevante del cálculo pero si crees que falta algo me puedes avisar.

Lo de revisar y arreglar lo de la otra persona sería una pérdida de tiempo para mí, dado que en mis otros dos mensajes ya está, me parece, casi todo lo necesario para implementar lo que quieres.

Citar
DistanciahastaRed no entiendo cómo está calculada.

Esto sí es conveniente explicarlo, dado es algo que omití porque, como te dije en el mensaje anterior, no sabía si ya lo estabas calculando. Va un ejemplo para entenderlo. Supongamos que la distancia hasta la red estuviera justo a la mitad del trayecto desde el jugador al destino (DistanciahastaDestinoXY). Entonces:

Código
  1. DistanciahastaRed = DistanciahastaDestinoXY * 0.5;

Y si en realidad la distancia hasta la red fuera 1/4 de la distancia al destino, multiplicarías por 0.25, etc. Así que necesitamos calcular esa razón (1/2, 1/4, etc.) y con ello obtenemos DistanciahastaRed. Dado que conocemos la distancia en Y hasta la red (BallY-300), y también la distancia en Y hasta el destino DistanciahastaDestinoY, si las divimos, conseguimos el valor necesitado. Así, en cada tiro:

DistanciahastaRed = DistanciahastaDestinoXY * Math.abs(BallY-300) / DistanciahastaDestinoY;

la parte en negrita será 0.5, 0.25, etc.
17  Programación / Programación C/C++ / Re: Ordenar un string. en: 14 Abril 2023, 20:48 pm
¿Un string? Eso significaría que tienes una única cadena con el valor "L845,L001,A648,A001" y la quieres "ordenar", pero evidentemente, por sí solas, las funciones estándar de ordenamiento no van a saber que se trata de distintos valores separados por comas, así que supongo que en realidad te refieres a una colección (por ejemplo, un vector) de varias cadenas que respectivamente tienen los valores "L845", "L001", etc. ¿no?

Si es así, entonces sí se ordenarían también los números, y en tu ejemplo el orden quedaría justo como lo planteas, suponiendo que uses la función estándar típica para esto (std::sort). Lo importante es entender cómo se comparan de forma predeterminada las cadenas en C++: caracter por caracter y usando su valor ASCII. O sea, no deberías mezclar minúsculas con mayúsculas, y los números deben tener un número de dígitos fijo. Ya lo estás haciendo correctamente en el ejemplo que pones, así que mientras no rompas ese patrón, no debería haber problema.
18  Foros Generales / Dudas Generales / Re: Hola soy nueva aprendiendo C++ en: 6 Abril 2023, 00:43 am
La mejor manera de motivarse, en mi opinión, es tener objetivos, así que lo primero es pensar por qué quieres aprender a programar, qué temas te interesan. A lo mejor es la programación gráfica, o de compiladores, sistemas operativos, redes, juegos, etc. Si, como dices, te gusta mucho la programación, debe haber por lo menos dos o tres áreas que de verdad te llamen la atención.

Luego elige alguna de esas cosas y proponte aprenderla. Para eso, lo mejor siempre es tener uno o dos libros sobre el lenguaje y aprender al menos lo básico. No hace falta, como en algunos sitios se recomienda, haber terminado un libro de 700-1000 páginas para empezar a hacer proyectos grandes. Eso es una tontería. Sí es indispensable tener una buena base, pero una vez que consigues eso, hay que empezar a hacer programas más "reales", aunque sin dejar de leer. Teoría y práctica van de la mano. Mi punto simplemente es que sin proyectos (los ejercicios de juguete que plantean los libros no cuentan) es imposible aprender bien, por más que te leas un libro entero.

Una vez que tienes los fundamentos (en C++, diría que lo mínimo indispensable para poder entender los cursos o manuales de los temas que te interesen sería el uso de arrays, punteros, clases, y de preferencia, contenedores básicos de la STL, como string y vector), empieza hacer proyectos simples sobre el tema que te interese. Por ejemplo, si quieres hacer programas en red, podrías empezar por crear un chat simple en modo texto. Una vez que lo termines y funcione bien, podrías seguir con un programa que permita enviar archivos, etc. Lo importante es que te propongas un proyecto pequeño a la vez y lo termines, para después ir subiendo la complejidad de forma gradual. De esa manera, en todo momento vas a tener resultados tangibles de lo que has aprendido. Pero reitero, en ningún momento dejes de lado el libro de C++ que estés leyendo. Simplemente, al llegar a este punto, reparte tu tiempo entre los proyectos y el aprendizaje del lenguaje.


Por cierto, ¿puedes leer en inglés? Porque si necesitas recomendaciones de libros, para ciertos temas es muy difícil, si no imposible, encontrar títulos en español.
19  Foros Generales / Dudas Generales / Re: Hola soy nueva aprendiendo C++ en: 5 Abril 2023, 19:45 pm
Antes de aconsejarte algo, ¿cuál es exactamente el problema que tienes? ¿Es que llegas a un punto en donde te cuesta aprender y ya no logras avanzar por la dificultad del tema? Porque por lo que comentas de la motivación, me da la impresión de que más bien te pasa, como a mucha gente, que luego de estudiar un tiempo te empiezas a aburrir porque no sabes en qué puedes usar lo aprendido, y te empieza a parecer tedioso estar leyendo y haciendo ejercicios de libro, así que mejor lo dejas. ¿Es eso, o se trata de dificultad?
20  Programación / Bases de Datos / Re: Ejercicio Algebra Relacional - Operación derivada: Cociente en: 4 Abril 2023, 21:32 pm
Primero te aclaro que hace años que no toco nada de ese tema; de hecho, sólo lo vi en la universidad y creo que jamás lo volví a usar. Dicho lo anterior, me parece que sí está bien tu resultado. Al menos es lo mismo que yo respondería.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 24
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines