[Art numérique] À quoi cela vous fait-il penser ?

Création d'images mathématiques avec php

a marqué ce sujet comme résolu.

Salut à tous ! ^^

Ces temps-ci, je m’occupe en réalisant des minis images via php.

a     s     ds     tambouille

Mais celle qui m’impressionne le plus pour l’instant, c’est celle-là :

d

Regardez-là de près.
À quoi vous fait-elle penser ?

Pour ma part :

J’ai immédiatement penser à un élevage de petits oeufs en verre d’origine extra-terrestre ^^
C’est trop choupi !!

Et je me demande surtout comment tu as pu arriver à générer de telles images en php.

Un exemple vaudra mieux que mille discours ^^

<?php

$w = 500;
$h = 500;

$zoom = 120;

$t = M_PI/2;

$ct = cos($t);
$st = sin($t);

$im = imagecreatetruecolor($w, $h);

for ($x = 0; $x < $w; $x++)
{
    for ($y = 0; $y < $h; $y++)
    {
        $zx = ($x-250)/$zoom;
        $zy = -($y-250)/$zoom;

        $rx = $zx * $ct - $zy * $st;
        $ry = $zy * $ct + $zx * $st;

        $zx = $rx;
        $zy = $ry;
        //*/

        $r = sqrt(abs($zx * $zx - $zy * $zy));

        $cr = 127.5 * abs(sin($r)) + 127.5 * abs(cos($r*2));
        $cg = 255 * abs(cos($cr));
        $cb = 255;

        imagesetpixel($im, $x, $y, imagecolorallocate($im, $cr, $cg, $cb));
    }
}


header('Content-type: image/jpeg');
imagejpeg($im);

?>

L’idée, c’est pour chaque pixel de l’image, calculer un nombre spécifique dépendant des coordonnées du pixel. Avec ce nombre, si on le calcule "plus ou moins bien", on l’impose en coefficient de l’intensité d’une couleur et cette dernière prends la ""forme"" du coefficient, d’où le résultat.

Je parle dans un langage très amateur, et d’ailleurs je ne pourrai pas t’expliquer pourquoi telle formule donne telle résultat… on teste différentes combinaisons et on voit ce que ça donne :)

Ici, ($x, $y) désigne les coordonnées d’un pixel dans le repère initial de l’image.
($zx, $zy) désigne les coordonnées d’un pixel dans le repère Z, repère centré au milieu de l’image afin de profiter d’un effet de symétrie.

$zoom permet un zoom sur le repère Z (et heureusement car on travaille dedans ^^).

Après, rien de tout ça n’est très propre ni… professionnel xD

EDIT :

Le repère R est défini à partir du repère Z dont on a effectué une rotation d’un angle $t autour du milieu de l’image. ($rx, $ry) représente les coordonnées d’un point dans le repère R.

Et j’ajouterais aussi quelque chose d’important : un pixel donné aura toujours la même position dans l’image, peut importe le repère avec lequel on travaille. ça paraît évident mais ça m’a causé souci hier pendant au moins une heure !!

C’est ce qui explique que pour certaines images, elles produiront le même résultat dans le repère R ou Z si le résultat est invariant par rotation (autrement dit si $rx² + $ry² = $zx² + $zy²) oui même pas en fait, j’ai du mal à expliquer.

J’avais introduit ce repère pour ré-orienter certaines images, ce qui ne fonctionne pas toujours.

Bref… bon amusement ^^

+1 -0

Ce que tu fais, ce sont des représentations de fonctions avec une échelle de couleur arbitraire. Si je peux me permettre un conseil au passage, tu devrais enregistrer tes images au format PNG plutôt que jpeg puisque ce dernier entraîne une compression avec perte, c’est dommage.

PS : papier-pain, c’est une entreprise qui fait des sacs à pains avec de la pub dessus. Vous parlez de papier peint, comme peinture.

Ce que tu fais, ce sont des représentations de fonctions avec une échelle de couleur arbitraire. Si je peux me permettre un conseil au passage, tu devrais enregistrer tes images au format PNG plutôt que jpeg puisque ce dernier entraîne une compression avec perte, c’est dommage.

Merci de l’info :)

PS : papier-pain, c’est une entreprise qui fait des sacs à pains avec de la pub dessus. Vous parlez de papier peint, comme peinture.

adri1

Hiiii, moi qui pensais faire un jeu de mot xD

Salut,

Cool ce sujet. J’avais fait plein d’images de ce genre en écrivant le tutoriel sur la SDL, je vaes vour si je peux les retrouver et retrouver les codes correspondants.

+0 -0
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np

kx = 15
ky = 10

xs = np.linspace(0, 1, 100)
ys = np.linspace(0, 1, 100)
xs, ys = np.meshgrid(xs, ys, indexing='ij')

zs = np.sin(kx * xs) * np.cos(ky * ys)

fig, axis = plt.subplots(figsize=(10, 10))
axis.pcolormesh(xs, ys, zs, cmap='magma')
plt.axis('equal')
plt.axis('off')
axis.xaxis.set_major_locator(plt.NullLocator())
axis.yaxis.set_major_locator(plt.NullLocator())
plt.savefig('map.png', bbox_inches='tight', pad_inches=0)

Les dernières lignes sont juste du boilerplate pour se débarrasser des bordures qui seraient occupées par les axes (matplotlib étant fait pour faire des graphiques scientifiques à la base).

Ça donne ça.

Carte

Bien sûr changer la fonction donnera des résultats plus intéressants.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte