Está en la página 1de 22

1.

- ALGORITMO PARA DIBUJO DE LINEAS

Algoritmo básico

El algoritmo básico utiliza la ecuación de la recta expresada como

y = mx + b

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
código en Java.

publicvoidrectaSimple(int x0, int y0, int x1, int y1, Graphics g){
int dx = x1 - x0;
intdy = 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);
}
}
}

2.- METODO DIRECTO

Este método permite dibujar una línea, entre los puntos (xi,yi) y (xf,yf),
utilizando la ecuación y = mx + b generando a continuación la secuencia (xi+1 =
xi + Δx, round (yi+ 1)).

Con este cálculo se obtiene el píxel más cercano o sea aquel cuya distancia a
la recta es menor.

Este método no es tan eficiente debido a que en cada iteración se requiere una
multiplicación y una suma en punto flotante, más la invocación del método de
truncamiento.

El uso de la función de redondeo y el hecho de que para cada valor (discreto)


de x se grafica un solo valor de y, ocasiona que la gráfica sea discontinua para
|m|>1.
3.- ALGORITMO DDA

Como todos saben Open GL es una herramienta que nos facilita mucho la
generación de gráficos por computadora. Aqui aplicamos conocimientos
matemáticos, usando Open GL para generar rectas, corcunferencias, elipses,
etc.
El Algoritmo DDA es un algoritmo de línea de conversión de rastreo que se
basa en el cálculo ya sea en el incremento de X o en el incremento de Y. La
finalidad de este algoritmo es determinar los valores enteros correspondientes
más próximos a la trayectoria de la línea para la otra coordenada.

Código:

void DDA(int x0,int y0,int xFin,intyFin)


{
int dx = xFin - x0, dy = yFin - y0, steps, k;
floatxIncremento, yIncremento;
float x = x0, y = y0;
if (fabs (dx) >fabs (dy))
steps = fabs (dx); /* |m|<1>
else
steps = fabs (dy); /* |m|>=1 */
xIncremento=float(dx)/float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k <>
{
x += xIncremento;
y += yIncremento;
setPixel (round (x), round (y));
}
}

4.- Algoritmo de Bresenham

Para aplicar el método punto medio, se debe definir una función de


circunferencia como:

f circunferencia (x , y)= x2 + y2 - r2

f circunferencia (x , y)= 0. Si el punto estpa en el interior de la circunferencia, la


función de la circunferencia es negativa; y si está en su exterior, es positiva

Al igual que en el algoritmo para el trazo de líneas de Bresenham, el método


del punto medio calcula las posiciones de pixel a lo largo de una circunferencia
utilizando adiciones y sustracciones de enteros, si se supone que los
parámetros de la circunferencia se especifican en coordenadas enteras de
pantalla. Se pueden resumir los pasos del algoritmo de la circunferencia de
punto medio como sigue:

1. Se capturan el radio r y el centro de la circunferencia (xc ,yc) y se obtiene el


primer punto de una circunferencia centrada en el origen como (x0 , y0) = (0 ,r).

2. Se calcula el valor inicial del parámetro de decisión como p0 = 5/4 - r.

3. En cada xkposición, al iniciar en k = 0, se realiza la prueba siguiente. Si pk <


0, el siguiente punto a lo largo de la circunferencia centrada en (0 , 0) es (xk+1 ,
yk) y pk+1 = pk +2xk+1 +1. De otro modo, el siguiente punto a lo largo de la
circunferencia es (xk + 1, yk -1) y pk+1 = pk + 2xk+1 + 1 -2yk+1 donde 2xk+1 = 2xk +
2 y 2yk+1 = 2yk -2.

4. Se determinan puntos de simetría en los otros siete octantes.


5. Se mueve cada posición de pixel calculada (x , y) a la trayectoria circular
centrada en (xc , yc)setrazan los valores de las coordenadas: x = x + xc y= y +
yc .

6. Se repiten los pasos 3 a 5 hasta que x ≥ y.

El algoritmo busca cual de dos píxeles es el que estamas cerca según la


trayectoria de la línea. Consideremos el proceso de conversión para líneas con
pendiente positiva 0 <m < 1. Las posiciones de píxel a lo largo de la trayectoria
de una línea se determinan al efectuar un muestreo de x en intervalos unitarios.

1. Se capturan los dos extremos de la línea y se almacena el extremo izquierdo


en (x0,y0).
2. Se traza el primer punto (x0, y0).
3. Se calculan las constantes y, x, 2 y, 2 y-2 x, y se obtiene el valor inicial
para el parámetro de decisión como p0 = 2 y - x.
4. En cada xka lo largo de la línea, que inicia en k = 0, se efectúa la prueba
siguiente:
sipk< 0, el siguiente punto que se debe trazar es (xk+1, yk) y pk +1 = pk+ 2 y. De
otro modo, el siguiente punto en trazarse es (xk+1, yk+1) y pk+1 = pk + 2 y -
2 x.
5. Se repite el paso 4 otras xveces.

voidLineBres(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);
/* determinarque 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 línea */
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);
}
}

5.- ALGORITMOS PARA GENERAR CÍRCULOS

/*
* Algoritmo de dibujo de un Círculo basado en la ecuación Canónica
*/
voiddibujarCirculoCanonica(int r, int xc, intyc) {
int x = 0;
int y = r;

while (x <= y) {
this.dibujarPunto(x + xc, y + yc);
x++;
double yd = Math.sqrt(r * r - x * x);
y = (int) Math.round(yd);
}

}
/*
* Algoritmo para el dibujo de círculo basado en la ecuación
parámetrica
* polar de la circunferencia.
*/

voiddibujarCirculoPolar(int r, int xc, intyc) {


// Determinar el angulo de variación
double theta = Math.toRadians(0);
// Punto inicial
int x = r;
int y = 0;
// Mientras el angulo no exceda a 360 dibujar puntos
while (theta <= 2*Math.PI) {
this.dibujarPunto(x + xc, y + yc);
// Incrementar el ángulo
theta=theta+Math.toRadians(5);
// Cálcular los valores x e y de forma parámetrica
doublexd = r * Math.cos(theta);
x = (int) Math.round(xd);
double yd = r * Math.sin(theta);
y = (int) yd;
}
}

/*
* Algoritmo para el dibujo de Círculo con el algoritmo de
* punto medio
*/
publicvoiddibujarCirculoPuntoMedio(int r, int xc, intyc) {
// Punto inicial del círculo
int x = 0;
int y = r;
// Cálcular el parámetro inicial de decisión
intpk = 1-r;

// verificar el pk para determinar las posiciones de pixel siguuientes


while (x<=y)
{
System.out.println("(x,y)= "+x+","+y+" pk="+pk);
dibujarPunto(xc+x,yc+y);
if (pk<0){
pk+=2*(x+1)+1;
x++;
}
else // pk>=0
{
pk+=2*(x+1)+1 - 2*(y-1);
x++;
y--;
}
}
}
/*
* Algoritmo para el dibujo de Círculo con el algoritmo implementado
* porOpenGL.
*/

voiddibujarCirculoOpenGL(int r, int xc, intyc) {


}

/*
* Dibujar un punto
*/
protectedvoiddibujarPunto(int x, int y) {
gl.glPointSize(2);
gl.glBegin(GL.GL_POINTS);
gl.glVertex2i(x, y);
gl.glEnd();
}
}

Resultado de la aplicación:

6.-ALGORITMO PARA GENERAR UNA ELIPSE


Algoritmo de punto medio para elipse

publicvoid Elipse(Graphics g, int xc, intyc, intrx, intry){


int x, y, p, px, py;
int rx2, ry2, tworx2, twory2;
ry2 = ry*ry;
rx2 = rx*rx;
twory2 = 2 * ry2;
tworx2 = 2 * rx2;
/* región 1 */
x = 0;
y = ry;
PlotPoint(x,y);
p = (int)Math.round(ry2 - rx2*ry + 0.25*rx2);
px = 0;
py = tworx2*y;
while (px<py) { /* se cicla hasta trazar la región 1 */
x = x + 1;
px = px + twory2;
if (p < 0)
p = p + ry2 + px;
else {
y = y - 1;
py = py - tworx2;
p = p + ry2 + px - py;
}
PlotPoint(x,y);
}
/* región 2 */
p = (int)Math.round(ry2*(x+0.5)*(x+0.5) + rx2*(y-1)*(y-1) - rx2*ry2);
px = 0;
py = tworx2*y;
while (y > 0) { /* se cicla hasta trazar la región 2 */
y = y - 1;
py = py - tworx2;
if (p > 0)
p = p + rx2 - py;
else {
x = x + 1;
px = px + twory2;
p = p + rx2 + py + px;
}
PlotPoint(x,y);
}
}

El siguiente applet permite seguir paso a paso el agoritmo de punto medio para
elipses. Haga clic sobre el área cuadriculada para establecer el centro de la
elipse. A continuación vuelva a hacer clic para definir los radios en x y y. El
radio en x es la distancia en x entre el primer clic y el segundo y el radio en y es
la distancia en y entre el primer clic y el segundo.

7.- ALGORITMOS PARA GENERACIÓN DE PARABOLA


Parábola

publicvoidparabola(Graphicsg,int xc, intyc, int p, intbound){

intx,y,d;
int p2, p4;

p2 = 2*p;

p4 = 2*p2;

x = 0;

y = 0;

d = 1 - p;

//region 1

while(y < p && x<=bound){

g.drawLine(xc+x,yc+y,xc+x,yc+y);

g.drawLine(xc+x,yc-y,xc+x,yc-y);

if(d >= 0){

x++;

d = d - p2;

y++;

d = d + 2*y +1;

if(d == 1) d = 1 - p4;

else d = 1 - p2;

//region 2

while(x<=bound){

g.drawLine(xc+x,yc+y,xc+x,yc+y);

g.drawLine(xc+x,yc-y,xc+x,yc-y);

if(d <= 0){

y++;

d = d + 4*y;

x++;
d = d - p4;

8.- TRASLACIÓN EN EL PLANO

Se aplica una traslación en un objeto para cambiar su posición a lo largo de la


trayectoria de una línea recta de una dirección de coordenadas a otra.
Convertimos un punto bidimensional al agregar las distancias de traslación, tx y
ty la posición de coordenadas original (x,y)
El par de distancia de traslación se llama vector de traslación o vector de
cambio. Se pueden expresar las ecuaciones anteriores en una sola ecuación
matricial al utilizar vectores de columna para representar las posiciones de
coordenadas y el vector de traslación

Los polígonos se trasladan al sumar el vector de traslación a la posición


decoordenadas de cada vértice y se vuelve a generar el polígono utilizando un
nuevo conjuntode coordenadas y vértices y las especificaciones actuales de los
atributos.

9.- ROTACIÓN EN EL PLANO

Se aplica una rotación bidimensional en un objeto al cambiar su posición a lo


largo de la trayectoria de una circunferencia en el plano de xy . Para generar
una rotación, especificamos un ángulo de rotación θ y la posición (x r , y r ) del
punto de rotación (o punto pivote) en torno al cual se gira el objeto.
10.-Escalación

Una transformación de escalación altera el tamaño de un objeto. Se puede


realizar esta operación para polígonos al multiplicar los valores de coordenadas
(x, y) de cada vértice por los factores de escalación s x y s y para producir las
coordenadas transformadas (x’, y’ )

11.-REPRESENTACION DE MATRIZ Y COORDENADAS HOMOGÉNEAS

En las aplicaciones de diseño y de creación de imágenes, realizamos


traslaciones, rotaciones y escalaciones para ajustar los componentes de la
imagen en sus posiciones apropiadas. En este tema consideramos cómo se
pueden volver a formular las representaciones de la matriz de modo que se
pueden procesar de manera eficiente esas secuencias de transformación. Es
posible expresar cada una de las transformaciones básicas en la forma de
matriz general con las posiciones de coordenadas P y P’ representadas como
columnas de vector.2.15.P'=M1·P+M

12.-Transformaciones Compuestas tridimensionales

En este apartado se analizará la forma de componer matrices de


transformación tridimensionales usando un ejemplo. El objetivo es transformar
los segmentos de línea dirigida

P1P2yP1P3 en la figura 2.18 de su posición inicial en la parte (a) a su posición


final en la parte (b). De esta manera, el punto P1 se trasladará al origen P1P2
quedará en el eje positivo y P1P3

Quedará en la mitad del eje positivo del plano (x, ). Las longitudes de las
líneas no se verán afectadas por la transformación.
Las transformaciones entre sistemas de coordenadas cartesianos se llevan a
cabo con una secuencia de transformaciones traslación. Rotación que hacen
que los dos sistemas coincidan. Especificamos el origen de coordenadas y
vectores de eje para un marco de referencia respecto al marco de referencia
original. En un sistema bidimensional, un vector define completamente las
direcciones del eje de coordenadas; pero en un sistema tridimensional, hay que
especificar dos de las tres direcciones de los ejes. Las transformaciones
geométricas son transformaciones afines. Esto es, pueden expresarse como
una función lineal de posiciones de coordenadas. Traslación, rotación y
escalación son transformaciones afines. Transforman líneas paralelas en líneas
paralelas y posiciones de coordenadas finitas en posiciones finitas.

13.-ROTACIÓN DEL PUNTO PIVOTE GENERAL

Con un paquete gráfico que sólo ofrezca una función de rotación para girar
objetos con respecto del origen de las coordenadas, podemos generar casi
cualquier punto pivote seleccionado (xr, yr) al realizar la siguiente secuencia
de operaciones de traslación-rotación-traslación:

1. Traslade el objeto de modo que se mueva la posición del punto pivote al


origen de las coordenadas.

2. Gire el objeto con respecto del origen de las coordenadas


14.-ROTACION DE EJES CORDENADAS

Cambio de la orientación de los ejes de referencia mientras se conserva el


origen. La principal razón para rotar los ejes es que una ecuación dada es
mucho más simple en el nuevo sistema de coordenadas que en el sistema
original.

Si los ejes originales x y y rotan en sentido contrario al reloj un


ángulo , para cualquier punto P(x, y), las coordenadas originales
(x, y) se convierten en las nuevas coordenadas (x ´, y ´), que son:

x ´ = xcos + ysen
y´ = - xsen + ycos

Para derivar la ecuación en las nuevas coordenadas, necesitamos


expresar las coordenadas originales en las nuevas coordenadas:

x = x ´ cos - y ´ sen
y = x ´ sen + ycos

Como ejemplo de rotación, considera una ecuación simple y = x +


21/2, que es una línea. Si los ejes originales x e y rotan en sentido
contrario al reloj un ángulo de 45°, las coordenadas originales se
pueden expresar como:

x = x ´ cos 45° - y ´ sen 45°


y = x ´ sen 45° + y ´ cos 45°

Por lo tanto,

x = x ´ (21/2/2) - y ´ (21/2/2)
y = x ´ (21/2/2) + y ´ (21/2/2)

Entonces, la ecuación y = x + 21/2 se convierte en:

x ´ (21/2/2) + y ´ (21/2/2) = x ´ (21/2/2) - y ´ (21/2/2) + 21/2

y´=1

En las nuevas coordenadas, la ecuación es una línea paralela al eje


x ´, +1 unidad separada del eje x ´.

16.-VISTAS Y PROYECCIONES TRIDIMENCIONALES


Si situamos un observador según las seis direcciones indicadas por las flechas,
obtendríamos las seis vistas posibles de un objeto.

SISTEMA EUROPEO Y AMERICANO DE VISTAS

SISTEMA EUROPEO DE VISTAS SISTEMA AMERICANO

Una vez realizadas las seis proyecciones ortogonales sobre las caras del
cubo, y manteniendo fija, la cara de la proyección del alzado (A), se procede a
obtener el desarrollo del cubo, que como puede apreciarse en las figuras, es
diferente según el sistema utilizado.

SISTEMA EUROPEO SISTEMA AMERICANO


El desarrollo del cubo de proyección, nos proporciona sobre un único plano de
dibujo, las seis vistas principales de un objeto, en sus posiciones relativas.

Con el objeto de identificar, en que sistema se ha representado el objeto, se


debe añadir el símbolo que se puede apreciar en las figuras, y que representa
el alzado y vista lateral izquierda, de un cono truncado, en cada uno de los
sistemas.

Como se puede observar en las figuras anteriores, existe una correspondencia


obligada entre las diferentes vistas. Así estarán relacionadas:

Teniendo en cuenta las correspondencias anteriores, implicarían que dadas


dos cualquiera de las vistas, se podría obtener la tercera, como puede
apreciarse en la figura:

También, de todo lo anterior, se deduce que las diferentes vistas no pueden


situarse de forma arbitraria. Aunque las vistas aisladamente sean correctas, si
no están correctamente situadas, no definirán la pieza.
17.-ESPESIFICACION DEL PLANO DE VISTA

Características generales de los Planos

Un plano, de acuerdo con sus características puede dibujarse:


a) A escala Natural
b) Ampliado
c) Reducido

Tipos de planos

Los planos los podemos clasificar en:

a) Planos de diseño.
b) Planos de conjunto o ensamblaje
c) Planos de subconjuntos
d) Planos de fabricación y ensamblaje
e) Planos de detalle
f) Planos de perspectiva explosiva.
g) Planos para catálogos.

18.-PROYECCION PARALELA EN LOS TRES PLANOS

PROYECCIONES PARALELAS:es un sistema de representación gráfica para


trasponer un objeto tridimensional a un dibujo bidimensional en un plano,
llamado plano de proyección. Consiste en proyectar puntos del espacio contra
el plano de proyección mediante haces de rectas siempre paralelas entre sí.
Esta técnica de representación gráfica se utiliza en diseños de ingeniería y
arquitectura ya que su principal ventaja es que mantiene las proporciones
relativas de lo representado y se puede medir sobre él directamente. De esta
manera se puede reconstruir el objeto fácilmente a partir de representaciones
concretas.
perspectivatrimetica: es una proyección anoxonometrica , para representar
volúmenes, en la cual el objeto tridimensional se encuentra inclinado con
respecto al «plano del cuadro» de forma que sus tres ejes principales
experimentan reducciones diferentes.

Representación en un plano de dibujo


Cuando queremos representar en un plano de dibujo (o lámina) ese plano
paralelo al Plano Horizontal (PH) tenemos que saber que lo que representamos
son sus proyecciones.

De esta forma, tendremos que “romper” la esctrutura de los tres planos (PH, PV
y PP) por la línea de intersección entre los planos horizontal y de perfil, y girar
los planos horizontal y de perfil, hasta hacerlos coincidir con el Plano Vertical
(PV).

Cuando giramos un plano, gira con todo lo que contiene.

Esto se representa en el plano del dibujo o lámina y tendríamos el trabajo


resuelto.

Se considera que los planos de proyección son infinitos, por lo que no se deben
dibujar los limites de los planos PV, PH y PP.

En la lámina o plano de dibujo, deberán quedar las proyecciones horizontal,


vertical y de perfil.

Planos paralelos a los planos de proyección

Según lo visto en el apartado anterior, podemos ver que las proyecciones están
en verdadera magnitud en el plano de proyección con el que son paralelos.

Con el otros planos, se actua de la misma forma:


Plano paralelo al Plano Vertical (PV)

El plano rectangular, paralelo al Plano Vertical de proyección, está en


verdadera magnitud en su proyección de vertical, mientras que las
proyecciones horizontal y de perfil, son una recta de las dimensiones del
tamaño del plano.

Plano paralelo al Plano Horizontal (PH)

En este caso, el plano se ve en verdadera magnitud en la proyección


horizontal, mientras que las proyecciones vertical y de perfil, son una recta.

Plano paralelo al Plano de Perfil (PP)

De forma análoga a los casos anteriores, tenemos la verdadera magnitud en la


proyección de perfil. Las otras dos proyecciones, son rectas.
19.-ALGORITMO PARA DIBUJAR UN RELOJ DIGITAL EN
PANTALLA

20.- RECORTE DE LINEAS Y POLIGONOS

1. Polígonos que admiten representación exacta.

A. Conociendo el radio.

 3, 6, 12 LADOS. Fig.51
Polígonos regulares de 3, 6, y 12 lados, conociendo el radio de la
circunferencia.

 4, 8, 16 LADOS. Fig.52

Polígonos regulares de 4, 8, y 16 lados, conociendo el radio de la


circunferencia.

 5, 10 LADOS. Fig.53

Polígonos regulares de 5 y 10 lados, conociendo el radio de la circunferencia.

B. Conociendo el lado.

 5 LADOS. Figs.54 A y B
Polígonos regulares de 5 lados, conociendo el lado.

 3, 6, 12 LADOS. Figs.55 A, B y C.

Polígonos regulares de 3, 6 y 12 lados, conociendo el lado.

 4, 8, 16 LADOS. Fig.56 A, B y C

Polígonos regulares de 4, 8, 16 lados, conociendo el lado.

También podría gustarte