Saltar al contenido

creando una pendiente en Java

Este enunciado fue analizado por especialistas para que tengas la seguridad de la exactitud de nuestra esta crónica.

Solución:

Dos bucles: recorres x++ solo cuando deltaX > deltaY. de lo contrario, recorre solo y ++.

Los pasos dobles x e y en el mismo ciclo, decidir cuál debe incrementarse (suponiendo que también tiene x como una función de y) podría conducir a un dibujo más lento debido a las pruebas adicionales y los píxeles adyacentes pueden parecer un punto en la línea. Tendrías que jugar con la intensidad del color para hacer antialiasing a mano (chapado en oro). Dos bucles es mucho más simple.

Para tu información, estás tratando de generar una imagen, también puedes simplemente establecer entradas en una matriz y hacer una imagen sin procesar fuera de la pantalla (BufferedImage y su método .setRGB()), que dibujarás más tarde. Eso probablemente sería más rápido y evitaría retrasos visibles en la pintura.

En general, esto se hace mediante el uso de un algoritmo que no avanza solo a lo largo del eje x o y, sino que ajusta el incremento de actualización en una cantidad variable, de modo que cada punto es como máximo sqrt(2) lejos el uno del otro.

Entonces, si cree que tiene un punto en el valor x, pero cuando lo calcula, encuentra que está a 3,5 píxeles de distancia (porque la pendiente es muy pronunciada), cae en una rutina que calcula (típicamente recursivamente) un punto intermedio píxel entre ese paso x

(x, y)
(0, 0) to (1, 5) distance 5.09
-> fill routine
   (0, 0) to (0.5, 2.5) distance 2.69
   -> fill routine
      (0, 0) to (0.25, 1.25) distance 1.34 < 1.41 
      (0.25, 1.25) to (0.5, 2.5) distance 1.34 < 1.41
      (0.5, 2.5) to (0.75, 3.75) distance 1.34 < 1.41
      (0.75, 3.75) to (1, 5) distance 1.34 < 1.41
(1, 5) to (2, 10) etc...

La razón por la que se usa 1,41 (sqrt(2)) como la distancia máxima permitida es porque una cantidad de píxeles en un ángulo de 45 grados desde la parte inferior de la pantalla todavía aparecería conectada.

Ahora, en su trazado, deberá redondear los valores para alinearlos con los píxeles exactos. hay muchas maneras de hacer esto. Lo más simple es simplemente redondear al siguiente valor válido, y esto funciona la mayor parte del tiempo. Tiene un efecto secundario desafortunado, es que su línea parecerá tener pasos dentados (donde el redondeo mueve más el píxel, el paso aparecerá más dentado). Esta irregularidad se llama "aliasing" como el true punto se presenta a través de un no-true representación del punto (el alias).

Un segundo enfoque es oscurecer alternativamente ambos píxeles proporcionalmente, en función de lo cerca que esté el punto. Un punto que está en (0,5) en el eje x oscurecería ambos píxeles en un 50 %, mientras que un punto que está en (0,25) oscurecería el píxel 0 en un 75 % y el píxel 1 en un 25 %. Esto es suavizado y puede dar como resultado una línea un poco más borrosa, pero que parece más recta. Esta borrosidad se puede combatir un poco dibujando una línea más gruesa.

Espero que esto le dé una idea de las matemáticas detrás de muchas de las rutinas de dibujo de mayor calidad, y ciertamente hay enfoques que son aún más sofisticados que el que acabo de presentar.

Calificaciones y comentarios

Si te apasiona la programación, tienes la habilidad dejar un tutorial acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *