Académique Documents
Professionnel Documents
Culture Documents
Sean P(x1,y1) y Q(x2,y2) dos puntos de una recta. En base a estos dos puntos conocidos de una recta, es posible determinar su ecuacin. Para ello tomemos un tercer punto R(x,y), tambin pertenciente a la recta. Como P, Q y R pertenecen a la misma recta, se tiene que PQ y PR deben tener la misma pendiente. O sea
Ejemplo: Determina la ecuacin de la recta que pasa por los puntos P(1,2) y Q(3,4)
y-2=x-1 x-y+1=0
Fig. 4.6 Tmese sobre la recta los puntos P1(x1, y1),P2 (x2, y2) y P3 (x3, y3). Al proyectar los puntos P1, P2 y P3 sobre el eje x, se obtienen los puntos P1, P2, P3. Como los tringulos OP1P1, OP2P2 y OP3P3 son semejantes; se tiene que:
y = mx (1)
La ecuacin (1) es la ecuacin de la recta que pasa por el origen y tiene pendiente conocida m.
..
fig. 4.7. Trcece por el origen la recta l paralela a l. Sea P(x, y) un punto de l. Al llamar P la proyeccin de P sobre el eje x; PP corta a la recta l en un punto P de coordenadas P(x, Y), Y y.
Como P (x, Y) est sobre l, entonces Ahora, el cuadriltero OBPP es un paralelogramo. Luego, PP = OB = b. Y se tiene que: Y = PP = PP + PP = Y + b = mx + b.
, de donde Y = mx
Es decir, para todo (x, y) l, y = mx + b = (tan )x + b La ecuacin y = mx + b es la ecuacin de la recta en trminos de su pendiente m y su intercepto b con el eje y.
..
tambin es conocida.
.
Al llamar b al intercepto de la recta l con el eje y, entonces la ecuacin de l, viene dada por: y = mx + b (1) Como P1(x1, y1) l, entonces satisface (1) y en consecuencia se tiene: y1 = mx1 + b (2)
fig. 4.8 Al restar de la ecuacin (2) la ecuacin (1) se elimina el parmetro b que se desconoce y se obtiene: y y1 = m(x x1) (3) La ecuacin (3) es conocida como la forma: PUNTO-PENDIENTE de la ecuacin de la recta. Ntese que la ecuacin (3) tambin puede escribirse en la forma: y = mx + (y1 mx1). Lo que indica que el intercepto b con el eje y viene dado por: b = y1 mx1
..
4.4.4. Ecuacin de la recta que pasa por dos puntos dados P1(x1, y1) y P2(x2, y2)
su
pendiente.
....
Como l pasa por el punto P1(x1, y1) y tiene pendiente m1, se tiene de acuerdo a 4.4.3, que y y1 = m1 (x x1) (1) representa la ecuacin de dicha recta. Ahora, como el punto P2(x2, y2) l, entonces satisface su ecuacin.
fig. 4.9.
(2)
(3)
....
Como l pasa por los puntos A(a, 0) y B(0, b), entonces de acuerdo a la seccin la ecuacin de l viene dada por:
Es decir, de donde,
(1) La ecuacin (1) se conoce como la ecuacin SEGMENTARIA, CANNICA O FORMA DE LOS INTERCEPTOS de la linea recta. Los nmeros a y b son las medidas de los segmentos que la recta intercepta con cada eje, con su signo correspondiente, pues haciendo en (1) y = 0, resulta x = a (Intercepto con el eje x) x = 0, resulta x = b (Intercepto con el eje y)
..
La ecuacin explcita de la recta cuando se conocen dos puntos excluye las rectas paralelas al eje y, cuyas ecuaciones son de la forma x = constante, pero todas las rectas del plano, sin excepcin, quedan incluidas en la ecuacin Ax + By + C = 0 que se conoce como: la ecuacin general de la linea recta, como lo afirma el siguiente teorema: TEOREMA La ecuacin general de primer grado Ax + By + C = 0 (1) , A, B, C son simultneamente nulos, representan una linea recta. R; A y B no
Demostracin i. Se puede Considerar varios casos: A = 0, B diferente de 0. En este caso, la ecuacin (1) se transforma en By + C = 0,0de donde
(2)
La ecuacin (2) representa una linea recta paralela al eje x y cuyo intercepto con el eje y es
(fig. 4.11)
ii. donde
(3) La ecuacin (3) representa una linea recta paralela al eje y y cuyo
iii.
forma:
fig. 4.13. obeservaciones i. de tal manera que solo involucre dos constantes. Es decir, si A, B y C son todos distintos de cero, podemos escribir la ecuacin (1), en las siguientes formas equivalentes: Es posible escribir la ecuacin general de la linea recta en varias formas,
(1A)
(1B)
Si la recta se dibuja desde el punto (x0, y0) hasta el punto (x1, y1), el algoritmo varia x desde x0 hasta x1 en incrementos de una unidad. El siguiente es el cdigo en Java.
public void rectaSimple(int x0, int y0, int x1, int y1, Graphics g){ int dx = x1 - x0; int dy = y1 - y0; g.drawLine( x0, y0, x0, y0);//funciona!! if (dx != 0){ float m = (float) dy / (float) dx; float b = y0 - m*x0; if(x1 > x0) dx = 1; else dx = -1; while (x0 != x1) { x0 += dx; y0 = Math.round(m*x0 + b); g.drawLine( x0, y0, x0, y0); } } }
El siguiente applet permite ver el proceso paso a paso. Seleccione dos puntos sobre la cuadrcula y presione el botn "Siguiente" para ejecutar cada paso. Para borrar presione el botn "Borrar". Note que para pendientes mayores de 45 o menores de 45 el algoritmo dibuja rectas discontinuas.
// pendiente < 1
while (x0 != x1) { x0 += dx; y0 = Math.round(m*x0 + b); g.drawLine( x0, y0, x0, y0); } } else if (dy != 0) { float m = (float) dx / (float) dy; float b = x0 - m*y0; if(dy<0) dy = -1; else dy = 1; while (y0 != y1) { y0 += dy; x0 = Math.round(m*y0 + b); g.drawLine( x0, y0, x0, y0); } } }
Algoritmo de Bresenham
El algoritmo busca cual de dos pxeles es el que esta mas cerca segn la trayectoria de la lnea. Consideremos el proceso de conversin para lneas con pendiente positiva 0 < m < 1. Las posiciones de pxel a lo largo de la trayectoria de una lnea se determinan al efectuar un muestreo de x en intervalos unitarios. 1. Se capturan los dos extremos de la lnea y se almacena el extremo izquierdo en (x0,y0). 2. Se traza el primer punto (x0, y0). 3. Se calculan las constantes Dy, Dx, 2Dy, 2Dy-2Dx, y se obtiene el valor inicial para el parmetro de decisin como p0 = 2 Dy -Dx. 4. En cada xk a lo largo de la lnea, que inicia en k = 0, se efecta la prueba siguiente: si pk < 0, el siguiente punto que se debe trazar es (xk+1, yk) y pk +1 = pk + 2 Dy. De otro modo, el siguiente punto en trazarse es (xk+1, yk+1) y pk +1 = pk + 2 Dy - 2Dx. 5. Se repite el paso 4 otras Dx veces. void LineBres(Graphics g, int x0, int y0, int x1, int y1){ int x, y, dx, dy, xend, p, incE, incNE; dx = abs(x1 - x0); dy = abs(y1 - y0); p = 2*dy - dx; incE = 2*dy;
incNE = 2*(dy-dx); /* determinar que punto usar para empezar, cual para terminar */ if (x0 > x1) { x = x1; y = y1; xend = x0; } else { x = x0; y = y0; xend = x1; } g.drawLine( x0, y0, x0, y0); /* se cicla hasta llegar al extremo de la lnea */ while (x <= xend){ g.drawLine(x,y,x,y); x = x + 1; if (p < 0) p = p + incE else { y = y + 1; p = p + incNE; } g.drawLine( x0, y0, x0, y0); } } El algoritmo de Bresenham se generaliza para lneas con una pendiente arbitraria al considerar la simetra entre los diversos octantes y cuadrantes del plano de xy. Para una lnea con una pendiente m > 1, intercambiamos las funciones de las direcciones de x y y, o sea, pasamos a lo largo de y en pasos unitarios y calculamos los valores sucesivos de x que se aproximan mas a la trayectoria de la lnea. Asimismo, podemos revisar el programa para trazar pxeles iniciando desde cualquier extremo. El programa resultante es el siguiente: public void Bresenham(Graphics g,int x0, int y0, int x1, int y1) int x, y, dx, dy, p, incE, incNE, stepx, stepy; dx = (x1 - x0); dy = (y1 - y0); /* determinar que punto usar para empezar, cual para terminar */ if (dy < 0) { dy = -dy; stepy = -1; } else
stepy = 1; if (dx < 0) { dx = -dx; stepx = -1; } else stepx = 1; x = x0; y = y0; g.drawLine( x0, y0, x0, y0); /* se cicla hasta llegar al extremo de la lnea */ if(dx>dy){ p = 2*dy - dx; incE = 2*dy; incNE = 2*(dy-dx); while (x != x1){ x = x + stepx; if (p < 0){ p = p + incE; } else { y = y + stepy; p = p + incNE; } g.drawLine( x0, y0, x0, y0); } } else{ p = 2*dx - dy; incE = 2*dx; incNE = 2*(dx-dy); while (y != y1){ y = y + stepy; if (p < 0){ p = p + incE; } else { x = x + stepx; p = p + incNE; } g.drawLine( x0, y0, x0, y0); } } }