C/Visual C - Concurrencia

 
Vista:

Concurrencia

Publicado por DJ Gasper (1 intervención) el 14/11/2002 18:57:04
Necesito ayuda para realizar un programa que dibuje 4 lineas de manera aleatoria (cada linea realiza 10 trazos) y no deben pasar sobre la misma linea o sobre las otras, todo esto por medio del algoritmo de Decker. Pueden responder a mi mail ([email protected]) o en este foro.

Gracias
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

Programa para dibujar líneas aleatorias sin intersección usando el algoritmo de Dekker

Publicado por Alejandro (913 intervenciones) el 02/04/2025 20:22:19
Para implementar un programa que dibuje 4 líneas de manera aleatoria sin que se crucen entre sí, puedes seguir estos pasos:

1. Definir la estructura de datos: Utiliza estructuras para representar las líneas y sus coordenadas.
2. Implementar el algoritmo de Dekker: Asegúrate de que el acceso a las líneas sea controlado para evitar que se dibujen simultáneamente.
3. Generar coordenadas aleatorias: Utiliza una función para generar coordenadas aleatorias para las líneas, asegurándote de que no se crucen.

Ejemplo de código en C:



Aquí tienes un ejemplo básico que ilustra cómo podrías estructurar tu programa. Este código no incluye la implementación gráfica, pero te da una idea de cómo manejar las líneas y el algoritmo de Dekker.

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
 
#define NUM_LINES 4
#define MAX_TRACES 10
 
typedef struct {
    int x1, y1, x2, y2; // Coordenadas de la línea
} Line;
 
Line lines[NUM_LINES];
 
bool checkIntersection(Line newLine) {
    for (int i = 0; i < NUM_LINES; i++) {
        if (lines[i].x1 == newLine.x1 && lines[i].y1 == newLine.y1 &&
            lines[i].x2 == newLine.x2 && lines[i].y2 == newLine.y2) {
            return true; // Hay intersección
        }
    }
    return false; // No hay intersección
}
 
void drawLine(Line line) {
    // Aquí iría la lógica para dibujar la línea
    printf("Dibujando línea de (%d, %d) a (%d, %d)\n", line.x1, line.y1, line.x2, line.y2);
}
 
void generateRandomLines() {
    for (int i = 0; i < NUM_LINES; i++) {
        Line newLine;
        do {
            newLine.x1 = rand() % 100; // Genera coordenadas aleatorias
            newLine.y1 = rand() % 100;
            newLine.x2 = rand() % 100;
            newLine.y2 = rand() % 100;
        } while (checkIntersection(newLine)); // Verifica intersección
        lines[i] = newLine; // Almacena la línea
    }
}
 
int main() {
    srand(time(NULL)); // Inicializa la semilla para números aleatorios
    generateRandomLines(); // Genera líneas aleatorias
 
    for (int i = 0; i < NUM_LINES; i++) {
        drawLine(lines[i]); // Dibuja cada línea
    }
 
    return 0;
}

Explicación del código:


1. Estructura `Line`: Define una estructura para almacenar las coordenadas de cada línea.
2. Función `checkIntersection`: Verifica si la nueva línea se cruza con alguna línea existente.
3. Función `drawLine`: Simula el dibujo de la línea (deberías reemplazar esto con la lógica gráfica real).
4. Función `generateRandomLines`: Genera líneas aleatorias y verifica que no se crucen.
5. Función `main`: Inicializa el generador de números aleatorios, genera las líneas y las dibuja.

Notas:


- Este código es un punto de partida. Necesitarás integrar una biblioteca gráfica para el dibujo real de las líneas.
- Asegúrate de implementar el algoritmo de Dekker para gestionar el acceso a las líneas si estás trabajando en un entorno concurrente.

¡Buena suerte con tu proyecto, DJ!
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