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

Création d'images mathématiques avec php

a marqué ce sujet comme résolu.
Auteur du sujet

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 !!

+1 -0

J’aurais dit que ça ressemble à une armée de petits monstres !

Je trouve celle de droite très sympa :)

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

Home is for the heartless

+0 -0
Auteur du sujet

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 ^^

Édité par Ludwig

+1 -0

Cette réponse a aidé l’auteur du sujet

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.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+0 -0
Auteur du sujet

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

+0 -0

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.

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

+0 -0

comment generer ce genre d image en python ?

À grand renforts de matplotlib.pyplot.pcolormesh. Je vais pondre un exemple rapide.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+1 -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.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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