|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Amilius
Páginas: 1 ... 18 19 [20] 21 22 ... 27
476
« en: Martes 5 de Octubre de 2004, 19:02 »
Está bien. Aunque existe alguna posibilidad de que alguien utilice esa información para mosquear a los compañeros de la oficina creo que el hecho de que sea necesario acceder físicamente a la máquina justifica sobradamente tu mensaje y te pido disculpas por ello. Cuando quieras puedes pegar nuevamente la información.
Un saludo. Muy cierto, pero bastaría con tener el setup del bios con contraseña y que sólo se pueda arrancar desde el disco duro principal. Así no existe otra alternativa que abrir la máquina y eso ya no creo que se animen a hacerlo sólo para mosquear.
477
« en: Martes 5 de Octubre de 2004, 18:50 »
Un bug. Los equipos no informan adecuadamente al servidor cuando son apagados, en el onclose de la aplicación debería mandar el mensaje de me estan cerrando... puede ser que por algún motivo ese mensaje no llegue a destino.
Otra forma es que envien periodicamente un mensaje "estoy vivo" y cuando ya no lo envien... bueno ya están muertos. =P
Por ejemplo que envien cada 10 minutos "estoy vivo". Si el servidor nota que en 11 minutos no llego el mensaje entonces da por "muerto" al equipo.
478
« en: Martes 5 de Octubre de 2004, 18:42 »
Pasos a seguir: 1.- Evita infra-utilizar bibliotecas de funciones. Si sólo deseas abrir archivos .gif estáticos, busca un componente que sólo realize esa función y no uno que además comprima y los anime. Ten cuidado con bibliotecas que adosan al ejecutable imágenes y otros tipos de datos que posiblemente no vayas a utilizar. 2.- Al momento de compilar la aplicación asegurate de eliminar toda la información para debug configurando las opciones de compilación para que no genere esta información para la versión a distribuir. 3.- Eliminar el "relocation section" del ".exe". Este es necesario para los .dll pero no pare el ".exe". Utiliza esta herramienta: (Viene con código fuente bajo licencia open source para delphi 5) http://www.jrsoftware.org/striprlc.php4.- Hasta este paso sólo se quitaron partes no funcionales del archivo ejecutable. El siguiente paso es comprimir la información funcional del ejecutable, utiliza esta herramienta que también viene bajo licencia open source: (No la uses indiscriminadamente en ejecutables ajenos, puede ser que el ejecutable necesite su estructura de archivo intactacta por X o Z razón. Por supuesto tu sabes si tu ejecutable lee su mismo archivo ".exe" para buscar alguna información.) http://upx.sourceforge.net/Finalmente tienes un archivo ejecutable comprimido. Ventajas: + Un +-10% de ganancia de compresión respecto al .rar .zip para fines de distribución por internet. + El código está algo más protegido de hackers no profesionales al estar comprimido. + El ejecutable final ocupa menos espacio en disco. Desventajas: - Al momento de ejecutar la aplicación se descomprime todo el ejecutable en memoria, lo que consume una fracción de segundo y la misma cantidad de memoria extra del tamaño no comprimido del ejecutable. En la actualidad estas desventajas no son notadas por el usuario final, hagan la prueba, corran ambas versiones de sus ejecutables y verán que no existe diferencia palpable para el usuario final.
479
« en: Martes 5 de Octubre de 2004, 18:03 »
No de cualquier máquina, sino de una máquina que estés administrando, es la última opción antes de reinstalar el XP. Si realmente quieres proteger tus archivos tienes que encriptarlos con la opción que da el XP, con el riesgo que si pierdes la contraseña olvidate de ver tus archivos encriptados. Además alguien dijo que esto no se podía hacer en XP y si vio que se podia hacer en linux y demas bla bla así que puse el post para demostrar que no es asi (otra cosa es que te borren la contraseña desde internet =P). Por ejemplo: Tu jefe se olvidó su contraseña y claro, era el administrador de su equipo. Si existiera otra cuenta de administrador para ese equipo podrías "resetear" su contraseña ya que no se pueden recuperar por el tipo de encriptación. Si no existe otra cuenta de administración sólo existe esta posibilidad de "resetear" la contraseña del administrador antes de tener que reinstalar todo con la pérdida de tiempo que implica. Por supuesto instalando otro disco duro de arranque podrás acceder a los archivos... Si alquien realmente desea acceder a tus archivos no encriptados y tiene acceso físico a tu máquina simplemente la desarmará y se llevará el disco duro. Te aseguro que no es un fallo de seguridad del XP, a diferencia de muchos otros fallos que si son peligrosos (Sería como decir que dejaron una puerta abierta de un muro que no existe). P.D. Lo de "o como hackear el XP en 40 segundos" era para atraer la atención del público.
480
« en: Domingo 3 de Octubre de 2004, 05:52 »
Muy probable que sea el modem. En mi caso el modem de mi nueva máquina (que ni hacía "ruiditos" al conectarse) no podía mantener la conexión por más de 10 minutos, así que instalé mi antiguo modem "genius" y todo volvió a la normalidad... Ahora el otro modem está donde debe estar: en la basura!
481
« en: Domingo 3 de Octubre de 2004, 05:47 »
Si conoces la contraseña de otro administrador activo en la máquina puedes resetear la contraseña olvidada de otro usuario o administrador. Si no existe otra cuenta de administrador cuya contraseña recuerdes entonces tendrás que resetear la contraseña mediante estos pasos que incluyen crear un disco de arranque especial, para lo cual tendrás que configurar el bios para que el sistema pueda arrancar desde disquetera. Esto sólo se debe aplicar como última medida desesperada si no recuerdas la contraseña del único administrador activado, antes de proceder a usar otro disco de arranque y reinstalar todo. Todos los archivos cifrados se perderán (no podrán ser descifrados) al momento de "resetear" la contraseña (igual sucede si teniendo otra cuenta de administrador "reseteas" la contraseña de otro usuario). Nota Importante:Esto no es para "jugar", ¿Recuerdan que es la última opcion antes de reinstalar el windows XP y todos los programas? Pues eso significa que si algo sale mal (por ejemplo por la versión del sistema operativo, tipo de sistema de archivos, tipo de partición de hd.) tendrán que seguir con el plan original y reinstalar el xp y todos los programas. A continuacion copypasteo los pasos a seguir para resetear la contraseña: Bajar el archivo : bd040116.zip
1-Pasas el contenido de bd040116.zip al diskette. Para ello ejecutas install.bat. Y cuando te pide el "target" pones A:/ y le das a enter. Luego metes un diskette en la diskettera y le vuelves a dar a ENTER. Cuando termine te dira DONE!, y que reinicies el güindows. 2-Lo metes en tu PC y reinicias 3-Al terminar de cargar el mini-linux (tranquilo que cuando todo acabe seguirás teniendo el WinXP, ya que el mini-linux no se instala en el dd) te saldrá una pantalla con las particiones que tiene hechas tu disco duro (en adelante dd). Bien, si sólamente tienes una, la cosa es bien sencilla, pulsas 1 y despues ENTER. Si tienes 2 o mas particiones, tendrás que buscar en quel esta instalada el S.O., debería de estar en una que ponga boot... 4-Nos pide la ruta de donde estael registro del sistema operativo windows, que por defecto es "winnt/system32/config", asi que si no lo has tocado, será esa... Entonces metes la ruta que te he puesto y le das a ENTER. 5-Ahora verás que nos sale un listado de opciones. Pues bueno, tu tienes que darle al 1 y después a ENTER (1-Password Reset) 6-Más opciones...Nada, nada, tu a lo tuyo. Le das al 1 y después al ENTER (1-Edit user data and password. Seguidamente te aparecerá el listado de usuarios que usan el ordenador. 7-Normalmente, el primer usuario de la lista, es el Administrador, así que le das a ENTER y ya está. Si quisieras cambiar, dále al número que tiene el Usuario y depués al ENTER. Por ejemplo: 1-Administrador 2-Invitado 3-Juanito Pues para entrar a Juanito, tienes que pulsar 3 y ENTER. 8-Ahora te saldrán unos cuantos datos del usuario, y abajo del todo, nos dice que pongamos un nuevo password. Pues bien, si quieres eliminar el password, simplemente pones * y le das a ENTER. Si la quisieras cambiar simplemente pones la contraseña nueva, y le das al ENTER. 9-Ahora te pregunta si realmente quieres cambiar el password, tu si que quieres ¿no? .Pulsas la tecla "y" y ahora pulsas enter. 10-Bien, esto de ahora es importante, ya que si no no cambiara/eliminara el password. Pulsamos Shift + 1 para que nos salga el signo de exclamación (!) , y despues ENTER. 11-Ahora estamos en el menú principal. La opción que guardará los cambios es la última, Quit. Pues ala, pulsas la tecla q y le das a ENTER. Nos pedirá la confirmación. Pues le das a la "y" y ENTER. Podrás ver el proceso en pantalla. Si sale OK al lado de las líneas es que todo ha ido bien y solo queda sacer el diskette y reiniciar windows, y si no le has puesto contraseña, escribes Administrador y le das a ENTER, y si le has puesto pass la escribes, y en teoría, si lo has hecho todo bien, ya tienes tu problema arreglado.
482
« en: Jueves 30 de Septiembre de 2004, 06:58 »
Usa el operador módulo: (realiza una división entera y obtienes el "residuo") // con en resultado entre [0...y-1] modulo:=x mod y; //Para tu caso [0..9] residuo:=numero mod 10;
Para enteros positivos el resultado puede ir de 0 a y-1. Si usaras módulos potencias de 2 es más rápido usar "and" en numeros enteros: Por ejemplo módulo 2,4,8,16,... (noten que se aplica la "máscara" correspondiente al modulo-1. Ej. para 2 es 1, para 4 es 3, para 8 es 7. El efecto de máscara se nota claramente al escribir los números en binaro ) modulo=x and $1; //Muy util para ver si es impar;) modulo=x and $3; modulo=x and $7; modulo=x and $F;
Aplicar el operador lógico de bits "and" para estos casos especiales (módulos potencias de 2 de enteros positivos) es de lejos la forma más rápida.
483
« en: Sábado 25 de Septiembre de 2004, 16:16 »
Esta es la forma básica, son 84 notas musicales de 0 a 83, 7 octavas + 5 semitonos por cada octava FUNCTION ELEVAR(BASE,EXPONENTE:REAL):REAL; BEGIN ELEVAR:=EXP(LN(BASE)*EXPONENTE) END; PROCEDURE INICIAR_NOTAMUSICAL(nota:byte); BEGIN IF nota<84 THEN SOUND(ROUND(ELEVAR(2,nota/12)*64{Modificar este valor, la frecuencia más baja, para calibrar la escala})) END; {OJO TIENES QUE LLAMAR A NOSOUND PARA DETENER EL SONIDO}
484
« en: Miércoles 22 de Septiembre de 2004, 16:23 »
Pero, ¿eso es IA o solo una gran base de datos?. Es IA (de la rama de sistemas expertos) por que la base de datos estaría estructurada de tal forma que se pueda utilizar un motor de inferencia, de forma que si en la base de datos tienes "si A entonces B", y también tienes "si B entonces C", puedas extraer la información que "si A entonces C". Se que no parece muy "mágico" pero con tal que haga su trabajo será suficiente. Tampoco las redes neuronales artificiales parecen muy "mágicas" pero funcionan muy bien clasificando, interpolando, autoregulando, etc y eso es lo que importa. P.D. El ser humano, bajo ciertas, condiciones puede ser tan programable como una computadora: Bajo las influencias de ciertos alcaloides como la ESCOPOLAMINA que se encuentra en algunos brebajes conocidos como "burundanga" (obtenido del "Datura arborea"), una persona se convierte prácticamente en un autómata programable carente de voluntad. Conocido también como "suero de la verdad" produce pérdida de voluntad (usado para producir el efecto "zombie"), pérdida de capacidad de retener en memoria todos los eventos que sucedan mientras la persona esté bajo la influencia de dicho alcaloide, aparte de alucinaciones. Esta drogra es ampliamente usada en circulos delincuenciales en violaciones, atracos, robos de tarjetas de crédito y claves personales. Asi que mejor se cuidan de que no les echen algo a su bebida o comida y al día siguiente despierten sin saber que paso toda la noche anterior, sin un centavo en sus bolsillos y con su cuenta bancaria en 0 y quien sabe que desgracia más...
485
« en: Miércoles 22 de Septiembre de 2004, 04:08 »
mi pregunta es, si una engine (por ej la del doom3) esta escrita en c++ y luego hay otra engine con las mismas caracteristicas exactamente, pero escrita en c/asm, la diferencia de rendimiento seria despreciable o por el contrario la 2º engine seria bastante mejor?? y si estuviese escrita totalmente en asm??? cambiaria asi mucho mas respecto a la programada en c/asm? Existe otro "detalle" que creo que no se ha tomado en cuenta. Al momento de realizar el pesado trabajo de optimizar cualquier tipo de programa usando "trucos avanzados" estás optimizando el código para un procesador de una determinada sub-familia. Por ejemplo: para tal modelo de intel o para tal modelo de amd. Esto lo escribo por que dependiendo del procesador los tiempos de proceso de las distintas instrucciones varían mas o menos un 5% a 20%, lo que en algunos procesadores se hace un poco más rápido en otros se hace un poco más lento... Así que mientras puedes estar optimizando el código para el modelo X de intel para ganar un 10% puedes estar perdiendo un 15% en el modelo X de amd o viceversa. Al final terminas con el lio de tener que crear y mantener dos versiones optimizadas del mismo código para distintos procesadores.
486
« en: Sábado 18 de Septiembre de 2004, 19:45 »
Ufa , me mataron, ahora tengo que ir para que me3 resusiten. ¿Hay trucos?
Y otra cosa: ¿Por que siempre que entro o salgo del juego el programa busca algo en la unidad de disket 3 1/2?
Sigo jugando haber cuantos de estos marones mato.
¿Puedo saber quien además de mí estan jugando cuando juego? (confusio ¿No?) Hasta ahora llevo ya 2 años y buenos meses programando y realizando los gráficos, edición de sonido, etc. De mes en mes empiezo a programar algunas cosas nuevas o agregar gráficos en mi tiempo libre. No hay trucos, no existe posibilidad de "trampa" para que sea un buen juego de rol. Para subir de nivel es necesario comprar buen equipo, saber como obtener materias primas a bajo precio y vender tus mercancía a buen precio para ganar algo de dinero y trabajar en equipo con otros jugadores. Es importante NO MORIR para no perder tus pertenencias y por que al ser resucitado tu experiencia necesaria para pasar de nivel se incrementará en el 25% del máximo total para el siguiente nivel sin pasar de dicho máximo (nivel actual*siguiente nivel*100). Para pasar de nivel 3 a 4 se necesitan 1200 puntos de experiencia. Evita matar a una criatura en frente de otras de su misma alineación o tendrás graves problemas. Nota: Al morir no pierdes el oro que tengas en tu bolsa de dinero, así que es bueno vender lo que ya no necesites. Cada tipo de criatura recibe distinto nivel de daño dependiendo del tipo de arma o conjuro con el que sea atacado. Por ejemplo los esqueletos reciben más daño de armas contundentes y ataques de fuego, pero son casi invulnerables al veneno. Los contempladores de armas punzantes. Los osos polares de armas con mayor daño para criaturas grandes/gigantes y reciben daño reducido de ataques mágicos de frío. Los centauros son bastante peligrosos en grupo por su ataque a distancia y flechas envenenadas. Para saber quienes más están jugando: Si en el servidor que montes te asignas permisos de administrador o si al que te conectes permite comunicación entre todos los jugadores con: "%Jugadores" y para hablar a todos ej.: "% Hola a todos!!!" (dejando un espacio después de "%" y antes del mensaje). P.D. ¿Por que siempre que entro o salgo del juego el programa busca algo en la unidad de disket 3 1/2? Esto es bastante raro por que no me paso nunca ni en XP ni en 98 y es la primera vez que tengo reporte que suceda. ¿Que tal si describes a buen detalle tu caso para ver que puede estar sucediendo?
487
« en: Sábado 18 de Septiembre de 2004, 18:37 »
...En este caso, el sistema no seria creativo, sino que, simplemente ejecutaria una serie de condicionen preestablecidas, como cualquier programa. Eso si, seria un programa infinitamente complejo. En ese caso si seria "gran cosa", menudo trabajo te llevaria!!!...
No creo que algun dia las maquinas igualen (y mucho menos, superen) el intelecto humano. Simplemente porque son maquinas... Exacto, NO ES NADA "CREATIVO" y ese es el punto. En realidad no es un programa complejo, sino extenso: con una base de datos gigantesca con la estructura de un sistema experto. Pero te recuerdo que muchas bases de datos en la actualidad son realmente titánicas. Y no es complejo (terriblemente moroso y tedioso para llenar la base de datos, pero complejo no) por que no es nada creativo, se limitaría a usar su base de datos con un motor de inferencia de sistema experto. Y no estés tan seguro de la perpetuidad de la supuesta superioridad del "intelecto" humano... la duda siempre es más saludable que la fe. Poco a poco las máquinas van realizando tareas que antes sólo se pensaba que podían ser hechas por humanos. El nivel de avance en este campo cada vez es más acelerado y eventualmente harán obsoleto al cerebro humano. La evolución es demasiado lenta y la gran mayoría de los humanos ya no están sometidos al rigor de la selección natural que asegura el avance evolutivo.
488
« en: Viernes 17 de Septiembre de 2004, 16:35 »
¿Como se programa un algoritmo capaz realizar semejante asociación? De programarlo se puede y no es gran cosa, bastaria con predefinir las asociaciónes necesarias. Claro que OTRA COSA es que SIN que exista un PROGRAMA PREVIO, un camino predefinido a la solución, la entidad pueda construir su propio camino a una solución práctica: Cortar madera de mejor forma. En foros de filosofía (y también en los de programación) se presenta el argumento contra la IA que se basa en que la máquina emplea la fuerza bruta en buscar posibles soluciones.
Ese no es argumento válido, los "filosofos" deberían investigar un poco... ¿Como demonios una computadora podría jugar estrategia en TIEMPO REAL con fuerza bruta? La respuesta es que la fuerza bruta es la última de las alternativas, como un humano intentando arreglar algo a golpes... (Claro que en estrategia en tiempo real como warcraft3 para la IA utilizan scripts, los que están predefinidos y optimizados por métodos de investigación operativa por humanos, así que fuerza bruta no es.) "no existira jamas una máquina que llegue a pensar como un humano"
... parece un extracto de alguna doctrina religiosa occidental (judeo-cristiana si prefieren)... Y la verdad que no les fue bien con las teorías de que la tierra era plana, el centro del universo, que existia diferencia entre la materia viva y la muerta, que no eramos animales evolucionados y la lista continúa.... ¿Leyeron Dune de Frank Herbert? En esa obra llega un momento que la humanidad se revela en contra de la existencia de las "máquinas pensantes", luego de una cruel guerra quedan prohibidas y la capacidad de las máquinas reducidas hasta cierto nivel que no se las pueda considerar "máquinas pensantes". Pero, ¿Que es una máquina? y ¿Que es un ser humano?. ¿Una entidad fabricada por el hombre que se comporte como un ser humano, es un ser humano?. Yo si considero muy probable que eventualmente sea construida una entidad capaz de llegar a superar las capacidades intelectuales del ser humano. Posiblemente tenga que ser "educado" durante varios años, pero luego su "mente" pueda ser "copiada" a cientos de miles iguales a la entidad. P.D. Definitivamente un cerebro no trabaja como una PC.
489
« en: Martes 14 de Septiembre de 2004, 16:21 »
El CRT (cathode ray tube). Los monitores CRT son los tradicionales: un cañón de rayos catódicos bombardeando la pantalla de fósforo con electrones para los 3 canales de color: rojo, verde y azul. Los electrones que llega a la pantalla de fósforo producen un destello de imagen, por lo que constantemente la pantalla es bombardeada con la frecuencia de actualización que configures para dar la ilusión de una imagen estática y no sólo una serie de destellos. Como la retina mantiene la imagen que percibe por una pequeña fracción de segundo no notamos este constante parpadeo. Si tienes un monitor de cristal líquido, esa frecuencia de actualización es sólo un timer para actualizar la matriz activa del monitor, si existieron cambios. La tarjeta de video no necesita obligadamente actualizar TODA la imagen CONSTANTEMENTE. Un CRT no tiene esa "matriz activa", por lo que desde la tarjeta de video constantemente se manda la señal para actualizar la imagen línea por línea. Con un CRT la imagen completa está "guardada" en la retina.
490
« en: Martes 14 de Septiembre de 2004, 09:00 »
Aqui me parece que me surge una duda
Veamos: Todos los monitores poseen una frecuancia de actualizacion de ~60 Hz. De esta forma, supongo que el retrazo vertical tardaría lo mismo en una 486 que en un pentium IV 3.4 GHz.
¿Es asi?
Thanks La respuesta a la duda es que o bien los frames por segundo del juego no están sincronizados con el refrescamiento vertical o sólo se llegan a los ~60 frames por segundo en máquinas actuales y en antiguas va a mucho menos de 60. P.D. En realidad es mejor usar una frecuencia de por lo menos 75 o mejor 80 Hz en un CRT. (Recomendaciones médicas bastante serias, el bendito 60Hz es un factor de riesgo que incrementa probabilidades de leucemia, esto sólo vale para monitores CRT.) En las pantallas planas esa "frecuencia de actualización" no tiene sentido (la imagen no se va opacando como en un CRT) y sólo queda nominalmente fijado a 60 Hz, aunque sólo se "refresca" cuando algo cambia en la pantalla, sólo los mejores monitores planos (afortunadamente cada vez mejora más ese tiempo de respuesta) tienen buen tiempo de reacción para cambiar la imagen que muestran lo suficientemente rápido como para llegar a 60 Hz. ¿Recuerdan los monitores planos antiguos? Se notaba claramente que no tenían buen tiempo de respuesta a los cambios en pantalla ya que quedaba una "estela" visible y molesta cuando algo cambiaba en la pantalla que no se desvanecía lo suficientemente rápido.
491
« en: Martes 14 de Septiembre de 2004, 08:37 »
Necesitas algo de código que funcione como TEMPORIZADOR "Timer" para sincronizar la animación, que la variable que indica que frame mostrar en pantalla se modifique en intervalos de tiempo controlados por tu programa y no por la velocidad de la máquina o eventos externos como teclas presionadas. Puedes usar o bien un timer o controlarlo todo desde un "bucle maestro" que pregunte a cada momento ¿ya es tiempo de un "tick"?
Es importante saber en que estas programando el juego, si te llaman cuando un evento sucede (una tecla fue presionada), o si tu tienes que pedir el estado de, por ejemplo, el teclado ¿Se ha presionado una tecla?
Si utilizas delphi te puedo pasar un poco de código para un buen timer (suponiendo que programas la interfaz orientada a eventos).
492
« en: Martes 14 de Septiembre de 2004, 02:26 »
Saludos a todos los miembros del foro. Los invito cordialmente a bajar la nueva versión del juego de rol en línea que estoy desarrollando de la dirección: http://groups.msn.com/legadodelasartesarcanasNota: Es necesario hacerse miembro para bajar los archivos.
493
« en: Jueves 9 de Septiembre de 2004, 02:07 »
Mi primer juego fue un círculo, con líneas que lo unían a las cuatro esquinas de la pantalla (Una mira para apuntar del laser ) que tenías que mover con el teclado para apuntar a una elipse pintada (Un platillo volador, el enemigo) antes que tuviera tiempo para acabar con tu nave (Cada cierto tiempo "disparaba" (un sonido) y te bajaba el escudo (unos cuadrados pintados abajo) ). Que tiempos aquellos, gwbasic y una AT 286.
494
« en: Martes 7 de Septiembre de 2004, 18:36 »
495
« en: Domingo 5 de Septiembre de 2004, 17:25 »
No estoy de acuerdo con la parte que muestra a delphi, tendría que existir un enlace, aunque sea débil, a C++, por que Delphi incluye tipos, formas de llamar funciones y algunas cosillas de C++ para hacerlo compatible con bibliotecas en formato dll. Además de extensiones de sintaxis que permiten más trucos de optimización, similares a los que se hacen en C++.
496
« en: Domingo 5 de Septiembre de 2004, 17:18 »
497
« en: Domingo 5 de Septiembre de 2004, 17:08 »
Adjunto una carta de respuesta conteniendo el código en el buen DELPHI para realizar rotación con antialisado. Si alguien consigue un componente para delphi o mejor un método para una clase heredada del Tbitmap sea bienvenido!!!. Verán que el nivel de complejidad de la operación a nivel de pixel es elevado, un montón de multiplicaciones y saltos (if). From: Harm <harmans@uswest.net> Subject: Re: 2d rotaion trouble! Date: 28 Mar 1999 00:00:00 GMT Message-ID: <36FE5D74.C74E566C@uswest.net> Content-Transfer-Encoding: 7bit References: <e5bL2.456$Xc6.578@news.get2net.dk> Content-Type: text/plain; charset=us-ascii X-Complaints-To: harmans@uswest.net NNTP-Posting-Date: Sun, 28 Mar 1999 10:48:22 CDT Newsgroups: comp.graphics.algorithms Here's Delphi pascal code to rotate an image any angle, with edge wrapping, and anti-aliasing. Converted and added the edge wrapping, from original VB code by Rod Stephens. At least it wasn't (shudder) C++. :) procedure TForm1.RotateAngle(Angle: integer); var Theta, cosTheta, sinTheta: Single; cx, cy : Single; //Center X, Y sfrom_y, sfrom_x : Single; //Real number ifrom_y, ifrom_x : Integer; //Integer version to_y, to_x : Integer; weight_x, weight_y : array[0..1] of Single; weight : Single; new_red, new_green : Integer; new_blue : Integer; total_red, total_green : Single; total_blue : Single; ix, iy : Integer; pb, pc : pRGBArray; begin Screen.Cursor := crHourGlass; CopyMe(ud,b); //Copy to the undo bitmap CopyMe(tBufr,b); //Copy to the internal buffer bitmap // Calculate the sine and cosine of theta for later. Theta:=-(Angle)*Pi/180; sinTheta:=Sin(Theta); cosTheta:=Cos(Theta); cx := b.Width / 2; //Center of rotation for x cy := b.Height / 2; //Center of rotation for y // Perform the rotation. for to_y := 0 to b.Height-1 do begin for to_x := 0 to b.Width-1 do begin // Find the location (from_x, from_y) that // rotates to position (to_x, to_y). sfrom_x := cx + (to_x - cx) * cosTheta - (to_y - cy) * sinTheta; ifrom_x := Trunc(sfrom_x); sfrom_y := cy + (to_x - cx) * sinTheta + (to_y - cy) * cosTheta; ifrom_y := Trunc(sfrom_y); // Calculate the weights. if sfrom_y >= 0 then begin weight_y[1] := sfrom_y - ifrom_y; weight_y[0] := 1 - weight_y[1]; end else begin weight_y[0] := -(sfrom_y - ifrom_y); weight_y[1] := 1 - weight_y[0]; end; if sfrom_x >= 0 then begin weight_x[1] := sfrom_x - ifrom_x; weight_x[0] := 1 - weight_x[1]; end else begin weight_x[0] := -(sfrom_x - ifrom_x); Weight_x[1] := 1 - weight_x[0]; end; if ifrom_x < 0 then ifrom_x := b.Width -1-(-ifrom_x mod b.Width) else if ifrom_x > b.Width-1 then ifrom_x := ifrom_x mod b.Width; if ifrom_y < 0 then ifrom_y := b.Height -1-(-ifrom_y mod b.Height) else if ifrom_y > b.Height-1 then ifrom_y := ifrom_y mod b.Height; // Average the color components of the four // nearest pixels in from_canvas. total_red := 0.0; total_green := 0.0; total_blue := 0.0; for ix := 0 to 1 do begin for iy := 0 to 1 do begin if ifrom_y + iy < b.Height then pc := tBufr.ScanLine[ifrom_y + iy] else pc := tBufr.ScanLine[b.Height - ifrom_y - iy]; if ifrom_x + ix < b.Width then begin new_red := pc[ifrom_x + ix].rgbtRed; new_green := pc[ifrom_x + ix].rgbtGreen; new_blue := pc[ifrom_x + ix].rgbtBlue; weight := weight_x[ix] * weight_y[iy]; total_red := total_red + new_red * weight; total_green := total_green + new_green * weight; total_blue := total_blue + new_blue * weight; end else begin new_red := pc[b.Width - ifrom_x - ix].rgbtRed; new_green := pc[b.Width - ifrom_x - ix].rgbtGreen; new_blue := pc[b.Width - ifrom_x - ix].rgbtBlue; weight := weight_x[ix] * weight_y[iy]; total_red := total_red + new_red * weight; total_green := total_green + new_green * weight; total_blue := total_blue + new_blue * weight; end; end; end; pb := b.ScanLine[to_y]; pb[to_x].rgbtRed := Round(total_red); pb[to_x].rgbtGreen := Round(total_green); pb[to_x].rgbtBlue := Round(total_blue); end; end; imSine.Picture.Assign(b); //all done, assign the bmp to our image Screen.Cursor := crDefault; end; morphix wrote: > I have some problems figuring how to do a 2d rotation on an image. The > resulting image has blank pixels (holes that isn't filled with color) > could anybody please show me an algorithm that works, (pascal, c, c++ or > pseudo) > > Morphix -- Harmans Omaha NE
498
« en: Domingo 5 de Septiembre de 2004, 16:19 »
Sobre 15,16,24 y 32 bits: =============== La ventaja del modo de 15 y 16 bits es el ahorro del 50% memoria (incluyendo el bono extra por reducir al 50% la transferencia de memoria), prácticamente sin tener deterioro visible en la calidad de la imagen salvo zonas de gradiente bajo de las texturas (que es contrarrestable con el conocimiento de las técnicas adecuadas de difusión). Bit15 Bit0 ?RRRRRGGGGGBBBBB (15 bits) 5 bits para cada canal, ventaja para optimización, menos calidad visual que en el modo de 16 bits, más ventajas al momento de optimizar. Bit15 Bit0 RRRRRGGGGGGBBBBB (16 bits) Un bit más para el canal verde por que es el color que mejor vemos los humanos, comparando al rojo y azul. La calidad de la imagen mejora notablemente. Tomemos la ecuación de nivel de percepción de colores al ojo humano: Y = 0.299 R + 0.587 G + 0.114 B Diferencia entre 15 y 16 bits: Datos iniciales: Error para 32 niveles de escala de grises= +-4 niveles como máximo (ojo mitad de 8, 8x32=256), lo que corresponde a un 1.5625% Para 8 bits=0%, (Por que vemos menos de 256 niveles de escala de grises normalizados). Error en 15 bits: 1.5625%( 0.299 + 0.587 + 0.114 )= 1.5625% Error en 16 bits: 1.5625%( 0.299 + 0.114 )+ 0.78125%( 0.587)= 1.096875% Error en 24 bits: 0% Error en 32 bits: 0% (8 bits utilizados generalmente como "canal alpha") Como ven, aumentar ese pequeño bit disminuye el error al 70% del error que teníamos en 15 bits. No duden que el modo de 16 bits seguirá siendo utilizado para almacenar texturas en memoria. Siempre será mejor tener 1% de error en calidad visual para tener el doble de variedad de texturas al mismo costo de consumo de memoria. Nota: Algunas tarjetas de bajo costo excluyen el modo de 15 bits, otras tarjetas antiguas no soportan el modo de 16 bits pero si el modo de 15bits, como las ATI de 8MB.
499
« en: Sábado 4 de Septiembre de 2004, 20:23 »
500
« en: Sábado 4 de Septiembre de 2004, 20:15 »
Alguna cochinada que habrán bajado los usuarios. Si quieres más dolores de cabeza puedes instalar el service pack 2 para XP (XP SP2), en teoría evita instalaciones y actualizaciones automáticas de virus. OJO que tiene una laaaaaaaargaaaaaaaaaaaa lista de programas, juegos, compiladores, etc que no funcionan bien con el XP SP2. Link al problema: http://support.microsoft.com/default.aspx?kbid=842242Aqui van unas listas adicionales a la que esta en el anterior link: PROGRAMAS INCOMPATIBLES CON SP2. - AOL Toolbar (1.13.2) - BitDefender (7.2) - BitDefender AntiSpam (7) - BlackICE (3.6 crj) - BootSkin (All) - Command Antivirus (4.9) - Encyclopedia Britannica 2000 Deluxe (1) - eTrust EZ Armor (1) - Freedom Force (1) - Kaspersky Anti-Virus (German) (5) - Live Motion (1) - MapSend DirectRoute (1.0) - MPEGcraft DVD (All) - NBA LIVE 2000 (1) - Norman Personal Firewall (1.4) - Norman Personal Firewall (1.4) - Norton AntiVirus (2003) - Norton SystemWorks 2003 - GoBack Personal Edition (2003) - Norton SystemWorks 2004 - GoBack32 (2004) - OmniPage Pro (11) - Outpost Firewall (2.1) - PaperPort Deluxe (8) - Pinnacle Studio (9) - Rational ClearCase (2003) - Roboword Pro (Japanese) (6) - Semagic (1.3.9.6) - Style XP (2) - Virtual PC (2004) - VirusSecurity 2004 (Japanese) (2004) - Window-Eyes Professional (4.2) - WinRoute Pro (4.25) - WordPerfect Office (11) - Yahoo Instant Messenger (6) - ZoneAlarm (3.7) - ZoneAlarm (4) - ZoneAlarm (4.5x) - ZoneAlarm (5.0.590) "En la web vi que el nuevo firewall de XP SP2 da problemas con los siguientes juegos:" (De un foro de juegos) * Age of Empires II: Age of Kings * Chess Advantage III: Lego Chess * Combat Flight Simulator 3 * Command & Conquer: Generals * Command & Conquer: Generals Zero Hour * Command & Conquer: Red Alert 2 * Conflict: Desert Storm * Dead Man´s Hand * Earth & Beyond * Elite Forces Vietnam: Special Assignment 2 * Freedom Force * Max Payne 2: The Fall of Max Payne * Medieval Total War * Midnight Outlaw: Illegal Street Drag * MotoRacer * NASCAR Racing 2003 * NBA Live 2000 * Need for Speed Hot Pursuit 2 * Roller Coaster Factory * Scrabble * Serious Sam: The Second Encounter * SimCity 4 * Star Trek StarFleet Command III * Star Wars: Knights: of the Old Republic * StarCraft * Tom Clancy`s Rainbow Six 3: Raven Shield * Tribes 2 * Unreal II * Unreal Tournament 2003 * Unreal Tournament Game of the Year Edition * Warcraft III: Reign of Chaos Collector`s Edition
Páginas: 1 ... 18 19 [20] 21 22 ... 27
|
|
|