Calcular puntos en un cuadrante de circunferencia.

El ejercicio o práctica de programación en lenguaje c que se plantea es el siguiente:

Realizar un algoritmo que visualice e indique la cantidad de puntos que se encuentran situados dentro de un circulo
con centro 0,0 en el cuadrante 1. Se amplia el ejercicio o práctica de forma que los puntos sean generados al azar en una matriz de puntos, una vez generados los puntos, calcular cuales están dentro del circulo, visualizar su angulo y el cuadrante al que pertenecen.

En la practica se han utilizado estructuras de datos, bucles, matrices, generación de números aleatorios, condicionales, etc.

Una posible solución al ejercicio puede ser la siguiente:

/*
    El ejercicio o práctica de programación en lenguaje c
    que se plantea es el siguiente:

    Realizar un algoritmo que visualice e indique la cantidad
    de puntos que se encuentran situados dentro de un circulo
    con centro 0,0 en el cuadrante 1.

    Se amplia el ejercicio o práctica de forma que los puntos
    sean generados aleatoriamente en una matriz de puntos, una
    vez generados los puntos, calcular cuales están dentro del
    circulo, visualizar su angulo y el cuadrante al que pertenecen.
*/


// Definición de las librerías a utilizar
#include <stdio.h>
#include <stdlib.h>
// Inclusión de la librería de tiempo para
// el calculo posterior de un numero aleatorio
#include <time.h>
// Inclusión de la librería de matemáticas para
// realizar los cálculos mas cómodamente
#include <math.h>

// Definición de la estructura punto
typedef struct p {
    int x;
    int y;
} Punto;


// Definición del numero máximo de puntos a evaluar
#define MAX 20
#define M_PI 3.14159265358979323846

int main()
{
    // Variables auxiliares a utilizar
    int radio = 0;
    int contador = 0;
    int incremento = 0;
    int vinicio = 0;
    int vfinal = 0;
    float x = 0;
    float y = 0;
    int signo = 0;
    float angulo;
    int cuadrante = 0;
    int cuantos_cuadrante_uno = 0;

    // Creación de la matriz de puntos
    Punto matrizPuntos[MAX];

    // Solicitar el radio del circulo
    printf("Radio: ");
    scanf("%d",&radio);

    // Rellenar la matriz de puntos de forma aleatoria
    // para ello utilizamos la función rand para generar
    // los valores de los puntos, esta funcion esta incluida
    // en la librería estándar
    // se establece el inicio de la creación de los números
    // aleatorios de forma que no se repitan las secuencias
    // para ello se utiliza la función srand indicando un valor
    // cambiante como puede ser la hora actual que se consigue
    // mediante la función time, solo se ha de especificar una
    // vez esta orden.
    srand(time(NULL));
    // se calcula el incremento a aplicar a los puntos a generar
    // de esta forma generaremos puntos dentro y fuera de la
    // circunferencia
    incremento = radio/2;
    // se establece el numero de inicio y final de los valores
    // aleatorios
    vinicio = 0;
    vfinal = radio+incremento;
    // se utiliza un bucle para recorrer la matriz de puntos
    // y asignar un valor aleatorio a cada uno de las coordenadas
    for(contador=0; contador<MAX; contador++) {
        matrizPuntos[contador].x = (rand()%(vinicio+vfinal));
        signo = rand()%2;
        if(signo==0) matrizPuntos[contador].x = -matrizPuntos[contador].x;
        matrizPuntos[contador].y = (rand()%(vinicio+vfinal));
        signo = rand()%2;
        if(signo==0) matrizPuntos[contador].y = -matrizPuntos[contador].y;
    }
    // se visualiza la matriz de puntos utilizando un bucle para
    // recorrer la matriz y se realiza el calculo para comprobar
    // si el punto se encuentra dentro de la circunferencia en caso
    // de encontrarse dentro de ella se visualiza también un mensaje
    for(contador=0; contador<MAX; contador++) {
        printf("\n(%4d,%4d)",matrizPuntos[contador].x,matrizPuntos[contador].y);
        // Comprobar si el punto se encuentra dentro de la circunferencia
        x = matrizPuntos[contador].x;
        y = matrizPuntos[contador].y;
        // la forma más simple de comparación es preguntar si ambos valores
        // x e y son inferiores al tamaño del radio
        if(abs(x)<=radio && abs(y)<=radio){
                // Si el punto esta incluido dentro del circulo
                printf(" Si ");
                // Se calcula su angulo
                angulo = (180*acos(x/radio))/M_PI;
                // Si x es 0 e y negativo se suma 180 grados
                // ya que esta en cuadrante inferior
                if(x==0 && y<0) angulo=angulo+180;
                // Se divide el angulo entre 90 para obtener el cuadrante
                cuadrante = (angulo/90)+1;
                // Si esta en el primer cuadrante se utiliza un contador
                if(cuadrante==1) cuantos_cuadrante_uno++;
                // se visualiza angulo y cuadrante
                printf(" %5.0f - %2d",angulo,cuadrante);
        } else {
            // si no esta incluido simplemente se visualiza no
            printf(" No ");
        }
    }
    // Se visualiza el total de puntos dentro del primer cuadrante
    printf("El No. Total de puntos dentro del cuadrante 1 es : %d",cuantos_cuadrante_uno);
    return 0;
}

Una vez realizada la compilación de la práctica con el compilador de C, y puesto en funcionamiento el programa, el resultado ha de ser similar al que se muestra a continuación.

Prácticas C - Puntos Cuadrante

Prácticas C – Puntos Cuadrante

Gracias por vuestra visita y ser fuertes que de esta salimos seguro!!!

Ah recordad!!!

if ( MeQuedoEnCasa == SoyResponsable ) {

  printf("Lo Conseguiremos entre todos");

} else {

 printf("Error 404 - Algo estas haciendo mal, piénsalo");

}