Algoritmos geométricos
Analizador Diferencial Digital (algoritmo gráfico)
En Gráficos por ordenador, una implementación de hardware o software de un Analizador Diferencial Digital (DDA) se usa para la interpolación lineal de variables sobre un intervalo entre un punto de comienzo y un punto de fin. Los DDAs se usan para rastreo de líneas, triangulos y polígonos. En la implementación más simple del algoritmo DDA interpola valores en intervalo [(xinicio, yinicio), (xfin, yfin)] por calculo para cada xi las ecuaciones xi = xi−1+1, yi = yi−1 + Δy/Δx, donde Δx = xfin − xinicio y Δy = yfin − yinicio.
Si m>=0 (pendiente positiva) Si m<=1 de izquierda a derecha * muestreo de x (Δx =1) * yk+1 = redondeo(yk + m) k=1,2,... de derecha a izquierda * muestreo de x (Δx =-1) * yk+1 = redondeo(yk - m) k=1,2,... Si m > 1 (para evitar la aparición de agujeros) de izquierda a derecha * muestreo de y (Δy =1) * xk+1 = redondeo(xk + 1/m) k=1,2,... de derecha a izquierda * muestreo de y (Δy =-1) * xk+1 = redondeo(xk - m) k=1,2,... Si m<0 a="" de="" derecha="" izquierda="" m="" muestreo="" negativa="" pendiente="" si="" style="line-height: 1em;" sub="" x="1)" y="">k+10>
public void DDA(int x0, int y0, int x1, int y1, Graphics g) { int dx = x1 - x0; int dy = y1 - y0; g.drawLine( x0, y0, x1, y1); if (Math.abs(dx) > Math.abs(dy)) { // pendiente < 1 float m = (float) dy / (float) dx; float b = y0 - m*x0; if(dx<0) dx = -1; else dx = 1; while (x0 != x1) { x0 += dx; y0 = Math.round(m*x0 + b); g.drawLine( x0, y0, x1, y1); } } else if (dy != 0) { // slope >= 1 float m = (float) dx / (float) dy; // compute slope 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);
El árbol de Steiner, nombrado en honor a Jakob Steiner, es un problema de optimización combinatoria consistente en buscar la interconexión más corta para un conjunto de elementos dado. Es superficialmente similar al problema del árbol recubridor mínimo: dado un conjunto V de puntos (vértices), interconectalos por la red gráfica de menor longitud, donde la longitud es la suma de las medidas de todos los lados.La diferencia entre el problema del árbol de Steiner y el del árbol recubridor es que, en el primero se pueden añadir vértices intermedios y lados extras al grafo con el fin de reducir la longitud del árbol recubridor. Los vértices introducidos para decrecer la longitud total de las conexiones son conocidos como puntos de Steiner. Ha sido demostrado que la conexión resultante es un árbol, llamado árbol de Steiner. Pueden existir varios árboles de Steiner para un conjunto dado de vértices iniciales.El árbol de Steiner tiene aplicaciones en el diseño de circuitos eléctricos y redes de telecomunicaciones. La mayoría de las versiones del problema de Steiner son NP-completo. De hecho uno de estos pertenece a la lista de 21 problemas NP-completos de Karp. Algunos casos restringidos pueden ser resueltos por tiempo polinómico, sin embargo en la práctica se usa laheurística en su lugar.
No hay comentarios:
Publicar un comentario