Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2011, 14:06
KirkTaison
 
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Guardar puntos de una línea

Hola forer@s,

mi problema es el siguiente. Resumiendo, estoy dibujando unas líneas en un JFrame a partir de dos puntos dados, y necesito saber todos los puntos que contienen la línea; he pensado en un array de puntos(x,y). Tengo una idea, de aplicar la ecuación de la recta y-y1=m(x-x1) para ir sacando esos puntos, pero me surgen algunas dudas...que ni me termino de aclarar.

Lo que he hecho es, coger las coordenadas menores, para recorrer la línea de menor a mayor siempre, se pinte como se pinte. Luego, recorro con el bucle hasta llegar a la coordenada final, y voy guardando los valores calculados con la ecuación de la recta en el array de puntos.

Este código tiene plasmada esa idea...pero no funciona xD. No se si por fallo de idea (que estoy seguro que es super ineficiente) o por fallo de programación de la idea.

Dejo el código abajo, a ver si alguien tiene alguna inspiración mejor que la que tengo yo...

Muchas gracias !!



public class Punto {

int x,y;

public Punto(int x, int y) {
this.x= x;
this.y= y;

}
}

public class Line {

public int x1;
public int y1;
public int x2;
public int y2;
public Color color;
public Punto[] p_rec;

public Line(int x1, int y1,int x2, int y2, Color color, Punto[] puntos){


this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
this.color = color;
p_rec = new Punto[Math.abs(x2-x1)];
ecRecta();
}

private void ecRecta(){

int m = Math.abs((y2 - y1)/(x2 -x1)); //pendiete de la recta, en valor absoluto
int mayor_x,menor_x,mayor_y,menor_y,x_recorre,auxY=0,a uxX=0,i=0;


/*Compruebo que punto es mayor, para luego en el bucle recorrar de un punto a otro en crecente */

if (x2>x1){
mayor_x = x2;
menor_x = x1;
mayor_y = y2;
menor_y = y1;
}else{
mayor_x = x1;
menor_x = x2;
mayor_y = y2;
menor_y = y1;
}


//Inicializo variable x_recorre a la menor

x_recorre = menor_x;
while (x_recorre<mayor_x)
auxX = x_recorre;
auxY = m*(menor_x - x_recorre) + menor_y; //Ecuación de la recta

this.p_rec[i].x = auxX;
this.p_rec[i].y = auxY;

i++;
x_recorre++;
}

}