function cameraTransform($C, $A) { $w = normalize(addVector($C, scalarProduct($A, -1))); $y = array(0, 1, 0); $u = normalize(crossProduct($y, $w)); $v = crossProduct($w, $u); $t = scalarProduct($C, -1); return array($u[0], $v[0], $w[0], 0, $u[1], $v[1], $w[1], 0, $u[2], $v[2], $w[2], 0, dotProduct($u, $t), dotProduct($v, $t), dotProduct($w, $t), 1); }
/** * Cosine similarity for non-normalised vectors * sim(a, b) = (a�b) / (||a|| * ||b||) * * @param array $a * @param array $b * @return mixed */ function cosinus(array $a, array $b) { $normA = norm($a); $normB = norm($b); return $normA * $normB != 0 ? dotProduct($a, $b) / ($normA * $normB) : 0; }