viernes, 13 de septiembre de 2013

Ejemplos de C/C++ sencillos: Intersección recta- circunferencia



Hola a todos,

El problema que se plantea hoy es hacer un programa que nos diga si una circunferencia y una recta intersectan o no.


Para mi la forma más fácil de decir si un recta interesecta con una circunferencia o no es calcular la distancia mínima entre el centro de la circunferencia y la recta. Si esta distancia mínima es mayor que el radio de la circunferencia seguro que no interesectarán nunca.

El código es el que sigue. Hay unos pocos comentarios para que podáis seguir mejor el código.

#include <iostream>
#include <math.h>
#include <stdlib.h>

int main(int argc, char** argv) 
{
float xcentro,ycentro,radio;
float pendiente,b;
float perpendicularpendiente,perpendicularB;
float xinterseccion, yinterseccion;
float distx,disty,dist;

std::cout << "PROGRAMA DE CALCULO DE INTERSECCIONES ENTRE CIRCUNFERENCIA-RECTA" << std::endl;

std::cout << "DATOS CIRCUNFERENCIA" << std::endl;

std::cout << "Introduzca el centro de la circunferencia:" << std::endl; 

std::cout << "x: ";
std::cin >> xcentro;
std::cout << std::endl;

std::cout << "y: ";
std::cin >> ycentro;
std::cout << std::endl;

std::cout << "Introduzca el radio de la circunferencia: " ;
std::cin >> radio;
std::cout << std::endl;

std::cout << std::endl << "DATOS RECTA" << std::endl;

std::cout << "Introduzca el pendiente de la recta (m) " ;
std::cin >> pendiente;

std::cout << "Introduzca punto de intersección con el eje de las Y (b) " ;
std::cin >> b;

std::cout << std::endl << "CALCULANDO....ESPERE UN MOMENTO" << std::endl;

perpendicularpendiente = -(1/pendiente);

//Calculamos el termino independiente de una recta perpendicular a la dada.
perpendicularB = ycentro - perpendicularpendiente*xcentro;

//Calculamos q punto de la recta es el más cercano al centro de la circunferencia
xinterseccion = (perpendicularB-b)/(pendiente-perpendicularpendiente);
yinterseccion = xinterseccion*pendiente+b;

//calculamos la distancia minima entre recta y circunferencia
distx = xinterseccion - xcentro;
disty = yinterseccion - ycentro;

dist = sqrt(distx*distx + disty*disty);

if (dist <= radio)
{
std::cout << "La recta interesecta la circunferencia." << std::endl;
}
else
{
std::cout << "La recta NO intersecta la circunferencia." << std::endl;
}

system("pause");

return 0;
}




LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares