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;
}
Download

Revisões