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
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)\) 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:
El código fuente del programa desarrollado.
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.