• Martes 30 de Abril de 2024, 15:18

Mostrar Mensajes

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 - Faustox

Páginas: [1]
1
C/C++ / ¿cómo Saber Si Un Punto Esta Dentro De Un Poligono
« en: Jueves 21 de Julio de 2005, 02:51 »
¿Cómo se si un punto cualquiera forma parte de un poligono dado?

necesito saber esto para aplicar el QUICKHULL

Gracias

2
C/C++ / Re: Ayuda Con Quick Hull
« en: Miércoles 20 de Julio de 2005, 01:18 »
Uso Turbo C
Lo pruebo y regreso

3
C/C++ / Ayuda Con Quick Hull
« en: Martes 19 de Julio de 2005, 17:18 »
Estoy tratando de trazar la envolvente convexa de una nube de puntos que se seleccionan haciendo click con el mouse en la pantalla.
Para resumir quiero guardar las coordenadas de puntos donde se hace click con el mouse y eso va bien, necesito comparar los puntos buscando los puntos extremos es decir el que esta mas a la izquierda, más a la derecha, más arriba y más abajo y apartir de ellos trazar lineas que los unan.  Luego de eso me imagino que debo de usar el criterio de la izquierda; pero no paso de lo de los puntos extremos por que me resultan "otras cosas"
He aqui el codigo, ya se que a nadie le gusta detenerce a estar revisando codigo pero creo que es mejor asi.




#define ENTER 13
#define DIM 2
#define PMAX 100
#define ESC 27

void inicio (void);



/* MAIN */

void main (void)
{
int i,n;
int P[PMAX][DIM]; /*este array me guardará los puntos*/
int izq[1][1],der[1][1],sup[1][1],inf[1][1]; /* cada uno de estos un punt extremo*/
n=0;
i=0;

 inicio();
 cleardevice();
 mtest();
 mver();

inf[0][1]=P[0][1];

der[0][0]=P[0][0];

izq[0][0]=P[0][0];

sup[0][1]=P[0][1];




  while((mclick()!=2) && (i <= PMAX)){
          if (mclick() == 1)
            {
               mocultar();
               circle(mxpos(1)+1,mypos  (1)+1,2);
               P[0] = mxpos(1);
               P[1] = mypos(1);

               if(der[0][0]<P[0]){
                  der[0][0]=P[0];
                  der[0][1]=P[1];
               }
               if(izq[0][0]>P[0]){
                 izq[0][0]=P[0];
                 izq[0][1]=P[1];
               }
               if(inf[0][1]<P[1]){
                 inf[0][1]=P[1];
                 inf[0][0]=P[0];
               }
               if(sup[0][1]>P[1]){
                  sup[0][1]=P[1];
                  sup[0][0]=P[0];
                  }
               i=i+1;
               n=i;

            mver();
            getch();
            }


      }


printf("supY%d\n",sup[0][1]);
printf("supX%d\n",sup[0][0]);
printf("infY%d\n",inf[0][1]);
printf("infX%d\n",inf[0][0]);
printf("derX%d\n",der[0][0]);
printf("derY%d\n",der[0][1]);
printf("izqX%d\n",izq[0][0]);
printf("izqY%d\n",izq[0][1]);

getch();




      }

4
C/C++ / 256 Colores En Turbo C
« en: Domingo 17 de Julio de 2005, 03:27 »
Alguien sabe de una libreria o algo asi para usar 256 colores en turbo c ?
no es que quiera poner una imagen sino que dibujar lineas o rectangulos o cambiar el fondo a otro que no sea uno de los 16 colores.

5
C/C++ / Ubicación Del Puntero En C
« en: Miércoles 13 de Julio de 2005, 23:06 »
Uso turbo c y gracias a una libreria consigo usar el mouse
ahora tengo dos funciones que me permiten saber la ubicación
en x y Y del mouse

mxpos()--->se usa 1 como paramentro para modo grafico
mypos()

lo que sucede es que necesito que cuando el mouse este ubicado en una posición especifica se ejecute determinadas funcines para simular botones pero no logro que funcione ¿sugerencias? ¿cómo almaceno las sucesivas posiciones del mouse con las funciones de arriba?

Necesito ayuda  :(

6
Visual Basic 6.0 e inferiores / Barra Herram ¿cómo Cambiar El Color De Form?
« en: Viernes 8 de Julio de 2005, 02:19 »
Lo que pasa es que necesito permitirle al usuario cambiar el color del formulario y de los objetos como textbox mediante una barra de herramientas
¿cómo puedo hacerlo? Yo se como hacer barras de herramientas lo que no se es como hacer para que cambien los colores

Uso visual basic 6

7
Visual Basic para principiantes / Imprimir Una Matriz Sin Controles
« en: Jueves 7 de Julio de 2005, 17:48 »
Caso solucionado, disculpas :(

8
C/C++ / Imprimir Un Dato Sobre Otro
« en: Domingo 17 de Abril de 2005, 03:04 »
Tengo que imprimir el valor de una variable en un lugar determinado de la pantalla por lo que debe hacerse con gotoxy me imagino pero en un ciclo la variable toma distintos valores y lo que quiero es que se me imprima cada valor que asuma la variable en las mismas coordenadas que se reemplace una por otra es decir que imprima i=1 y me lo cambien por i=2 como cuando un reloj digital cambia de hora. No que me los imprima todos sino que aparesca uno y sea cambiado en esa coordenada por otro.

Hay que hacerlo en Turbo C

9
C/C++ / Re: Grafica Cruz Y Marca Coordenadas
« en: Viernes 15 de Abril de 2005, 03:14 »
Gracias por el intento de entender el lio que estoy haciendo. :P

Trate de poner un dibujo de la pantalla y como debe aparecer pero al postearlo se distorciono &lt;_&lt;

El código alterado ya lo hice funcionar (aunque todavia no me muestra las coordenadas) lo que hace es que dibuja una cruz  y la desplaza borrando pixels, mediante presionar las flechas direccionales el "cursor" debe moverse por la pantalla ademas solo en un area delimitada por un rectangulo (el rectangulo solo es guia en realidad es un mero dibujo) entonces el problema que tengo es que hay que imprimir arriba de la pantalla y fuera del rectangulo que ya hice lo siguiente:

Las coordenadas originales son: /*Aqui debe aparecer el primer punto donde se presiono enter*/

Las coordenadas actuales son:
 /*aqui debe aparecer la coordenada en la que se encuentra el dibujo de la cruz o cursor como le llamemos y va cambiando conforme mueves las flechas y el dibujito cambia de posicion en la pantalla, yo las imprimo pero enves de reemplazarse como por ejemplo cuando un reloj digital cambia minutos y horas (a eso me refiero con reemplazar) me las imprime todas y se me llena la pantalla de coordenadas.  Necesito que cambien como un reloj no que se impriman en toda la pantalla.  Y si tienen que imprimirse en un solo lugar y el letrero de "coordenadas actuales son" no debe cambiar nunca ¿sugerencias?  :comp:

10
C/C++ / Re: Grafica Cruz Y Marca Coordenadas
« en: Jueves 14 de Abril de 2005, 07:00 »
Todo lo que quiero es que me imprima las coordenadas por donde se vaya moviendo la cruz pero no que me imprima todas una tras otra sino que se reemplace que sea una sobre otra

ej: 200,10 pasa a ser impreso en el mismo lugar
     200,11 pero el 200,10 desaparece de ese lugar para ser ocupado por 200,11

11
C/C++ / Grafica Cruz Y Marca Coordenadas
« en: Viernes 8 de Abril de 2005, 09:09 »
Un saludo a todos!

Se me plantea un problema tengo que hacer una cruz que se mueve a modo de cursor segun como presione las teclas direccionales y me dibuja una linea cuando presiono enter.

Ahora debo modificar el programa para que no borre las lineas al retroceder, me imprima la primera coordada donde se presiono enter y las coordenadas por donde va desplazandose la cruz cuando la voy moviendo con las flechas.  Además debe dibujarse un rectangulo es decir un area de dibujo que es el limite fuera del cual no debe desplazarse la cruz, la impresion de las coordenadas debe estar fuera de dicha  area.  Les dejo el codigo original y un que altere pero que no va y no hace todo lo que debe de cualquier manera pero ni ese ha corrido correctamente.

En verdad, necesito ayuda.
    ________________
   |  _____________    |
   | |                      |   |
   | |           +         |   |
   | |____________ |   |
   |_coord x,y________|


Codigo Original

/* ESTE PROGRAMA HACE QUE PODAMOS UBICAR EL CURSOR EN LA POSICION DESEADA
INTERACTIVAMENTE */

#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#define NEGRO 0
#define BLANCO 15
#define ARRIBA 72
#define ABAJO 80
#define DER 77
#define IZQ 75
#define ENTER 13
#define Poner_cursor(x,y) Dib_cursor(x,y,BLANCO);
#define Borrar_cursor(x,y)Dib_cursor(x,y,NEGRO);
#define Tamcurs 5
void inicio (void);
void Dib_polilinea (void);
int Escoger_punto (int *,int *);
void Dib_cursor (int,int,int);
int Leer (void);

/* MAIN */

void main (void)
{
inicio();
cleardevice();
Dib_polilinea();
restorecrtmode();
}


/* FUNCION INICIO */

void inicio (void)
{
int adaptador=DETECT,modo,codigo;
initgraph(&adaptador,&modo,"c:\\ tc20");
if ((codigo=graphresult())!=0)
{
printf("%s\n",grapherrormsg(codigo));
exit(1);
}
}

/* FUNCION POLI_LINEA */

void Dib_polilinea (void)
{
int x1,x2,y1,y2,car;
x2=getmaxx()/2;
y2=getmaxy()/2;
car= Escoger_punto(&x2,&y2);
while(car==ENTER)
{
x1=x2;
y1=y2;
car=Escoger_punto(&x2,&y2);
if(car==ENTER)
line(x1,y1,x2,y2);
}
}

/* FUNCION DIB_CURSOR */

void Dib_cursor(int x,int y,int color)
{
int Col_ant;
Col_ant=getcolor();
setcolor(color);
line(x-Tamcurs,y,x+Tamcurs,y);
line(x,y-Tamcurs,x,y+Tamcurs);
setcolor(Col_ant);
}

/* FUNCION ESCOGER_PUNTO */

int Escoger_punto(int * x,int * y)
{
int c,dx,dy;
Poner_cursor(*x,*y);
for (;
{
dx=dy=0;
switch(c=Leer())
{
case ARRIBA:dy--;break;
case ABAJO:dy++;break;
case IZQ:dx--;break;
case DER: dx++;break;
default:return©;
}
Borrar_cursor(*x,*y);
*x+=dx;
*y+=dy;
Poner_cursor(*x,*y);
}
}

/* FUNCION LEER */

int Leer(void)
{
int tecla;
while((tecla=getch())!=0)
if (tecla==ENTER)
return(tecla);
return(getch());
}

***************************
Codigo alterado


#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#define NEGRO 0
#define BLANCO 15
#define ARRIBA 72
#define ABAJO 80
#define DER 77
#define IZQ 75
#define ENTER 13
#define Poner_cursor(x,y) Dib_cursor(x,y);
#define Borrar_cursor(x,y)Dib_cursor(x,y);
#define Tamcurs 5
#define Col_curs 8
#define s 115
void inicio (void);
void Dib_polilinea (void);
int Escoger_punto (int *,int *);
void Dib_cursor (int,int);
int Leer (void);
void area_dib(void); /*FUNCION QUE FORMA EL AREA DE DIBUJO */
void XOR_PIXEL(int x,int y); /*FUNCION QUE EVITA QUE SE BORREN LAS LINEAS*/
int maxx(int *x);
int maxy(int *y);



/* MAIN */

void main (void)
{
inicio();
cleardevice();
area_dib();
Dib_polilinea();
if(Leer()==s)
restorecrtmode();
else main();

}


/* FUNCION INICIO */

void inicio (void)
{
int adaptador=DETECT,modo,codigo;
initgraph(&adaptador,&modo,"c:\\ tc20");
if ((codigo=graphresult())!=0)
{
printf("%s\n",grapherrormsg(codigo));
exit(1);
}
}

/* FUNCION POLI_LINEA */

void Dib_polilinea (void)
{
int x1,x2,y1,y2,car;
x2=getmaxx()/2;
y2=getmaxy()/2;
car= Escoger_punto(&x2,&y2);
while(car==ENTER)
{
x1=x2;
y1=y2;
car=Escoger_punto(&x2,&y2);
if(car==ENTER)
line(x1,y1,x2,y2);
}
}

/* FUNCION DIB_CURSOR */

void Dib_cursor(int x,int y)
{
int i;
for(i=0;i<Tamcurs;i++)
{
XOR_PIXEL(x-i,y);
XOR_PIXEL(x+i,y);
XOR_PIXEL(x,y-i);
XOR_PIXEL(x,y+i);
}
}

/*FUNCION XOR_PIXEL*/

void XOR_PIXEL(int x,int y)
{
putpixel(x,y,Col_curs^getpixel(x,y) );
}

/* FUNCION ESCOGER_PUNTO */

int Escoger_punto(int * x,int * y)
{
int c;
int ct_arriba=0;
int ct_abajo=0;
int ct_der=0;
int ct_izq=0;
int paso_acel=5;
Poner_cursor(*x,*y);
for (;
{
switch(c=Leer())
{
case ARRIBA:
if( maxy(*y)!=0 )
{
Borrar_cursor(*x,*y);
*y+=(++ct_arriba<paso_acel)?-1:-paso_acel;
ct_abajo=ct_der=ct_izq=0;
Poner_cursor(*x,*y);
}
break;

case ABAJO:
if( maxy(*y)!=1 )
{
*y+=(++ct_abajo<paso_acel)?1:paso_acel;
ct_arriba=ct_izq=ct_der=0;
Poner_cursor(*x,*y);
}
break;

case IZQ:
if( maxx(*x)!=1 )
{
Borrar_cursor(*x,*y);
*x+=(++ct_izq<paso_acel)?-1:paso_acel;
ct_arriba=ct_abajo=ct_der=0;
Poner_cursor(*x,*y);
}
break;
case DER:
if(maxx(*x)!=0)
{
Borrar_cursor(*x,*y);
*x+=(++ct_der<paso_acel)?1:paso_acel;
ct_abajo=ct_arriba=ct_izq=0;
Poner_cursor(*x,*y);
}
break;
default:
Borrar_cursor(*x,*y);
return©;

}
/* FUNCION LEER */

int Leer(void)
{
int tecla;
while((tecla=getch())!=0)
if (tecla==ENTER)
return(tecla);
return(getch());
}
/*FUNCION AREA_DIB*/
void area_dib(void)
{
int x,y;
x=getmaxx()/2;
y=getmaxy()/2;
setcolor(BLUE);
rectangle(x-300,y-150,x+300,y+150);
}

/*FUNCION MAXx*/
int maxx(int *x)
{
int min1,max1;

max1=(getmaxx()/2)+300;
min1=(getmaxx()/2)-300;
if(*x>=max1)
return(0);
if(*x<=max1)
return(1);

}

/*FUNCION MAXy*/
int maxy(int *y)
{
int min2,max2,centro2;

max2=(getmaxy()/2)+150;
min2=(getmaxy()/2)-150;
if(*y>=max2)
return(0);

if(*y<=max2) return(1);

}

Páginas: [1]