Por favor, alguien podría ayudarme a realizar un código C que resuelva el siguiente problema? Necesito vuestra ayuda
"Realiza una función que, dado un punto en el plano, un radio y un número de lados, devuelva un vector con los vértices de un polígono regular con tales lados y radio, centrado en el punto dado. "
¿Cómo vas de trigonometría? :huh:
Bueno trigonometria me defiendo, pero esta funcion si sabes hacerla te agradeceria muchisimo que me pasases el codigo.
Muchas graciaas
~No se hacen tareas~
Empieza por obtener la ecuación para sacar los puntos.
Luego, solo es copiarla a C y agregar un par de formalidades de cualquier lenguaje de programación.
Así es. Como dice Ivancea96 no se hacen tareas. Ajudamos a realizarlas, pero ofrecemos códigos hechos.
La principal duda que tengo es la función matemática para calcular la posición de los vertices a partir de el centro, el radio y el número de lados. Si me podeis ayudar a obtenerla, a partir de ahi puedo empezar a trabajar.
CitarLa principal duda que tengo es la función matemática para calcular la posición de los vertices a partir de el centro, el radio y el número de lados.
que no sabes? muestra lo que has intentado y donde tienes la falla/duda
Como obtener la posición del vértice a partir del radio, número de lados y el centro. No se como plantear la ecuación que me de como resultado esa posición.
no me dices nada...
que no sabes plantear de la ecuación? (muestra la ecuación)
Esto seria correcto para obtener las posiciones cartesianas x e y de cada vertice del poligono en un plano?
alpha = 360 / cantidad de lados del poligono
radian = 180/PI
xc + radio*cos(angulo/radian)
yc + radio*sin(angulo/radian)
angulo = angulo+alpha
quien es xc y yc? los sumas, pero no los asignas
Cita de: petit_cm en 27 Marzo 2017, 20:43 PM
Esto seria correcto para obtener las posiciones cartesianas x e y de cada vertice del poligono en un plano?
alpha = 360 / cantidad de lados del poligono
radian = 180/PI
xc + radio*cos(angulo/radian)
yc + radio*sin(angulo/radian)
angulo = angulo+alpha
Es correcto. Y aquí es donde entra la parte de programación. Tienes que sacar N vértices, no 1. Así que tendrás que hacer esas ecuaciones N veces (bucle for).
angulo = angulo+alpha;
Haces eso tras cada cálculo, y calculas el siguiente, sin más. Ya lo tienes.
Como detalle, las funciones cos() y sin() son de la librería <math.h>. A parte de eso, no deberías tener más problemas.
Haz el programa, y si te encuentras con algún otro problema, coméntalo y pasa el código.
Por cierto, los códigos ponlos en las etiquetas GeSHi (al hacer el mensaje, tienes arriba para colocarlas)
He hecho esta función para calcular la coordenadas x e y de los vértices, pero no funciona y se que no esta bien hecha, me podéis ayudar a corregir los errores o decirme lo que falte? Muchas gracias
v[0] es la coordenada x del centro, v[1] es la coordenada y del centro, v[2] el radio y t el numero de lados.
Programa hecho en lenguaje C
void vertices(double *v, double *res, int t){
int i;
double angulo;
angul==0;
double alpha;
alpha==360/ t;
double radian;
radian=180/3.1416;
for(i=0;i<t; i=i+1){
res[i]= v[0]+v[2]*cos(angulo/radian);
angulo=angulo + alpha;
}
for(i=0;i<t; i=i+1){
res[i]= v[1]+v[2]*sin(angulo/radian);
angulo=angulo + alpha;
}
Varios detalles...
En primer lugar, trata de ver los errores que te da el compilador, para corregir lo más básico:
Pusiste angul en evz de angulo en la línea 5.
Luego, pusiste angulo==0;. Eso no es una asignación, eso es una comparación. Una asignación es, como pusiste en los fors, 1 solo signo igual:
angulo = 0;
Lo mismo en la línea 8.
Luego... ¿Cómo quieres que sea la respuesta?
En primer lugar, voy a suponer que a la función le pasas un array double* ya lleno y de tamaño t*2. Presupondré también que la respuesta es {x1, y1, x2, y2,... xN, yN}. Fíjate que en el segundo for, estás sobreescribiendo el array (por tanto, deshaciendo el trbaajo dle primer for).
Tal vez quisieras algo así (con 1 for te llega):
for(i=0;i
Mi programa es este, consigo obtener un vertice, pero los valores x e y de este no son correctos y no consigo que muestre en pantalla todos los vertices, solo muestra uno, el primero. Hasta la linia 75 funciona correctamente. A partir de ahi no se obtiene el resultado deseado.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define TAM 100
// Prototipos de las funciones
int leeIVector(int *v, int max);
int leeDVector(double *v, int max);
int leeIVector2(int *v, int max);
int leeDVector2(double *v, int max);
void escIVector(int *v, int l);
void escDVector(double *res,double *ress, int t);
void vertices(double *v, double *res, int t);
void vertices2(double *v, double *ress, int t);
//Funcion main
int main()
{
int l, v[100];
double vd[100];
double res[100];
double ress[100];
double x;
// Hacemos los mismo con el de reales
l = leeDVector2(vd, 100);
vertices(vd,res, l);
vertices2(vd,ress,1);
escDVector(res,ress,1);
// Nada puede ir mal
exit(EXIT_SUCCESS);
}
//Funcion para introducir datos
int leeDVector2(double *v, int max)
{
char aux[200];
int t;
printf("Introduce la coordenada x del punto:");
fgets(aux, TAM - 1, stdin);
v[0] = atof(aux);
printf("Introduce la coordenada y del punto:");
fgets(aux, TAM - 1, stdin);
v[1] = atof(aux);
printf("Introduce el radio:");
fgets(aux, TAM - 1, stdin);
v[2] = atof(aux);
printf("Introduce numero de lados:");
fgets(aux, TAM - 1, stdin);
t = atof(aux);
return t;
}
//Funcion calculo vertices
void vertices(double *v, double *res, int t){
int i;
double angulo;
double alpha;
alpha=360/ t;
double radian;
radian=180/3.1416;
double cos(double x);
for(i=0;i<t; i=i+1){
res[i]= v[0]+v[2]*cos(angulo/radian);
angulo=angulo +alpha;
}
}
void vertices2(double *v, double *ress, int t){
int i;
double angulo;
double alpha;
alpha=360/ t;
double radian;
radian=180/3.1416;
double sin(double x);
for(i=0;i<t; i=i+1){
ress[i]= v[0]+v[2]*sin(angulo/radian);
angulo=angulo +alpha;
}
}
//Imprimir
void escDVector(double *res,double *ress, int t)
{
int i;
printf("\n\nVector con %d elementos:\n\n", t);
for (i = 0; i < t; i++)
printf("Elemento %d: %lf %lf\n", i + 1, res[i],ress[i]);
puts("\n"); // Lineas en blanco para que sea mas legible
}
Salió cortado mi mensaje anterior :X
for(i=0; i < t; i=i+1){
res[i*2]= v[0]+v[2]*cos(angulo/radian);
res[i*2 + 1]= v[1]+v[2]*sin(angulo/radian);
angulo=angulo + alpha;
}
Y conrespecto a tu código de ahora... Donde calculas el Y, pusiste v[0] en vez de v[1].