Laboratorio: curvas Bézier en PHP

Las curvas Bézier son muy utilizadas en diseño 3D y gráficos vectoriales, pero también nos puede ser muy útil cuando queremos realizar una determinada curva entre dos puntos.

De forma resumida, la curva Bézier está formada por cuatro puntos: punto origen (p0), punto final (p3) y dos puntos más (p1 y p2) con los que se realizan vectores que forman la curva:

Bezier_cubic_anim.gif

El script que lo realiza es muy sencillo, tan solo hay que pasarle los 4 puntos y el valor de t (que va desde 0 a 1).

function PointOnCubicBezier( $p0, $p1, $p2, $p3, $t ) {
    /* cálculo de los coeficientes polinomiales */
    $cx = 3.0 * ($p1[0] - $p0[0]);
    $bx = 3.0 * ($p2[0] - $p1[0]) - $cx;
    $ax = $p3[0] - $p0[0] - $cx - $bx;
 
    $cy = 3.0 * ($p1[1] - $p0[1]);
    $by = 3.0 * ($p2[1] - $p1[1]) - $cy;
    $ay = $p3[1] - $p0[1] - $cy - $by;
 
 
    /* calculate the curve point at parameter value t */
    $squared = $t * $t;
    $cubed = $squared * $t;
 
    $res[0] = ($ax * $cubed) + ($bx * $squared) + ($cx * $t) + $p0[0];
    $res[1] = ($ay * $cubed) + ($by * $squared) + ($cy * $t) + $p0[1];
 
    return $res;
}

¿Y todo esto por qué? pues porque estamos realizando mejoras en el Top de Bitacoras.com y necesitábamos una curva que ofreciera una pendiente poco pronunciada entre dos puntos.

También os paso un ejemplo para que juguéis con los posibles valores de los puntos, teniendo una escala de 1000×100.

Vía / Wikipedia

Ejemplos de código para trabajar con Twitter

Varios ejemplos de código para integrar Twitter o trabajar con Twitter desde nuestras webs:

En el post original hay otros scripts interesantes, realizados en otros lenguajes que no son PHP.

10 code snippets to interact with Twitter

Vía / PHPDeveloper.org

Libpuzzle: librería para encontrar imágenes similares

Libpuzzle es una librería para Linux que permite conocer el porcentaje de similitud entre dos imágenes. Además aporta una extensión para PHP que nos permitirá realizar aplicaciones web que comparen imágenes.
Da algunos falsos positivos, pero si se toquetea la configuración se puede solucionar.
Libpuzzle

Usar SQLite desde CodeIgniter

SQLite es una posibilidad a tener en cuenta cuando no es posible realizar aplicaciones web que accedan a una BD (MySQL, Oracle, …), ya que no existe servidor de BD sino un conjunto de rutinas y los datos se guardan en un fichero en el servidor.
Para aquellos que programen con CodeIgniter les podrá venir muy bien esta explicación para integrar CI y SQLite.
CodeIgniter PDO SQLite3 quick setup

PHP Obfuscator: ofusca tu código PHP

PHP Obfuscator es una aplicación para Windows que permite ofuscar el código PHP de tus aplicaciones. ¿Para qué nos puede ser útil? para vender una aplicación a un cliente y que éste no realice las modificaciones que pueda solicitarnos a nosotros ya que el código será ilegible.
PHP Obfuscator

Expresiones regulares con filtros en PHP

Buena alternativa para validar variables usando expresiones regulares usando filtros:

  • Validar números reales
$values= array(10.75, '10.75', -1234.5678, 'This is a string', array());
$filteredValues = filter_var($values, FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY);
  • Validar expresiones regulares
if(filter_var($value, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => "/^G(.+)/")))) {
// Lo que sea
}
  • Validar URLs
$url = 'http://www.devshed.com';
if(filter_var($url, FILTER_VALIDATE_URL)) {
// Lo que sea
}

Working with Regular Expressions with Filters in PHP 5

Interfaces predefinidas en PHP5

Interesante resumen de interfaces predefinidas en PHP5 que permiten darle a nuestros objetos unas características muy útiles:

  • Traversable: permite usar el objeto en un foreach.
  • Iterator: extiende de Traversable y permite realizar iteraciones sobre el objeto.
  • IteratorAggregate: extiende de Traversable y permite añadir objetos iterators externos.
  • ArrayAccess: permite comportarse al objeto como un array, usando por ejemplo el operador [].
  • Serializable: permite realizar serialización en el objeto.

PHP5: Predefined Interfaces

Vía / DZone