int main(void) { double angulo; int precisao; freopen("e26.txt", "r", stdin); freopen("s26.txt", "w", stdout); scanf("%lf %d", &angulo, &precisao); while (angulo >= 0.0) { printf("sen(%.2lf): %.4lf, ", angulo, seno(angulo, precisao)); if (angulo != 90.0 && angulo != 270.0) { printf("cos(%.2lf): %.4lf, ", angulo, cosseno(angulo, precisao)); printf("tan(%.2lf): %.4lf", angulo, tangente(angulo, precisao)); } else { printf("cos(%.2lf): %.4lf ", angulo, cosseno(angulo, precisao)); } printf("\n"); scanf("%lf %d", &angulo, &precisao); } fclose(stdin); fclose(stdout); return 0; }
void Leg::draw() { glPushMatrix(); glTranslatef(posX, posY, posZ); //coxa glPushMatrix(); glRotatef(thighAng,1,0,0); glRotatef(90,1,0,0); glPushMatrix(); colors[2]->paint(); drawSolidCylinder(0.6,0.7, 5.9); glPopMatrix(); glPushMatrix(); colors[1]->paint(); if(side == RIGHT) { glTranslatef(0.3,0,0); glRotatef(-5,0,1,0.2); } else { //LEFT glTranslatef(-0.3,0,0); glRotatef(5,0,1,0.2); } glRotatef(3, 1, 0, 0); drawSolidCylinder(1.0,1.6, 5.5); glPopMatrix(); glPopMatrix(); //joelho glPushMatrix(); colors[1]->paint(); glTranslatef(0, -6.5*cosseno(thighAng),-6.5*seno(thighAng)); glutSolidSphere(0.99, 10,10); glPopMatrix(); //canela glPushMatrix(); glTranslatef(0, -6.5*cosseno(thighAng),-6.5*seno(thighAng)); glRotatef(shuttleAng, 1,0,0); //canela glPushMatrix(); colors[1]->paint(); glRotatef(90,1,0,0); drawSolidCylinder(0.95, 1.6, 5); glPopMatrix(); //pe� glPushMatrix(); colors[2]->paint(); glTranslatef(0, -5, 1); glScalef(2,1,3); glutSolidCube(1); glPopMatrix(); glPopMatrix(); glPopMatrix(); }
double tangente(double x, int precisao) { return seno(x, precisao) / cosseno(x, precisao); }
void main () { int n; // ler quantidade n de elementos printf ("Entre com o valor de pontos a ser digitado em seguida, os pontos do seu vetor.\n\n"); scanf ("%d",&n); if(n<2){ //teste para valor abaixo de 2 printf("\nErro! Reinicie o programa e insira um valor maior que 1.\n"); } if (n>1){ //condicao para necessitar do algoritmo int *x,*y,*ch; // alocando memória para as 3 variaveis de um elemento x = (int*)malloc(n*sizeof(int)); // x é a coordenada horizontal y = (int*)malloc(n*sizeof(int)); // y é a coordenada vertical ch = (int*)calloc(n,sizeof(int)); //ch é o vetor que armazena se o ponto pertence ou não ao fecho convexo, valor inicial para todos=0 int i; //lendo os n elementos for(i=0;i<n;i++){ scanf("%d",&x[i]); scanf("%d",&y[i]); } quicksort2(x,y,0,n-1); //ordenando o vetor em x com quick sort int j=0; //ordenar y quando x for igual for(i=0;i<n-1;i++){ if(x[i]==x[i+1]){ //localiza blocos onde varios elemntos possuem o mesmo valor de x j++; if(i+1==n-1){ quicksort(y,i-j+1,i+1); j=0; } } if(x[i]!=x[i+1]){ quicksort(y,i-j,i); //ordena os valores de y dentro do bloco de valores iguais para x j=0; } } int poscos; //pegando o ponto inicial, usaremos o maior angulo para localizar o proximo ponto float cosm; //quando um angulo está no intervalo [0,180], quanto maior ele for, menor sera seu cosseno //poscos = posicão do cosseno buscado, cosm=valor do cosseno buscado i=0; while(i<n-1){ cosm=1.0; poscos=i; for(j=i+1;j<n;j++){ if(cosseno(x,y,i,j)<=cosm){ //nesse caso buscamos o menor cosseno cosm=cosseno(x,y,i,j); poscos=j; } } ch[poscos]=1; //quando um ponto pertence ao fecho, seu ch é mudado de zero para um i=poscos; } //a primeira parte gera a parte inferior do fecho entre o primeiro e o ultimo ponto i=n-1; while(i>0){ cosm=-1.0; //partindo agora do ultimo, buscamos fechar a parte superior poscos=i; for(j=i-1;j>=0;j--){ if(cosseno(x,y,i,j)>=cosm){ //como mantemos o vetor comparacao para cima, mas estamos voltando, buscamos o menor angulo, ou seja, o maior cosseno cosm=cosseno(x,y,i,j); poscos=j; } } ch[poscos]=1; //pontos do fecho recebem ch=1 i=poscos; } int k; //essa parte remove alguns pontos colineares que não foram removidos na parte superior for(i=0;i<n;i++){ if(ch[i]==1){ //pega apenas pontos do fecho for(j=0;j<n;j++){ if(j!=i && ch[j]==1){ for(k=0;k<n;k++){ if(ch[k]==1 && k!=i && k!=j && cosseno(x,y,i,j)==-cosseno(x,y,i,k)){ //analisa se existem dois cossenos opostos,o que pode significar colinearidade if(y[j]>=y[i] && y[k]<=y[i] && x[j]>=x[i] && x[k]<=x[i]){ //analisando por quadrantes, podemos definir se esses angulos são ou não de colineares ch[i]=0; } if(y[j]>=y[i] && y[k]<=y[i] && x[j]<=x[i] && x[k]>=x[i]){ ch[i]=0; } if(y[j]<=y[i] && y[k]>=y[i] && x[j]>=x[i] && x[k]<=x[i]){ ch[i]=0; } if(y[j]<=y[i] && y[k]>=y[i] && x[j]<=x[i] && x[k]>=x[i]){ ch[i]=0; } } } } } } } printf("\nVertices do fecho convexo:\n\n"); for(i=0;i<n;i++){ //imprime os pontos do fecho convexo, ou seja, pontos com ch=1 if(ch[i]==1){ printf("%d %d\n",x[i],y[i]); } } free(x); free(y); free(ch); //liberando a memória utilizada } getch(); }