C/Visual C - REPRESENTACION GRAFICA PORCENTAJES CIRCULAR EN C

 
Vista:

REPRESENTACION GRAFICA PORCENTAJES CIRCULAR EN C

Publicado por Nei (2 intervenciones) el 18/03/2003 21:14:41
Me gustaría saber como reprentar porcentajes en un círculo en C. Ya tengo la fórmula para saber los grados que son los porcentajes. He pensado hacer los ángulos a partir de una recta, pero no sé si hay alguna función para que me ponga la siguiente recta a los grados que yo quiero, formando el ángulo.
Es urgente. Gracias anticipadas a quien pueda ayudarme.
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

Representación de porcentajes en un círculo en C

Publicado por Alejandro (1153 intervenciones) el 09/05/2025 21:12:16
Para representar porcentajes en un círculo en C, puedes utilizar gráficos 2D con GDI (Graphics Device Interface) en Windows. La idea es calcular los ángulos correspondientes a los porcentajes y dibujar segmentos de arco en el círculo.

Pasos para dibujar un círculo con porcentajes



1. Calcular los ángulos: Dado un porcentaje, puedes calcular el ángulo correspondiente multiplicando el porcentaje por 360 grados.

2. Dibujar el círculo: Utiliza funciones de GDI para dibujar el círculo y los segmentos.

3. Dibujar los segmentos: Para cada porcentaje, dibuja un arco desde el ángulo inicial hasta el ángulo final.

Ejemplo de código



Aquí tienes un ejemplo básico que muestra cómo dibujar un círculo con segmentos que representan porcentajes:

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
#include <windows.h>
#include <cmath>
 
#define PI 3.14159265
 
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
 
            // Datos de porcentajes
            double percentages[] = { 25.0, 35.0, 20.0, 20.0 }; // Porcentajes
            int numSegments = sizeof(percentages) / sizeof(percentages[0]);
            int radius = 100; // Radio del círculo
            int centerX = 200; // Centro del círculo
            int centerY = 200;
 
            // Variables para el ángulo
            double startAngle = 0.0;
 
            // Dibujar cada segmento
            for (int i = 0; i < numSegments; i++) {
                double angle = percentages[i] * 360.0 / 100.0; // Convertir porcentaje a ángulo
                double endAngle = startAngle + angle;
 
                // Calcular las coordenadas del arco
                POINT startPoint = {
                    static_cast<LONG>(centerX + radius * cos(startAngle * PI / 180)),
                    static_cast<LONG>(centerY - radius * sin(startAngle * PI / 180))
                };
                POINT endPoint = {
                    static_cast<LONG>(centerX + radius * cos(endAngle * PI / 180)),
                    static_cast<LONG>(centerY - radius * sin(endAngle * PI / 180))
                };
 
                // Dibujar el arco
                Arc(hdc, centerX - radius, centerY - radius, centerX + radius, centerY + radius,
                    endPoint.x, endPoint.y, startPoint.x,startPoint.y);
 
                // Actualizar el ángulo de inicio
                startAngle += angle;
            }
 
            EndPaint(hwnd, &ps);
        } break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nShowCmd) {
    const char CLASS_NAME[] = "MiClaseVentana";
 
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
 
    RegisterClass(&wc);
 
    HWND hwnd = CreateWindowEx(0, CLASS_NAME, "Círculo de porcentajes", WS_OVERLAPPEDWINDOW,
                               CW_USEDEFAULT, CW_USEDEFAULT, 400, 400,
                               NULL, NULL, hInstance, NULL);
 
    ShowWindow(hwnd, nShowCmd);
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}

Explicación del código



1. Porcentajes: Se define un arreglo de porcentajes que se desea representar en el círculo.

2. Cálculo de ángulos: Para cada porcentaje, se calcula el ángulo correspondiente y se determina el punto de inicio y fin del arco.

3. Dibujo del arco: Se utiliza la función `Arc()` de GDI para dibujar el arco en el círculo.

4. Ventana principal: Se crea una ventana que maneja el evento de pintura (`WM_PAINT`) para dibujar el círculo.

Conclusión



Este código te permitirá representar porcentajes en un círculo utilizando GDI en C. Puedes modificar los porcentajes y el radio del círculo según tus necesidades. ¡Buena suerte, Nei!
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