Aula Prática Laboratorial n.º 2 Sumário Revisão de conceitos de geometria analítica. Enunciado Escreva um programa de computador que realize as seguintes tarefas (Figura 1): 1. Lê um número inteiro positivo n. 2. Lê as coordenadas em vírgula flutuante de dois pontos 2D: P0 e P1. 3. Calcula as coordenadas do ponto médio C do segmento de recta com extremos nos pontos P0 e P1. 4. Calcula a distância d entre os pontos P0 e P1. 5. Escreve numa tabela com n linhas x 2 colunas as coordenadas de n pontos uniformemente espaçados de α = 360º / n, pertencentes à circunferência de centro em C e raio r = d / 2. P1 r=d/2 α = 360º / n C P0 Figura 1 Observações 1. As coordenadas do ponto médio de um segmento de recta são dadas pelas seguintes equações: x0 xc x1 2 y0 yc y1 2 2. A distância entre dois pontos é dada pela seguinte equação: d ( x1 x0 ) 2 y0 ) 2 ( y1 3. As equações paramétricas da circunferência são as seguintes: x r * cos(t ) xc y r * sin(t ) yc em que: (xc, yc) são as coordenadas do centro da circunferência; r é o raio da circunferência; 0 ≤ t < 360º. 4. A correspondência entre diferentes unidades de medida de ângulos é a seguinte: 180º = π radianos Resolução #include <stdio.h> #include <math.h> /* constante pi */ #ifndef M_PI #define M_PI 3.1415926 #endif /* macros de conversao de unidades de medida de angulos */ #define RAD(a) ((a) * M_PI / 180.0) #define DEG(a) ((a) * 180.0 / M_PI) typedef struct { float x, y; } ponto; int main(void) { int n, i; float d, r, a, t, x, y; ponto p0, p1, c; /* ler n */ printf("n = "); scanf("%d", &n); /* ler p0 */ printf("x0 = "); scanf("%f", &p0.x); printf("y0 = "); scanf("%f", &p0.y); /* ler p1 */ printf("x1 = "); scanf("%f", &p1.x); printf("y1 = "); scanf("%f", &p1.y); /* calcular c */ c.x = (p0.x + p1.x) / 2.0; c.y = (p0.y + p1.y) / 2.0; /* calcular d */ d = sqrt((p1.x - p0.x) * (p1.x - p0.x) + (p1.y - p0.y) * (p1.y - p0.y)); /* calcular r */ r = d / 2; /* calcular a */ a = RAD(360) / (float) n; /* escrever tabela */ printf("Tabela\n"); t = 0; for (i = 0; i < n; i++) { x = r * cos(t) + c.x; y = r * sin(t) + c.y; printf("% 16.2f\t% 16.2f\n", x, y); t += a; } return 0; }