2010-08-30 15 views
10

me encontré caso especial donde necesito para producir línea simétrica de ultra o rayo en rejilla 2D con el fin de (x0, y0) a través de (x1, y1) como esto:Algoritmo de línea ultra simétrica?

void drawSymmetricalLine(int x0, int y0, int x1, int y1) 
{ 
    // loop and handle each (x, y)... 
} 

El problema real está en los puntos donde los populares algoritmos de dibujo de líneas NO dibujan ambas coordenadas (la otra marcada como x a continuación) ya que parece espesar, lo cual es deseable en mi caso. Además, el rendimiento no es importante, sino la simplicidad.

Esto es lo que me refiero como líneas simétricas de ultra:

ox ooo 
oo  ooo 


o o 
o o 
    o o 
     o 

Respuesta

4

probablemente Puede utilizar Bresenham's line algorithm y modificarlo un poco para cuando el cambio de paso para mover la posición sorteo de una fila a otra que pintas tanto el antes y después de los píxeles en el eje y para el eje x actual.

1

Si se prefiere la simplicidad sobre el rendimiento, escriba un algoritmo recursivo. En cada paso, calcule DX = X1-X0 y DY = Y1-Y0.

Detener la recursión cuando DX = 0 o DY = 0 (en cuyo caso la línea es vertical u horizontal).

De lo contrario, calcule los dos puntos finales "medios", de acuerdo con la paridad de DX y DY, y dibuje las dos medias líneas recursivamente.

0

Utilice Bresenham's line algorithm excepto cuando traza un punto en (x0 + dx, y0 + dy), también trace un punto en (x1-dx, y1-dy). De esta forma, se asegura de que sea simétrica desde ambos lados.

Es un poco ineficiente, pero dijiste que no importa.

2

Renderice la línea dos veces, una vez de p0 a p1 y nuevamente de p1 a p0.

+0

Esto es lo que hago para la línea de visión simétrica en los juegos. – Madmenyo

Cuestiones relacionadas