Autor Tema: Hacer una línea, pintar los puntos intermedios de 2 puntos.

0 Usuarios y 1 Visitante están viendo este tema.

05 Mayo, 2026, 01:31 am
Leído 1726 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
No estoy pudiendo resolverlo.

Véase la imagen.


Si se quiere unir el punto o casillero A con el 2, como está marcado con verde, puede hacerse algo así:
XDelCasilleroaPintar = 0
Repetir
   YDelCasilleroaPintar = XDelCasilleroaPintar
   Pintar casillero ubicado en XDelCasilleroaPintar, YDelCasilleroaPintar
   XDelCasilleroaPintar++
Mientras XDelCasilleroaPintar<3

Columnas (X) y filas (Y) fue contado desde 0.

Hay una relación entre Columna y Fila, una muy simple.

Si en cambio queremos unir el casillero B con el 2, debemos averiguar la relación entre fila y columna, algo así:
Fila y Columna
0 y 1
2 y 2
Nótese que estoy usando fila de base en vez de columna porque incluye más puntos en posiciones enteras.
En fin, sé que debo hacer esto:
YDelCasilleroaPintar = 0
Repetir
   XDelCasilleroaPintar = 1+YDelCasilleroaPintar/2
   Pintar casillero ubicado en XDelCasilleroaPintar, YDelCasilleroaPintar
   YDelCasilleroaPintar++
Mientras YDelCasilleroaPintar<=YDelCasillero2

Pero necesito la fórmula para obtener todos esos números.

¿Por qué ese 1?
Asumo que porque el YDeB-XDeB=1. O sea el Y del punto B es 1 y el X es 0. Está en la columna 1, fila 0.

¿Por qué +YDelCasilleroaPintar/2?

Además hay otros casos en que cuando una cosa (fila o columna, pintándose) aumenta la otra disminuye, como que son reglas de 3 negativas, no sé.

En definitiva el programa debe poder señalar 2 puntos al azar y determinar cuales intermedios debe pintar.

Son casilleros en realidad, pero es más o menos lo mismo.

Cuando un casillero tenga una ubicación decimal, se la redondería. No hay una respuesta correcta sobre hacia dónde cuando sea .5, ni importa en mi caso.

17 Mayo, 2026, 02:12 pm
Respuesta #1

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Me entrevero en el 3er y 4to caso.



La imagen muestra:
Fila y columna del punto 1. Me refiero a la posición x e y en la pantalla.
Fila y columna del punto 2.
Distancia de filas.
Distancia de columnas.
Relación fila y columna. Estoy viendo sólo casos en que la distancia en columnas absoluta sea mayor o igual que la de filas.
Una línea de ejemplo.

Abajo de Fila0, fila1, etc, donde dice 0, 1, etc, eso es el "momento", como un contador, desde la columna (posición y de un punto) más izquierda de la línea. Entonces abajo se calcula la fila del punto, luego de transformar "momento" en su columna (y) real.

En fin, cuando la columna del punto 1 está a la derecha del punto 2 me entrevero, en parte porque el loop debe ser diferente.
Una posible solución sería invertir los puntos, pero tengo curiosidad de cual sería la solución real digamos.

Estaba usando este código:
Código: [Seleccionar]
function GenerarLineas () {
// Pintar cuadraditos de modo que se forme una línea:
// Elegir un color distinto al color del cuadro:
do {
ColorDeImagen = PosiblesColores[random(PosiblesColores.length)];
} while (ColorDelCuadro == ColorDeImagen);
// Determinar ubicación del punto 1,
// llamado Punto en vez de Cuadradito porque...
// ese nombre puede que se esté usando en otra cosa:
FilaDePunto1 = random(CuadraditosPorFila+1);
ColumnaDePunto1 = random(CuadraditosPorFila+1);
trace("FilaDePunto1: "+FilaDePunto1);
trace("ColumnaDePunto1: "+ColumnaDePunto1);
// Punto 2 asegurando que no sea igual:
do {
ColumnaDePunto2 = random(CuadraditosPorFila+1);
FilaDePunto2 = random(CuadraditosPorFila+1);
} while (ColumnaDePunto1 == ColumnaDePunto2 && FilaDePunto1 == FilaDePunto2);
trace("FilaDePunto2: "+FilaDePunto2);
trace("ColumnaDePunto2: "+ColumnaDePunto2);
// Para cálculos con regla de 3:
FilasDeDistancia = FilaDePunto2-FilaDePunto1;
ColumnasDeDistancia = ColumnaDePunto2-ColumnaDePunto1;
trace("FilasDeDistancia: "+FilasDeDistancia);
trace("ColumnasDeDistancia: "+ColumnasDeDistancia);
// Averiguar la distancia mayor y graficar en función de ella:
if (Math.abs(ColumnasDeDistancia) >= Math.abs(FilasDeDistancia)) {
RelacionFilasColumnas = FilasDeDistancia/ColumnasDeDistancia;
trace("RelacionFilasColumnas: "+RelacionFilasColumnas);
if (ColumnasDeDistancia > 0) {
trace("ColumnasDeDistancia > 0");
// Esto es midiendo desde dónde empezará la línea,
ColumnaDelPunto = 0;
ColumnaReal = ColumnaDePunto1;
do {
trace("ColumnaDelPunto: "+ColumnaDelPunto);
FilaReal = Math.round(ColumnaDelPunto*RelacionFilasColumnas+FilaDePunto1);
trace("FilaReal: "+FilaReal);
NroDelCuadraditoaPintar = FilaReal*CuadraditosPorFila+ColumnaReal;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito+NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);
ColumnaDelPunto++;
ColumnaReal++;
} while (ColumnaReal <= ColumnaDePunto2);
} else {
trace("ColumnasDeDistancia < 0");
// Se pintará hacia la izquierda:
ColumnaDelPunto = Math.abs(ColumnasDeDistancia);
ColumnaReal = ColumnaDePunto2;
do {
trace("ColumnaDelPunto: "+ColumnaDelPunto);
FilaReal = Math.round(ColumnaDelPunto*RelacionFilasColumnas+FilaDePunto1);
trace("FilaReal: "+FilaReal);
NroDelCuadraditoaPintar = FilaReal*CuadraditosPorFila+ColumnaReal;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito+NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);
ColumnaDelPunto--;
} while (ColumnaReal >= ColumnaDePunto1);
}
} else {
// Acá iría el caso de que la distancia de filas es mayor que el de columnas, es otro tema.
}
}

Pero lo que se muestra en pantalla también es confuso, debido al caso que aún no intento que esté bien, se ven muchas cosas mal y no se sabe a qué caso corresponde. Puedo mejorar eso, pero en fin, por ahora consulto.

ColumnaDelPunto es lo que antes llamé momento.
Ya que la regla de 3 o lo que sea se calcula basado en la distancia, debo usar valores de 0 a distancia. Cuando el valor es 0, fila es fila 1. Cuando el valor es distancia, es fila 2. Pero si están al revés quizá es al revés, no sé.
Lo que sí, es que ese momento o ColumnaDelPunto no es igual a la Columna real, salvo que haya iniciado en 0, por eso se la agrego en la fórmula.

Pregunten si algo no se entiende.

Otra forma de verlo es que una bola debe recorrer X distancia mientras recorre Y distancia. Tengo X e Y, lo que debo calcular es dónde estará en X a medida que avanza 1 en Y.

EDIT:
Le pedí ayuda a la IA y quedó bastante bien, luego trato de corregir más.
Código: [Seleccionar]
RepintarCuadrosLineas:
function GenerarLineas () {
// Pintar cuadraditos de modo que se forme una línea:
// Elegir un color distinto al color del cuadro:
do {
ColorDeImagen = PosiblesColores[random(PosiblesColores.length)];
} while (ColorDelCuadro == ColorDeImagen);
// Determinar ubicación del punto 1,
// llamado Punto en vez de Cuadradito porque...
// ese nombre puede que se esté usando en otra cosa:
FilaDePunto1 = random(CuadraditosPorFila);
ColumnaDePunto1 = random(CuadraditosPorFila);
trace("FilaDePunto1: "+FilaDePunto1);
trace("ColumnaDePunto1: "+ColumnaDePunto1);
// Averiguar qué cuadradito es y pintarlo:
// NroDelCuadraditoaPintar = FilaDePunto1*CuadraditosPorFila+ColumnaDePunto1;
// ParaColorDeCuadradito = new Color(Cuadro_pCuadradito+NroDelCuadraditoaPintar);
// ParaColorDeCuadradito.setRGB(ColorDeImagen);
// Punto 2 asegurando que no sea igual:
do {
ColumnaDePunto2 = random(CuadraditosPorFila);
FilaDePunto2 = random(CuadraditosPorFila);
} while (ColumnaDePunto1 == ColumnaDePunto2 && FilaDePunto1 == FilaDePunto2);
trace("FilaDePunto2: "+FilaDePunto2);
trace("ColumnaDePunto2: "+ColumnaDePunto2);
// Para cálculos con regla de 3:
FilasDeDistancia = FilaDePunto2-FilaDePunto1;
ColumnasDeDistancia = ColumnaDePunto2-ColumnaDePunto1;
trace("FilasDeDistancia: "+FilasDeDistancia);
trace("ColumnasDeDistancia: "+ColumnasDeDistancia);
// Averiguar la distancia mayor y graficar en función de ella:
if (Math.abs(ColumnasDeDistancia) >= Math.abs(FilasDeDistancia)) {
RelacionFilasColumnas = FilasDeDistancia/ColumnasDeDistancia;
trace("RelacionFilasColumnas: "+RelacionFilasColumnas);
ColumnaBase = ColumnaDePunto1;
// Averiguar si avanzar hacia la derecha (+1) o la izquierda (-1):
if (ColumnasDeDistancia >= 0) {
Paso = 1;
} else {
Paso = -1;
}
do {
trace("ColumnaBase: " + ColumnaBase);
DistanciaRecorrida = ColumnaBase - ColumnaDePunto1;
FilaCorrespondiente = Math.round(DistanciaRecorrida * RelacionFilasColumnas + FilaDePunto1);
trace("FilaCorrespondiente: " + FilaCorrespondiente);
NroDelCuadraditoaPintar = FilaCorrespondiente * CuadraditosPorFila + ColumnaBase;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito + NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);
// Avanzar o retroceder según corresponda:
ColumnaBase = ColumnaBase + Paso;
// El bucle se detiene cuando pasamos el Punto 2 (usamos Paso para evaluar correctamente la dirección):
} while ((Paso == 1 && ColumnaBase <= ColumnaDePunto2) || (Paso == -1 && ColumnaBase >= ColumnaDePunto2));
} else {
RelacionFilasColumnas = ColumnasDeDistancia/FilasDeDistancia;
FilaBase = FilaDePunto1;
if (FilasDeDistancia >= 0) {
Paso = 1;
} else {
Paso = -1;
}
do {
DistanciaRecorrida = FilaBase - ColumnaDePunto1;
ColumnaCorrespondiente = Math.round(DistanciaRecorrida * RelacionFilasColumnas + FilaDePunto1);
NroDelCuadraditoaPintar = FilaBase * CuadraditosPorFila + ColumnaCorrespondiente;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito + NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);
// Avanzar o retroceder según corresponda:
FilaBase = FilaBase + Paso;
// El bucle se detiene cuando pasamos el Punto 2 (usamos Paso para evaluar correctamente la dirección):
} while ((Paso == 1 && FilaBase <= FilaDePunto2) || (Paso == -1 && FilaBase >= FilaDePunto2));
}
}

17 Mayo, 2026, 10:10 pm
Respuesta #2

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Hola , Tachicomaia, entiendo que quieres unir 2 puntos pintando la menor cantidad posible de cuadraditos que compartan un vértice o un lado con otro contiguo.


En el primer caso cuando vas por una diagonal, es fácil hallar la fórmula , pero cuando la cantidad de cuadrados en vertical es diferente al horizontal , ya no hay un único camino, y allí debes escoger por el que te interesa, cuanto más grande es el cuadrado original y mas alejados estén los cuadrados inicial y final de una vertical horizontal y diagonal. mas variantes de caminos podras tener, Solo tu debes decidir cual es el camino que escoges de algún modo que te plazca,lo que si es seguro que dicho camino mas corto esta compuesto de dos partes , una serie de uniones en diagonal o otra serie de uniones en vertical u horizontal, pero nunca de ambas a la vez, sino el camino no es optimo en longitud.
Entonces el camino tienes que dividirlo en una cantidad de porciones diagonales contiguas y otra porción de uniones verticales u horizontales contiguas, la cantidad de caminos posibles sale de un numero combinatorio en base a esas cantidades, todos son posibles y óptimos en longitud, así que la formula dependerá de como quieras trazar ese camino.


para B hasta a 2  tienes dos formas de hacerlo, primero bajar uno en diagonal derecha y luego bajar en vertical, o primero bajar en vertical y luego bajar en diagonal a la derecha.


  • ir a derecha es sumar 1 al numero anterior
  • ir abajo es sumar $$n$$ (numero de cuadrados por lado del cuadrado grande) al número de cuadrado anterior
  • diagonal hacia abajo y derecha es combinar ambos  así que sumas $$n+1$$
retroceder o subir, es aplicar  resta donde tienes sumas.
Así que todas las 8 posibles continuaciones de un camino las tienes contempladas con esas 3 indicaciones.


Spoiler
1) ir para arriba$$\to n_f=n_i-n$$
2) ir para arriba derecha $$\to n_f=n_i-n+1$$
3) ir para derecha $$\to n_f=n_i+1$$
4) ir para abajo derecha $$\to n_f=n_i+n+1$$
5) ir para abajo $$\to n_f=n_i+n$$
6) ir para abajo izquierda $$\to n_f=n_i+n-1$$
7) ir para izquierda $$\to n_f=n_i-1$$
8) ir para arriba izquierda$$\to  n_f=n_i-n-1$$
[cerrar]


Pero lo que te dice cual es la dirección del camino , la debes decidir previamente,
Te doy un ejemplo, puedes escojer primero siempre moverte en diagonal, hasta que el último cuadrado esté en la misma columna o fila que el el número final y luego ascender o bajar por la columna o bien  retroceder  o avanzar por las filas, eso sería una forma válida, pero también es válido todo lo contrario,  moverse vertical u horizontal  hasta la diagonal mas cercana y luego recorrerla... pero siempre es una elección entre estas dos variantes y de  un montón mas de combinaciones posibles según el caso.

Los caminos que no tienen variantes, es decir una única forma de recorrerlos  son los que están en la misma fila, columna o diagonal.

el número de caminos posibles son : 
 
si $$df =\sqrt{(fila_{ final}-fila_{inicial})^2}$$
y si $$dc =\sqrt{(columna_{ final}-columna_{inicial})^2}$$

la longitud del camino es   $$L=maximo(df,dc)$$
  • si $$df>dc$$
$$N=\binom{df}{dc}=\dfrac{df!}{dc!(df-dc)!}$$

  • si $$df<dc$$
$$N =\binom{dc}{df}=\dfrac{dc!}{df!(dc-df)!}$$

donde $$!$$ indica factorial de la variable previa.

Cualquiera que tomes de los $$N$$ caminos sera correcto

Si $$dc$$ o $$df$$ son 0  entonces el  en número de caminos es 1 (comparten la vertical o la horizontal) lo mismo  si $$df=dc$$   entonces $$N$$ es igual a 1 pues estas en una diagonal.
Saludos  \(\mathbb {R}^3\)

18 Mayo, 2026, 08:09 am
Respuesta #3

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Entiendo que no siempre existe "el modo más estético", pero comprenderás a qué me refiero. Si hay que avanzar 2 pasos a la derecha, y 10 hacia abajo, queda feo que los 2 primeros pasos se den al inicio. Has visto cómo se generan las líneas en Paint o programas comunes. Te muestro cómo lo tengo:


Ignora lo de "Salida".

Al azar se genera una línea en cada cuadro.

Ves que pueden ocurrir errores:
- Cuadro 1, 0 (fila, columna): La línea está como cortada, aparece en los 2 extremos.
- Varios: La línea avanza al principio o final en vez de en el medio, pareciendo una curva.

Fijate el último código del anterior post a ver si puedes corregirlo.

19 Mayo, 2026, 01:53 am
Respuesta #4

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Hola, vista la imagen que pones y los ejemplos, me parece que lo que lo que debes exigir al programa que genera la linea es que sea o mas simetrico posible,  Es decir cuando ves curva en realidad no lo son, el tema es que tu tienes que usar  una cantidad de filas que no es divisible exactamente por la cantidad de columnas o viceversa, siempre te queda un resto y no simpre ese resto puede distribuirse simetricamente en los extremos. en lineas largas y cuadrados pequeños esos defectos no son visibles a simple vista, pero al magnificar o hacer zoom sobre una zona toda recta estar compuesta por tramos  rectos y trmos diagonales, no hay forma de evitar eso.


Supón que $$dc>df$$   si haces $$dc/df$$ te dara un numero mayor  a 1,  si resulta un entero $$x$$ habrá forma de avanzar  $$x$$ casillas verticales por cada 1 horizontal, pero si hay un  resto  es decir cuando te da con decimales ,  el resto serán casillas que debes distribuir lo mas simétrico posible en el inicio y en el fin , o solo al inicio o solo al final, pero es una cuestión que debes abordar desde la programación sobre como quieres hacerlo.


Por ejemplo en el 7mo cuadrado  tienes una distancia vertical de 9 cuadrados y de 3 en horizontal , el dibujo que pusiste tiene 4 en la primer columna saltas en diagonal luego otras 4 en vertical, y finalmente 1 , dando una forma que no se parece a una recta, pero,  con lo que yo te digo  haces 9/3  que da 3 exacto, entonces veras que cada tramo es de 3 cuadrados sobre la misma columna, es simétrico y mas parecido a una recta, con lo que la estética mejora.


El sexto mas de lo mismo tiene 9 filas 2 columnas, entonces te da 9/2 =4.5   así tomas 1 columna con 4  y la otra necesariamente tiene el resto 5 .
La idea es que repartas los restos lo mas simétrico posible.


Imagina tienes 31 filas por 9 columnas  si haces la división te da  tramos de 3 casillas por columna, pero te sobran 4= 31-9*3 , donde ubicarlas a esas 4 ? hay que repartiralas, si te fijas hay 9 columnas  la mitad de 9 es 4.5  y el entero es 4 que coincide con lo que te esta restando, así que si intercalas,  dibujas 3,4,3,4,3,4,3,4,3 casillas por columna  te saldra una recta simétrica mas que con cualquier otra distribución... reitero  reparte las casillas que restan de la división lo mas homogéneamente posible por columna o fila  según te toque.


Por ahora no tengo claro como hacer para que eso lo puedas hacer automáticamente... lo pensaré, quizá a alguien mas se le ocurre mas rápido o mejor que a mí.   
Saludos  \(\mathbb {R}^3\)

19 Mayo, 2026, 11:58 pm
Respuesta #5

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
La IA corrigió mi error:
Código: [Seleccionar]
} else {
// 🌟 Aquí invertimos la relación: Columnas / Filas
RelacionFilasColumnas = ColumnasDeDistancia / FilasDeDistancia;
FilaBase = FilaDePunto1;

if (FilasDeDistancia >= 0) {
Paso = 1;
} else {
Paso = -1;
}

do {
// 🌟 CORRECCIÓN: Medimos la distancia restando FILAS
DistanciaRecorrida = FilaBase - FilaDePunto1;

// 🌟 CORRECCIÓN: Calculamos la columna sumando la COLUMNA inicial del Punto 1
ColumnaCorrespondiente = Math.round(DistanciaRecorrida * RelacionFilasColumnas + ColumnaDePunto1);

// El cálculo del ID único del cuadradito se mantiene igual
NroDelCuadraditoaPintar = FilaBase * CuadraditosPorFila + ColumnaCorrespondiente;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito + NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);

// Avanzar o retroceder la fila según el paso:
FilaBase = FilaBase + Paso;

} while ((Paso == 1 && FilaBase <= FilaDePunto2) || (Paso == -1 && FilaBase >= FilaDePunto2));
}

Pero el error de la repartición asimétrica sigue, y quizá empeoró. Ejemplo:

La más derecha de arriba parece que tiene 3, 6, 4, supongo que por cómo se convierten los decimales, pero está raro, voy a revisar casos poniendo que se describa claro qué pasa.

20 Mayo, 2026, 12:13 am
Respuesta #6

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

La más derecha de arriba parece que tiene 3, 6, 4, supongo que por cómo se convierten los decimales, pero está raro, voy a revisar casos poniendo que se describa claro qué pasa.
sería mejor que te diera 3,7,3   pero lo ideal es 4,5,4
Saludos  \(\mathbb {R}^3\)

20 Mayo, 2026, 12:25 am
Respuesta #7

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Eso pensé, si son 13 de largo / 3 de alto, son 4 y sobra 1. Tenemos 4, 4, 4, el que falta asignar debería ir al medio.

En un foro de informática me habían recomendado el "algoritmo de Bresenham", pero como en Wikipedia no lo entendí lo intenté por mi cuenta y ya ves xD

Luego veo más... Ando un poco complicado, el monitor puede que no me funcione al prenderlo, y yo a veces es como que dejo de funcionar también, me da como sueño xP

20 Mayo, 2026, 04:21 am
Respuesta #8

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Eso pensé, si son 13 de largo / 3 de alto, son 4 y sobra 1. Tenemos 4, 4, 4, el que falta asignar debería ir al medio.

En un foro de informática me habían recomendado el "algoritmo de Bresenham", pero como en Wikipedia no lo entendí lo intenté por mi cuenta y ya ves xD

Luego veo más... Ando un poco complicado, el monitor puede que no me funcione al prenderlo, y yo a veces es como que dejo de funcionar también, me da como sueño xP


https://es.wikipedia.org/wiki/Algoritmo_de_Bresenham


Allí lo tienes en código , pidele a alguna IA que te lo pase a lenguaje de PC y que respete las instrucciones previas que tambien da la pagina
Saludos  \(\mathbb {R}^3\)

28 Mayo, 2026, 04:22 am
Respuesta #9

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
No quiero usar código sin entender qué hace, por ahora quiero desarrollar algo o que me digan algo que pueda entender.

Del código algo que entendí que me pareciò útil es que a veces el proceso de pintar sigue recto y a veces sube 1, o baja 1, etc, dependiendo de si debe o no.

Por mi parte probando mis códigos entendí el motivo de las fallas. Ejemplo:

Fila1   0
Col1   0
Fila2   2
Col2   8
Produce 2, 4, 3.
Código: [Seleccionar]
Columna Resultado Redondeado, fila
0 0 0
1 0,25 0
2 0,5 1
3 0,75 1
4 1 1
5 1,25 1
6 1,5 2
7 1,75 2
8 2 2
Produce 2, 4, 3 significa que la fila 0 tiene 2 puntos, la 1ª tiene 4 y la 2ª tiene 3.

Lo que he pensado es que en ese caso habría que hacer 9/3, o sea tengo 9 columnas, se recorrerá una distancia de 9, y debe repartirse equitativamente en 3 filas, bueno...
Debería pensar más sobre esa base.

Otra cosa que pensé es relacionado con eso, no sé bien explicarlo, pero que las divisiones terminen antes de empezar decimales, o sea que los resultados sean enteros, y luego el resto repartirlo según el caso. Es medio largo de hacer o no sé una forma corta. Repartir el resto significa que en ciertas filas o columnas, habrá un punto más que en otras. Por ejemplo supongamos que será una línea de 4 columnas y 3 líneas. 4/3 es 1,algo pero quitamos los decimales, y el resto es 1. Entonces hasta ahí tenemos una línea de 3*3 a la que debemos agregar una columna. Entonces una fila debe tener 1 punto extra, el resto de la división. ¿Dónde? En el medio.
¿Pero qué pasa si no hay medio? ¿y/o si el resto fuese mayor? Aún no pensé tanto eso, pero como dijiste hay casos en que no hay una forma correcta de hacer la línea, me gustaría que en esos casos sea al azar.

Seguiré pensando ¿alguna idea?

Edit:

Seguiré, eso lo explico otro día pero creo que está bastante claro.
Rojo: Líneas descartadas porque siguiendo esa regla al ser más grandes quedarían mal.
Amarillo: Estoy indeciso.