E_sama
Usuario (México)
Que tal gente de taringa espero todos se encuentren bien El dia de hoy les comparto una serie de paginas que les pueden ser de gran utilidad si es que practican la programacion. Tod@s sabemos que a veces queremos aprender un nuevo lenguaje de programacion o simplemente probarlo y a veces es fastidioso el tener que instalar compiladores, maquinas virtuales,ide´s,editores, consola REPL,etc. O bien por razones de diferente indole no estamos en nuestra computadora la cual ocupamos para programar. Pues bien nuestra solucion es simple si tenemos conexion a la internet, acceder a Compiladores Online los cuales son capacez de correr nuestros programas y poder descargalos ya compilados Sin mas les dejo los enlaces hacia los compiladores Online que a veces uso yo. Compiladores: Java http://www.compileonline.com/compile_java_online.php C++ http://www.compileonline.com/compile_cpp_online.php C http://ideone.com Y otros como Haskell,Pascal,Ensamblador,Ada....etc Que podras encontrar en esta grandiosa pagina http://compileonline.com REPL´s Python http://repl.it/languages/Python/ Java http://www.javarepl.com/console.html CLOJURE http://www.tryclj.com Y otros REPL´s "Solo lo que es utii puede tener valor"http://repl.it/languages "Solo lo que es utii puede tener valor"

Desde hace ya mucho tiempo esta grandisima aplicacion se ha ganado la aceptacion de muchos usuarios Linux, como servidor streaming gratuito para los que no tienen idea que significa esto es decir un NETFLIX libre. PopCorn Time tuvo sus malos ratos tanto que fue cancelado por los derechos de autor sin embargo como el ave fenix ha resurgido y ahora mucho mejor que nunca, con versiones para mas sistemas operativos contando con el que debe ser el mas usado me refiero a Microsoft Windows. Un poco de historia de la Wikipedia Popcorn Time originalmente fue desarrollado "en un par de semanas" por un grupo de Buenos Aires, Argentina quienes fueron elegidos por "Pochoclín" (derivado de "pochoclo", que es palomitas de maíz en la jerga argentina), que es su mascota. Ellos creyeron que la piratería era un "problema de servicio" creado por "una industria que representa a la innovación como una amenaza a su receta antigua para cobrar valor", y también argumentaron que a los proveedores de streaming se les estaba dando demasiadas restricciones y que se les estaban obligando a prestar servicio de forma inconsistente en algunos países, señalando que los proveedores de streaming en su Argentina natal "parecen creer que There's Something About Mary es una película reciente. Esa película sería sufientemente vieja como para votar aquí". Hecho disponible para Linux, OS X, Android y Windows, el código fuente de Popcorn Time es alojado en GitHub como un proyecto de código abierto; los contribuyentes tradujeron la aplicación a 44 idiomas. Yo recomido de manera amplia para evitar problemas de Codecs y puedan disfrutar de una calidad de video buena el instalar e que yo considero el mejor reproductor de medios para Windows (Y en Linux NO he encontrado ninguno mejor xD) me refiero a MPC-HC que tambien es un software de codigo abierto. Les dejo el Link https://mpc-hc.org/ Seleccionen el indicado para su sistema operativo e instalen Si no sabes si tu Windows es de 32 o 64 Bits, haz lo siguiente (Tecla de Windows + E ) // Esto abrira la ventana de equipo en la parte superior dice "Propiedades del sistema" haz click te saldran las especificaciones de tu sistema Tipo de sistema: sistema operativo de 64 bits // Te saldra algo por el estilo Despues ve al siguiente Link que es el de PopCorn Time descarga e instala https://popcorntime.io/ Aunque para Windows aun se encuentra en Version Beta es bastante recomendable Despues de aceptar los terminos y condiciones les saldra la pantalla de bienvenida que es bastante agradable, donde pueden ver muchas grandes peliculas, series, anime Para ver una pelicula seleccionamos con un simple click Para cambiar el reproductor por defecto que trae consigo el PopCorn Time hacemos lo que indica la siguiente imagen // Exodo : Dioses y Reyes . Una de las peores peliculas que he visto en el cine deberian devolverme los $38 (Pesos mexicanos) que pague por ver esta porqueria Algunas capturas mas de PopCorn Time El Hobbit : La Batalla de Los 5 ejercitos // Mi pelicula favorita del 2014 junto a Interstellar estas si valen la pena gastar en el cine en la IMAX “No todo el que camina sin rumbo está perdido” J.R.R.Tolkien
Hoy crearemos un Boton de apagado (En realidad es un acceso directo para apagar tu equipo de un solo click) para el windows 8 o cualquier version de windows que tengas link: http://www.youtube.com/watch?v=W9a6DrkRXfU&feature=youtu.be 1.- Vamos al escritorio 2.- Damos click Derecho 3.- Damos en "Nuevo" 4.- Damos click en "Acceso Directo" 5.- Se abrira una ventana que lleva como titulo Crear acceso directo, nos pedira escribir la ubicacion del elemento 6.- Aqui esta la clave para apagar el equipo: usaremos un comando muy sencillo del cmd el comando es: " shutdown -s -t 0 " 7.- Despues de escribirlo damos click en siguiente 8.- Nos saldra una ventana en donde nos preguntara que nombre queremos darle al acceso directo le ponemos el que sea yo le pondre "Apagar" 9- Damos click en finalizar y listo nuestro acceso directo para apagar nuestro equipo esta listo xD --- Para apagar nuestro equido solo basta darle doble click en el acceso directo y ya--- 10.- Podemos ponerle un icono para que se vea mejor damos click 11.- Damos click derecho en nuestro acceso directo que creamos 12.- Damos click en "propiedades" 13.- Nos aparecera la ventana de propiedades y buscamos donde dice "Cambiar icono..." damos aceptar y buscamos el icono que mas nos guste en este caso usare el de apagado ya saben el uno dentro del cero 14.- damos aceptar nos regresa a la ventada de propiedades y damos aceptar para salir y listo. Gracias por ver este pequeño tutorial Por: E-sama xD
hola amigos taringueros bueno es mi primer post no eh tenido mucho tiempo asi que esta sencillo es un pots de mi propia autoriA como ayuda didactica a todos aquellos que estudian igual que yo alguna ingenieria en computacion o electronica o simplemente por el gusto de saber ...... muy bien pues comenzaremos les enseñare el kame hame hame haha a no verdad para eso tendrian ke pasar 50 años jeje como ya han de saber el sistema octal tiene solo 8 digitos comprendidos desde el 0 al 7 teniendo estos los valores pues igaules a los decimales sin embargo la potencia de estos numeros radica en que el orden posicional en verdad es diferente ya que en lugar de ser de potencia de 10 como en el decimal aqui las potencias son de 8.existen varios metodos para sumar numeros con base 8.una de ellas es convertir todo a binarioejemplo2 + 7 = 11 en bin seria 10+111=1001 en dec 2 + 7= 9este medoto es bueno solo si no se trata de un numero demasiado grande ...sin embargo un metodo mucho mas facil es el de hacer la suma octal como esta sin conversiones..ejemplo2+3= 5 jejej facil no solo ke no todas son asisiguiente ejemplo:5 + 5= 12 haces la suma en decimal tal como te enseñaron en maternal jeje 5+5= 10 pero no puedes poner el 10 tal como esta por que exede a la potencia de 8 en la que esta escribirlo bien solo hacemos esto 5 + 5 = 10-8=2 y arrastramos el digito ke se desborta ke en este caso es el 1 ya ke el ocho cabe 1 vez en el 10 y sobra 2 ... ponemos el 2 en el lugar de las potencia 8 a la 0 y el 1 en la potencia 8 a la 1.asi pues tenemos2*8 ^0+ 1 *8 ^ 1=102*1+1*8= 102*8= 10y eso es todo solo ahi ke recordar que el acarreo o carry se da caundo se exede de 8 y no caundo se exede 10 como el sistemas decimal.. espero les guste suerte proxiamante creare mas pots solo necesito tiempo

Seguramente nos hemos topado con el problema de generar N cantidad de Clientes para una base de datos, o alguna otra cosa, y es una labor que requiere mucho tiempo inventar personas , con identificadores y teléfonos diferentes, con los campos comunes como Nombre, Apellido ,Dirección, fecha de afiliación etc. Una solución adecuada seria tener un programita que nos genere estas personas ficticias. Pues bien eso es lo que les traigo. Supongamos una tabla como la siguiente: CREATE TABLE `cliente` ( `id_cliente` char(5) NOT NULL, `nom_cliente` varchar(45) NOT NULL, `apellido_pater` varchar(30) NOT NULL, `apellido_mater` varchar(30) NOT NULL, `direccion_ciudad` varchar(30) NOT NULL, `direccion_colonia` varchar(45) NOT NULL, `direccion_calle` varchar(45) NOT NULL, `direccion_numero` int(4) NOT NULL, `fecha_afiliacion` date NOT NULL, `telefono_cliente` int(7) NOT NULL, PRIMARY KEY (`id_cliente`), UNIQUE KEY `telefono_cliente_UNIQUE` (`telefono_cliente`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; Que debe ser rellenada de la siguiente manera Bien pues tenemos nuestro programita escrito en Java que sirve para generar N clientes, por defecto yo puse como Ciudad "Oaxaca de Juarez" pero ustedes pueden modificar en el código, que es sencillo, igualmente pueden editar los nombres, apellidos, colonias,etc, con tan solo modificarlos en los archivos *.txt que componen el programa. Aquí una muestra del funcionamiento del programa. Solo tenemos que pasar como parámetro el numero de clientes que deseamos. Tan fácil como dar click en el botón generar y listo Aquí les dejo el link del programa es proyecto NetBeans: https://drive.google.com/#folders/0B6H2cOm_wRaDTkJSaHEzSTNpd0E Si no tienen NetBeans descarguenlo es una muy buena herramienta IDE, mas si te da flojera un poco escribir xD. Aquí puede descargarse. https://netbeans.org/downloads/

Aquí con un nuevo post muy sencillo, hace ya tiempo que hice este código como tarea y les comparto el código y el pdf donde viene una breve explicacon espero les sea de utilidad Pila Ligada Una pila es una estructura de datos lineal en la cual se obtiene acceso a los datos en un orden especifico. Primero en entrar ultimo en salir (LIFO). Se observa que e una Pila los datos entran y salen por el mismo lado Para una pila Ligada necesitamos un Nodo que es como una envoltura que contiene el dato y el enlace a un nodo siguiente A continuación la clase Nodo /** * Write a description of class Nodo here. * * @author (Eli Alejandro Salinas Perez) * @version (a version number or a date) */ public class Nodo { // Necesitaremos un Nodo, imagenemos un nodo como una envoltura que contiene un dato, y tambien contienen // el enlace a otro dato //Declaramos los atributos del Nodo, un nodo se compone de un dato y de un enlace que es un Nodo private Object dato; // Nuestro dato sera de tipo Object para hacerlo mas generico private Nodo siguiente; // El nodo se llamara siguiente ya que contiene el enlace al siguiente nodo // Creamos nuestro Constructor . // Que parametros debe llevar el construtor?? La respuesta es simple, El dato que se almacenara public Nodo(Object dato){ this.dato=dato; this.siguiente=null; // El sigueinte comienza en nulo porque podemos tener un solo nodo } // A contnuacion haremos los set y get de nuestros atributos public void setDato(Object Dato){ this.dato=dato; // por eso prefiero Netbeans , los get y set los gneera solo jejee } public Object getDato(){ return dato; } public void setSiguiente(Nodo siguiente){ this.siguiente=siguiente; } public Nodo getSiguiente(){ return siguiente; } // Ya quedo nuestra clase Nodo asi de sencilla } Ahora la clase Pila /** * Write a description of class Pila here. * * @author (Eli Alejandro Salinas Perez) * @version (a version number or a date) */ public class Pila { Nodo tope; // que contiene nuestra pila priemramente un tope, que se refiere a cual es el nodo ultimo dentro de // pila int cont; // un contador que permite saber cuantos elemntos existen en la pila public Pila() { tope = null; // la pila debe iniciar vacia es decir sin ningun nodo } // Nuestro metodo vacia(), determina si nuestra pila esta vacia, como se que esta vacia? pues esta vacia // cuando el tope es nulo es decir no existe ningun nodo public boolean vacia(){ if(tope==null) return true; return false; } // nuestro metodo push() es el que agrega a la pila los elementos, que recibe pues el dato que es de tipo Object // para ser mas generico public boolean push(Object ob){ Nodo aux=new Nodo(ob); // El dato es guardao en un Nodo, se crea un objecto nodo que contiene el dato pasado if(aux!=null){ // Si nuestro nodo no es nulo agrega aux.setSiguiente(tope); // el tope ahora se enlaza a nuestro nodo que se inserta, es decir tenemos un nuevo tope tope=aux; // tope toma el valor de aux (todo el objeto, con su dato y su nodo siguiente) cont++; // contador aumento pues tenemos un nodo nuevo return true; } return false; } //Metodo pop , este metodo es el que elimina de nuestra pila, en una pila solo se puede eliminar desde el tope es decir el ultimo elemento que entro public Object pop(){ // para eliminar primero debemos comprobar que no se encuentre vacia if(!vacia()){ // si no esta vacia, entonces puede eliminar Object ob=tope.getDato(); // se obtiene el dato del nodo tope, guardandolo en un object temporal tope=tope.getSiguiente(); // ahora tope toma el valor del tope siguiente , con esto se a eliminado, pues el tope anterior que queda volando y el recolector de basura se lo // llevara ya que no encuentra referencia a ese nodo cont--; // contador se decrementa return ob; // se retorna el nodo que se guardo temporalmente para ser mostrado } return null; // si esta vacia retorna null o nada pues } // Ver tope solo nos permite ver el ultimo nodo sin eliminarlo public Object verTope(){ // de nuevo solo puedo ver el tope si existe algo en mi pila if(!vacia()){ return tope.getDato(); // retorna el nodo del tope y ya } return null; } // No es esencial tener el contador, si lo ponen agreguen los set y get del contador } Adjunto el pdf donde viene una pequeña prueba y el proyecto en Bluej Para la prueba es necesario usar el IDE Bluej, yo lo recomiendo si están en aprendizaje, podrán descargarlo aquí. http://www.bluej.org/
Hoy les traigo un código que les sera de buena utilidad, quien no se a topado con alguna restricción en la hora de agregar a un campo JTextField, supongo todos esto se hace para validar la información de entrada, digamos un campo edad debe venir en formato numérico, seria absurdo meter tu edad con letra, o en otro que únicamente admita letras. Para esto necesitamos implementar la Clase de escucha del teclado, llamada KeyListener y redefinir en método keyTyped, que hace este método KeyTyped pues este método se refiere a cuando una tecla se pulsa, es en este momento donde necesitamos la validación, pues nuestras aplicaciones no deberían de permitir un tipo de tecla en especial (la entrada de números o letras ,etc), como hacer esto???? Aquí la respuesta el código es fácil de hacer y entender. El de Letras public void keyTyped(KeyEvent ke) { char c=ke.getKeyChar(); if(Character.isDigit(c)) { getToolkit().beep(); ke.consume(); Error.setText("Ingresa Solo Letras"; } } El de Números public void keyTyped(KeyEvent ke) { char c=ke.getKeyChar(); if(Character.isLetter(c)) { getToolkit().beep(); ke.consume(); Error.setText("Ingresa Solo Numeros"; } } Aquí les dejo el link del programa: https://googledrive.com/host/0B6H2cOm_wRaDQ2lKSks2eTNVaFE/ Son dos programitas ambos hacen lo mismo uno esta hecho con la paleta de NetBeans y el otro no Aquí les dejo en imágenes como se hace 1.- Click Derecho sobre el JTextField Events > Key > keyTyped 2.- Nos lleva al código a editar 3.- Vamos con el otro 4.- Lo editamos para que acepte solo letras 5.- Probamos "El hombre es la medida de todas las cosas" Protagoras

A continuacion les dejo este pequeño Top 5 de los que yo considero los mejores libros de ciencia ficcion Los mejores que eh leido, fue muy dificil decidirme para ponerlos en orden pero segun yo quedarian asi 1.- 20000 Leguas de Viaje SubmarinoJulio Verne El Profesor Aronnax nos relata su epico viaje atravez del majestuso oceano abordo del Nautilus, junto con sus compañeros, el fiel Consejo y Ned Lan. Viviran grandes proezas y contemplaran de cerca lo impresionante de la vida submarina. Aqui el Libro Onlinehttp://www.luxdomini.com/_bib/contenido1/literatura/20mil_leguas_viaje_submarino_julio_verne.pdf2.- La Guerra De Los MundosHerbet George WellsLa novela es relatada por un sobreviviente al ataque marciano, H. G Wells nos adentra a un Mundo en guerra??? pero que guerra podria ser si en una guerra hay posibilidades de ganar sin embargo en esta solo nos queda esperar un milagro. La humanidad es pisoteada como un hombre pisa una hormiga.Desde otro puntodel espacio, intelectos fríos y calculadores y mentes que son en relación con lasnuestras lo que éstas son para las de las bestias, observaban la Tierra con ojosenvidiosos mientras formaban con lentitud sus planes contra nuestra raza.Libro Online Pongan el traductorhttp://translate.google.com.mx/translate?hl=es&langpair=en%7Ces&u=http://history-world.org/The_War_of_the_Worlds_T.pdf3.- El Planeta De Los SimiosPierre BoulleUna facinante historia en el cual el protagonista Ulises un reportero viaja en compania de otros dos hombres al planeta de Soror. En El cual Los Simios son la especie dominante y los hombres carecen de razon. Pasara por momentos dificil este hombre con "razon" con "alma". ¿Hombres racionales? ¿Hombresdetentores de la sabiduría? ¿Hombres inspirados por el espíritu...? No, esto noes posible. En esto, el cuentista se ha pasado de raya. Pero es una lástima.Aqui el libro Onlinehttp://fierasysabandijas.***/enlaces/planetsimi.pdf4.- Yo RobotIsaac AsimovMas que un relato increible Asimov nos plantea un mundo al cual estamos a punto de llegar en un futuro no muy lejano1. Un robot no debe dañar a un ser humano o, por su inacción, dejarque un ser humano sufra daño.2. Un robot debe obedecer las órdenes que le son dadas por un ser humano, excepto cuando estas órdenes están en oposición con la primeraLey.3. Un robot debe proteger su propia existencia, hasta donde esta protección no esté en conflicto con la primera o segunda Leyes.no haye el libro online en español se los dejo en ingles.http://preterhuman.net/texts/literature/books_by_author/A/Asimov,%20Isaac%20-%20I,%20Robot.pdf5.- Cronicas MarcianasRay BradburyUna serie de relatos muy buenos libro onlinehttp://www.taller54.com/rb3.pdfEspero que les haya gustado este pequeño top talves alguna que otra obra mas me haya faltado pero eso es mi top =)Hacia un mundo de lectoresDonde hay educacion no hay distincion de clases (Confucio)Vale la pena comprar estos libros y tenerlos en tu biblioteca personal
Buenas tardes gente de taringa El dia de hoy les traigo el ya conocido algoritmo para dibujar lineas de Bresenham implementado en lenguaje C++, aunque con la capacidad de poder dibujar lineas con pendiente negativa y dibujar bastante bien las lineas horizontales y verticales aun cuando x0>x1 y y0>y1 bueno sin mas les mando un gran saludo y les dejo este pequeño aporte de mi parte. *Dibuja en una sencilla matriz de char en consola, asi que no necesita nada de la librerias de graficos de borland o de openGl #include "Bresenhamv2.h" #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int tamanio = 75; char pantalla[75][75]; void Imprime(); void LineaBresenham(int x1, int y1, int x2, int y2); int main(){ bool sigue = true; char decide; while (sigue){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ pantalla = '.'; } } // Termina Llenado int x1; int y1; int x2; int y2; cout << "Ingresa x1 " << endl; cin >> x1; cout << "Ingresa y1 " << endl; cin >> y1; cout << "Ingresa x2 " << endl; cin >> x2; cout << "Ingresa y2 " << endl; cin >> y2; if (x1<0 || x1 > 75 || x2 <0 || x2 >75 || y1<0 || y1> 75 || y2 <0 || y2>75){ cout << "Ingrese Coordenadas entre 0 y 75" << endl; } else{ LineaBresenham(x1, y1, x2, y2); Imprime(); } cout << "Si desea seguir trazando lineas oprima Y, en caso contrario oprima cualquier tecla" << endl; cin >> decide; if (decide == 'y' || decide == 'Y'){ sigue = true; } else { sigue = false; cout << "Adios" << endl; } } return 0; } void LineaBresenham(int x1, int y1, int x2, int y2){ int pasoy; int pasox; int deltaX = (x2 - x1); int deltaY = (y2 - y1); if (deltaY < 0) { deltaY = -deltaY; pasoy = -1; } else { pasoy = 1; } if (deltaX < 0) { deltaX = -deltaX; pasox = -1; } else { pasox = 1; } int x = x1; int y = y1; pantalla = 'I'; if (deltaX>deltaY){ int p = 2 * deltaY - deltaX; int incE = 2 * deltaY; int incNE = 2 * (deltaY - deltaX); while (x != x2){ x = x + pasox; if (p < 0){ p = p + incE; } else { y = y + pasoy; p = p + incNE; } pantalla = '*'; } } else{ int p = 2 * deltaX - deltaY; int incE = 2 * deltaX; int incNE = 2 * (deltaX - deltaY); while (y != y2){ y = y + pasoy; if (p < 0){ p = p + incE; } else { x = x + pasox; p = p + incNE; } pantalla = '*'; } } } void Imprime(){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ cout << pantalla; } cout << endl; } cin.get(); } A continuacion les dejare unas capturas de pantalla con las pruebas Aqui les dejo igualmente el codigo en archivo cpp https://drive.google.com/file/d/0B6H2cOm_wRaDQ3hsd3RtQUFjU1U/view?usp=sharing "Ni Reyes Ni Dioses solo el hombre"
Mi post pasado fue de la linea de Bresenham aqui veremos como utilizar el algoritmo de la linea de Bresenham para hacer poligonos regulares con sus respectivas trasformaciones, escalamiento, rotacion y traslacion todo esto en C++ El poligono es presentado en una matriz de char sencilla, no requiere ninguna libreria externa para poder ser ejecutado. Espero les sirva de algo Aqui les dejo el codigo #include "Trasformaciones.h" #include <stdio.h> #include <iostream> #include <math.h> #define M_PI 3.14159265358979323846 using namespace std; int puntosx[100]; int puntosy[100]; int puntosXNuevo[100]; int puntosYNuevo[100]; int guardaDiametro; int guardaLados; int lados; char pantalla[75][75]; int tamanio = 75; int origenX = 35; int origenY = 35; void LineaBresenham(int x0, int y0, int x1, int y1); void dibujarPoligono(int origenX, int origenY, int distanciaR, int numLados); void Dibuja(); void Imprime(); void Traslacion(int nuevoX, int nuevoY); void Escalando(int escala); void Traslacion2(int nuevoX, int nuevoY); void Rotacion(int grados); int main(){ bool sigue = true; bool trasladar = false; bool rotar = false; bool escalar = false; char decide; char decidetraslada; char deciderotar; char decideescalar; while (sigue){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ pantalla = '.'; } cout << endl; } // Termina LLenado int numLados; int diametroR; cout << "Numero de Lados" << endl; cin >> numLados; guardaLados = numLados; cout << "Diametro R" << endl; cin >> diametroR; guardaDiametro = diametroR; if (diametroR > 36){ cout << "Pueden Presentarse Problemas al Graficar" << endl; } dibujarPoligono(origenX, origenY, diametroR, numLados); Imprime(); cout << "¿Desea Trasladar?" << ": Oprima T " <<"n En caso Contrario oprima N"<< endl; cin >> decidetraslada; if (decidetraslada == 't' || decidetraslada == 'T'){ // Traslacion int desplazaX; int desplazaY; cout << "Cuantas unidades desea desplazar en X" << endl; cin >> desplazaX; cout << "Cuantas unidades desea desplazar en Y" << endl; cin >> desplazaY; Traslacion(desplazaX, desplazaY); //Traslacion2(desplazaX, desplazaY); cout << "Oprima una tecla para regresar al menu superior" << endl; } else cout << "Desea Rotar?" << ": Oprima R" << "n En caso Contrario oprima N" << endl; cin >> deciderotar; if (deciderotar == 'r' || deciderotar == 'R'){ int grados; cout << "Ingrese grados a rotar" << endl; cin >> grados; Rotacion(grados); cout << "Oprima una tecla para regresar al menu superior" << endl; } else cout << "Desea Escalar?" << ": Oprima E" << "n En caso Contrario oprima N" << endl; cin >> decideescalar; if (decideescalar == 'E' || decideescalar == 'e'){ int escala; cout << "Ingrese Escala" << endl; cin >> escala; Escalando(escala); cout << "Oprima una tecla para regresar al menu superior" << endl; } //Imprime cout << "Si desea seguir trazando poligonos oprima (Y)" << "n en caso contrario oprima cualquier letra" << endl; cin >> decide; if (decide == 'y' || decide == 'Y'){ sigue = true; } else { sigue = false; cout << "Adios" << endl; } } return 0; } void Escalando(int escala){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ pantalla = '.'; } cout << endl; } if (escala<0){ escala = guardaDiametro/(escala*-1); } else { escala = escala*guardaDiametro; } dibujarPoligono(origenX, origenY, escala, guardaLados); Imprime(); } void Rotacion(int thetha){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ pantalla = '.'; } cout << endl; } // Termina llenado de matrix resultado // Calcula nuevos puntos for (int i = 0; i < lados;i++){ int puntoX; int puntoY; //puntoX = desicion(((puntosx)*cos(thetha))-((puntosy)*sin(thetha))); //puntoY = desicion(((puntosx)*sin(thetha))+((puntosy)*cos(thetha))); puntoX = (int)round(origenX + ((puntosx) - origenX)*cos(thetha) - ((puntosy) - origenY)*sin(thetha)); puntoY = (int)round(origenY + ((puntosx) - origenX)*sin(thetha) + ((puntosy) - origenY)*cos(thetha)); cout << "Px= " << puntoX << " Py=" << puntoY << " PAR DE COORDENADAS ROTADAS: " << i << endl; puntosXNuevo = puntoX; puntosYNuevo = puntoY; } // Dibuja nuevo for (int r = 0; r<lados - 1; r++) { LineaBresenham(puntosXNuevo, puntosYNuevo, puntosXNuevo[r + 1], puntosYNuevo[r + 1]); cout << "Uniendo" << " x0= " << puntosXNuevo << " y0=" << puntosYNuevo << " CON " << "x1= " << puntosXNuevo[r + 1] << " y1=" << puntosYNuevo[r + 1] << endl; } LineaBresenham(puntosXNuevo[lados - 1], puntosYNuevo[lados - 1], puntosXNuevo[0], puntosYNuevo[0]); cout << "Cerrando Figura " << "x0= " << puntosXNuevo[lados - 1] << " y0=" << puntosYNuevo[lados - 1] << " CON " << " x1=" << puntosXNuevo[0] << " y1=" << puntosYNuevo[0] << endl; // Termina Nuevo Dibujo Imprime(); } void Traslacion2(int nuevoX,int nuevoY){ dibujarPoligono(origenX + nuevoX, origenY + nuevoY, guardaDiametro, guardaLados); Imprime(); } void Traslacion(int nuevoX,int nuevoY){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ pantalla = '.'; } cout << endl; } dibujarPoligono(origenX+nuevoX,origenY+nuevoY,guardaDiametro,guardaLados); Imprime(); } void Dibuja(){ if (lados>0) { for (int i = 0; i<lados - 1; i++) { LineaBresenham(puntosx, puntosy, puntosx[i + 1], puntosy[i + 1]); cout << "Uniendo" << " x0= " << puntosx << " y0=" << puntosy << " CON " << "x1= " << puntosx[i + 1] << " y1=" << puntosy[i + 1] << endl; } LineaBresenham(puntosx[lados - 1], puntosy[lados - 1], puntosx[0], puntosy[0]); cout << "Cerrando Figura " << "x0= " << puntosx[lados - 1] << " y0=" << puntosy[lados - 1] << " CON " << " x1=" << puntosx[0] << " y1=" << puntosy[0] << endl; } } void dibujarPoligono(int origenX, int origenY, int distanciaR, int numLados){ cout << "Dibujando Poligono en: x= " << origenX << " y= " << origenY << " R= " << distanciaR << " numLados=" << numLados << endl; lados = numLados; int grados = (int) (round(360 / lados)); int aux = grados; int diametro = distanciaR; int desplazamientoX = origenX; int desplazamientoY = origenY; pantalla = 'C'; for (int i = 0; i<lados; i++) { int px = (int)(round(diametro*(cos((M_PI*grados) / 180))) + desplazamientoX); int py = (int)(round(diametro*(sin((M_PI*grados) / 180))) + desplazamientoY); cout << "Px= " << px << " Py=" << py << " PAR DE COORDENADAS: " << i << endl; puntosx = px; puntosy = py; //puntosXNuevo = px; //puntosYNuevo = py; grados = grados + aux; } Dibuja(); } void LineaBresenham(int x1, int y1, int x2, int y2){ int pasoy; int pasox; int dx = (x2 - x1); int dy = (y2 - y1); if (dy < 0) { dy = -dy; pasoy = -1; } else { pasoy = 1; } if (dx < 0) { dx = -dx; pasox = -1; } else { pasox = 1; } int x = x1; int y = y1; pantalla = '+'; if (dx>dy){ int p = 2 * dy - dx; int incE = 2 * dy; int incNE = 2 * (dy - dx); while (x != x2){ x = x + pasox; if (p < 0){ p = p + incE; } else { y = y + pasoy; p = p + incNE; } pantalla = '*'; } } else{ int p = 2 * dx - dy; int incE = 2 * dx; int incNE = 2 * (dx - dy); while (y != y2){ y = y + pasoy; if (p < 0){ p = p + incE; } else { x = x + pasox; p = p + incNE; } pantalla = '*'; } } } void Imprime(){ for (int i = 0; i <= tamanio; i++){ for (int j = 0; j <= tamanio; j++){ cout << pantalla; } cout << endl; } cin.get(); } Aqui las muestras del funcionamiento del programa El archivo cpp "Cambiaria todo lo que se, por la mitad de lo que ignoro"https://drive.google.com/file/d/0B6H2cOm_wRaDbG9fZHlUZ2lsWXM/view?usp=sharing