#include "common.h"
#include "util.h"

SEXP Rgraphviz_bezier(SEXP Rpnts, SEXP Rn, SEXP Rt) {
    SEXP curPnts, out;
    int n, k;
    double x, y, t, tmp;

    x = y = 0;
    n = INTEGER(Rn)[0]-1;
    t = REAL(Rt)[0];

    for (k = 0; k <= n; k++) {
        curPnts = VECTOR_ELT(Rpnts, k);
        tmp = Rf_choose(n,k) * pow(t, k) * (pow((1-t), (n-k)));
        x += INTEGER(curPnts)[0] * tmp;
        y += INTEGER(curPnts)[1] * tmp;
    }

    PROTECT(out = allocVector(REALSXP, 2));
    REAL(out)[0] = x;
    REAL(out)[1] = y;
    UNPROTECT(1);
    return(out);
}