Algoritmia - URGENTE!!!!!!!!!!

 
Vista:

URGENTE!!!!!!!!!!

Publicado por Andres (1 intervención) el 26/03/2009 17:05:59
quisiera saber si alguien tiene algun programa que me dibuje que se yo una linea pero que sean con un algoritmo diferente al DDA y al Bresenhan.......xfa......
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Dibujo de líneas suavizadas con el algoritmo de Wu en Python

Publicado por Alejandro (307 intervenciones) el 13/03/2024 22:48:46
Claro, existen otros algoritmos para dibujar líneas además del algoritmo DDA (Digital Differential Analyzer) y del algoritmo de Bresenham. Uno de estos algoritmos es el algoritmo de Wu, también conocido como el algoritmo de suavizado de Wu.

El algoritmo de Wu es conocido por su capacidad para producir líneas suavizadas y anti-aliasing, lo que significa que puede dibujar líneas que se ven más suaves y naturales en comparación con otros algoritmos.

Aquí tienes un ejemplo de implementación del algoritmo de Wu en Python utilizando la biblioteca Pygame para la visualización:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import pygame
import math
 
# Función para dibujar una línea suavizada usando el algoritmo de Wu
def draw_smooth_line(surface, color, start, end):
    x1, y1 = start
    x2, y2 = end
 
    dx = x2 - x1
    dy = y2 - y1
 
    if abs(dy) < abs(dx):
        if x2 < x1:
            x1, x2 = x2, x1
            y1, y2 = y2, y1
        gradient = dy / dx
        xend = round(x1)
        yend = y1 + gradient * (xend - x1)
        xgap = 1 - (x1 + 0.5) % 1
        xpxl1 = xend
        ypxl1 = int(yend)
        surface.set_at((xpxl1, ypxl1), color * (1 - (yend % 1)))
        surface.set_at((xpxl1, ypxl1 + 1), color * (yend % 1))
        intery = yend + gradient
        xend = round(x2)
        yend = y2 + gradient * (xend - x2)
        xgap = (x2 + 0.5) % 1
        xpxl2 = xend
        ypxl2 = int(yend)
        surface.set_at((xpxl2, ypxl2), color * (1 - (yend % 1)))
        surface.set_at((xpxl2, ypxl2 + 1), color * (yend % 1))
        for x in range(xpxl1 + 1, xpxl2 - 1):
            surface.set_at((x, int(intery)), color * (1 - (intery % 1)))
            surface.set_at((x, int(intery) + 1), color * (intery % 1))
            intery += gradient
    else:
        if y2 < y1:
            x1, x2 = x2, x1
            y1, y2 = y2, y1
        gradient = dx / dy
        yend = round(y1)
        xend = x1 + gradient * (yend - y1)
        ygap = 1 - (y1 + 0.5) % 1
        ypxl1 = yend
        xpxl1 = int(xend)
        surface.set_at((xpxl1, ypxl1), color * (1 - (xend % 1)))
        surface.set_at((xpxl1, ypxl1 + 1), color * (xend % 1))
        interx = xend + gradient
        yend = round(y2)
        xend = x2 + gradient * (yend - y2)
        ygap = (y2 + 0.5) % 1
        ypxl2 = yend
        xpxl2 = int(xend)
        surface.set_at((xpxl2, ypxl2), color * (1 - (xend % 1)))
        surface.set_at((xpxl2, ypxl2 + 1), color * (xend % 1))
        for y in range(ypxl1 + 1, ypxl2 - 1):
            surface.set_at((int(interx), y), color * (1 - (interx % 1)))
            surface.set_at((int(interx) + 1, y), color * (interx % 1))
            interx += gradient
 
# Ejemplo de uso
pygame.init()
 
width = 800
height = 600
window = pygame.display.set_mode((width, height))
pygame.display.set_caption('Algoritmo de Wu')
 
white = (255, 255, 255)
black = (0, 0, 0)
 
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
 
    window.fill(black)
    draw_smooth_line(window, white, (100, 100), (700, 500))
    pygame.display.flip()
 
pygame.quit()

Este código utiliza el algoritmo de Wu para dibujar una línea suavizada en una ventana de Pygame. Puedes ajustar los puntos de inicio y fin de la línea según sea necesario.

Espero que este ejemplo te sea útil. ¡Buena suerte con tu proyecto, Andrés!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar