Ejercicio obligatorio 1

Fecha de entrega: Lunes 11 de septiembre

Nota

Nunca es buena idea empezar por un ejercicio integrador antes de tener practicados los temas que el trabajo integra.

Se sugiere antes de desarrollar este trabajo resolver, al menos, los siguientes ejercicios de la guía de Introducción al lenguaje C:

  • Ejercicio 1 (interés compuesto).

  • Ejercicio 4 (cantidad de segundos).

  • Ejercicio 13 (tabla del 7).

  • Ejercicio 18.a (factorial).

  • Ejercicio 19 (coeficientes binomiales).

Introducción

En el campo de la computación gráfica es común representar curvas según líneas de Bézier, las cuales se construyen mediante la interpolación de puntos según una base de polinomios de Bernstein.

Una base de polinomios de Bernstein de grado \(n\) se compone de \(n + 1\) polinomios los cuales siendo \(0 \leq i \leq n\) se definen como

\[B^n_i(t) = {n \choose i} t^i (1 - t)^{n-i},\]

donde \({n \choose i}\) es el coeficiente binomial.

Una curva de Bézier se construye interpolando una determinada cantidad de puntos mediante estos polinomios para el parámetro \(t\) entre 0 y 1.

Por ejemplo, para construir una curva cuadrática de Bézier, \(n = 2\), por lo que se interpolarán tres puntos \(P_i = (x_i, y_i)\) con los tres polinomios resultantes:

\[C(t) = P_0 B^2_0(t) + P_1 B^2_1 (t) + P_2 B^2_2 (t), \qquad 0 \leq t \leq 1.\]

\(C(t)\) será la curva, la cual es una curva paramétrica sobre el parámetro \(t\).

Para operar esta curva se descompondrá en cada una de las coordenadas de los puntos computando independientemente para \(x\), \(y\), etc.

Potencia entera

Se pide programar una función double potencia(double x, int y); que calcule \(x^y\), donde \(y\) es un valor entero positivo.

Coeficientes binomiales

Se pide programar una función int binomial(int n, int k); que calcule \({n \choose k}\), el coeficiente binomial de \(n\) en \(k\).

Polinomios de Bernstein

Se pide programar una función double bernstein(int n, int i, double t); que compute \(B^n_i(t)\).

Curva de Bézier

Dadas las siguientes definiciones:

#define GRADO 2
#define PASO 1e-3

#define X0 0
#define Y0 0
#define X1 2
#define Y1 3
#define X2 5
#define Y2 0

Se pide implementar un programa que calcule la curva cuadrática (segundo grado) de Bézier para los 3 puntos dados.

El programa debe imprimir las coordenadas \((x, y)\) de cada uno de los puntos en formato CSV para \(0 \leq t \leq 1\) avanzando de a PASO por vez.

Graficación

Se pide graficar los puntos que genera el programa como salida en el software de su preferencia (planilla de cálculos, octave, gnuplot, etc.)

Las coordenadas de los puntos dados son las mismas que las del ejemplo de curvas cuadráticas en el artículo sobre curvas de Bézier de Wikipedia, tomarlo como referencia.

Entrega

Deberá entregarse:
  1. El código fuente del programa desarrollado.

  2. El gráfico de la salida en formato JPG o PNG.

La entrega se realiza a través del sistema de entregas.

El ejercicio es de entrega individual.