TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 2 3 4 ... 11 12 13 14 Suivante | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |
| Page : 1 2 3 4 ... 11 12 13 14 Suivante | |
lastsseldon
|
# Posté le 05/07/2007 à 02:39:36 |
![]() Groupe : Membres |
Atelier Cod'artBonjour à tous, De manière à occuper vos (trop ?) longues vacances d'été et vous faire découvrir un thème assez peu exploité sur le sdz (au profit des jeux-vidéos), je vous propose un atelier de programmation graphique .
ThèmeLorsque l'on parle de programmation graphique, on peut d'abord penser aux GUIs. Ce n'est pas le but de ce atelier : développer un logiciel, c'est rigolo pour certains, mais c'est trop long et il est rare d'en arriver à bout (et si tout le monde fait la même chose, c'est lassant). Non, le thème de cet atelier portera sur la génération de dessins informatiques (par exemple, les fractales ).
C'est un domaine très intéressant en programmation qui permet de faire des choses très jolies en très peu de lignes . N'ayez pas peur d'utiliser des algos très connus (par exemple, le triangle de sierpinsky) lors de vos premiers essais, vous risquez d'être surpris par leur beauté. Cet atelier est donc ouvert à tous les curieux qui veulent découvrir quelque chose de nouveau et à ceux qui s'y connaissent déjà .
RèglesLes règles sont très simples, la beauté du rendu final prime avant tout. Il n'y aura pas de correction, pas de classement, pas de gagnant, pas de récompense. Non, juste des images, juste la fierté d'avoir produit un résultat super sex .
Vous êtes libre de poster plusieurs images portant sur des domaines différents. Toutefois, vos dessins devront systématiquement s'accompagner d'une explication de l'algorithme utilisé (avec des liens, si vous pensez ne pas être suffisamment clair ) et du code source (de manière à ce que les autres puissent aussi essayer et vous faire part de leurs critiques / suggestions (certains diront, pour éviter les tricheries aussi)). S'il est toujours agréable de regarder une image esthétique, c'est encore plus intéressant lorsque l'on comprends comment elle a été générée .
L'atelier s'étalera sur deux semaines (à partir d'aujourd'hui, pour ne pas défavoriser les gens qui arriveraient en cours de route). Il n'y a pas d'inscription, il suffit de poster ses images dans ce topic. Je réunirai l'ensemble des posts lors du dernier jour sur une page web externe de manière à pouvoir admirer vos travaux facilement .
Le langage et les bibliothèques sont laissées libres : vous pouvez utiliser les outils que vous préférez (par exemple, le c/c++, c#, java, ocaml, python, ruby, la sdl, l'opengl, qt, ... et même logo !). Vous pouvez faire de la 2d, de la 3d et pourquoi pas de la 4d ? (une animation ). Bref, le but est vraiment de s'amuser en produisant des dessins, pas de se forcer à utiliser un machin qu'on ne connaît pas (n'oubliez pas que vous n'avez que deux semaines, c'est assez court, mais c'est largement suffisant ).
Je répondrais aux questions concernant le principe général ici; pour les problèmes de code, n'hésitez pas à ouvrir un nouveau topic pour ne pas étouffer les participations des autres. doc, exemples, faq
RemarquesAttention, la participation à cet atelier implique trois points fondamentaux : les images, l'algorithme et le code source. N'oubliez pas que vos oeuvres seront exposées par la suite.
Beaucoup d'entre vous se sont plaint de ne pas savoir par où commencer et demandaient un tuto (faute d'arriver à lire le code) : il n'y en a pas. Il faut essayer par soit même pour comprendre la logique à adopter. N'hésitez pas à consulter wikipedia pour la récursivité : cette notion apparaît souvent dans les fractales. Mais la difficulté n'est qu'illusion : le plus dur, c'est de trouver une image qui vous plaît, après, ça va tout seul .
Si vous avez un problème de conception ou lors de l'utilisation d'un code source des participants, merci d'ouvrir un nouveau topic (ou de contacter l'auteur par mp). Pour les fractales de Sierpinski, allez poster dans le topic dédié, cela facilitera l'organisation
ConclusionEn espérant que cet atelier vous plaira et que vous serez nombreux à participer, je vous souhaite bonne chance et bon courage. Un dernier mot : soyez fier de vos images, car vous pourrez les montrer à vos proches, les mettre sur votre page web, en avatar, en fond d'écran ou encore les placarder aux murs de votre chambre .
(merci à bluestorm pour la fractale de mandelbrot et aux gens de #sdz pour leur enthousiasme et leur relecture)
Édité
le 06/07/2007 à 07:14:18
par lastsseldon
|
delroth
|
# Posté le 05/07/2007 à 03:05:32 |
Un Python, ça mord !![]() Groupe : Bannis |
Bon je vais poster mon code que j'ai réalisé il y a quatre jours (et oui, sur le chan IRC on est au courant et on prépare tout depuis longtemps
). Ce code permet de dessiner la très célèbre fractale du triangle de Sierpinsky, avec une petite originalité tout de même : le code est entièrement écrit en logo (exécutable par KTurtle pour les KDE-users).
Le résultat obtenu : ![]() Le code : (tss, même pas de coloration pour le logo )
Français : Code : C effacer w = 300 h = 250 x = hasard 0, w y = hasard 0, h cacher va 0, 0 répèter 10000 [ n = hasard 0, 1000 si n <= 333 [ x = x / 2 y = y / 2 ] si (n > 333) et (n <= 666) [ x = (x + w / 2) / 2 y = (y + h) / 2 ] si n > 666 [ x = (x + w) / 2 y = (y + h / 2) / 2 ] va x, y avance 1 ] Anglais : Code : C clear w = 300 h = 250 x = random 0, w y = random 0, h hide go 0, 0 repeat 10000 [ n = random 0, 1000 if n <= 333 [ x = x / 2 y = y / 2 ] if (n > 333) and (n <= 666) [ x = (x + w / 2) / 2 y = (y + h) / 2 ] if n > 666 [ x = (x + w) / 2 y = (y + h / 2) / 2 ] go x, y forward 1 ] Voilà pour ma petite contribution à cet atelier, désolé pour le code que je n'ai pas eu le temps de commenter (débrouillez vous ), et je reviendrai demain pour poster ma mandelbrot en python .
@++ all, et n'hésitez pas, postez vos oeuvres !
Édité
le 05/07/2007 à 03:13:47
par delroth
|
lexou
|
# Posté le 05/07/2007 à 04:47:21 |
![]() Groupe : Membres |
C'est un sujet intéressant. J'ai eu l'occasion de traiter le sujet des biomorphes qui sont des sortes de fractales. J'ai développé plusieurs soft permettant d'en générer suivant tout un tas de paramètres dont un relativement aboutit à cette adresse :
QBiom Le soft est réalisé avec QT en C++. Il permet entre autre de générer les biomorphes en 2D, se déplacer, zoom, et générer un rendu en 3D. L'interface n'est pas très bonne, pour avoir l'ensemble des options faites un clique droit sur la fenêtre de rendu vous pourrez par exemple sauver votre image dans tout un tas de formats. Laissez libre court à votre imagination. Voici quelques uns de mes chef d'oeuvres :
![]() ![]() ![]() ![]() Toutes ces images sont disponibles en grand dans la section Screenshot du site donné un peu plus haut. Le principe permettant de représenter ces biomorphes est expliqué dans l'article de référence suivant : Biomorphes L'algorithme que j'ai utilisé est aménagé vous pourrez le trouver dans les sources de QBiom disponibles sur le site dans le fichier CalcuatingThread.cpp fonction CalculatingThread::calculateH(...) qui permet, étant donnés 7 paramètres, 1 position en X et 1 position en Y dans le plan de donner la hauteur du biomorphe. Bien à vous,
Édité
le 05/07/2007 à 21:56:34
par lexou
Lexou pour vous servir... |
SpliT
|
# Posté le 05/07/2007 à 09:41:53 |
![]() Groupe : Membres |
waw lexou, vraiment magnifique !!!
|
Artefact2
|
# Posté le 05/07/2007 à 10:16:28 |
C'est toi le bouc !![]() Groupe : Membres |
Je ne comprends pas, sur vos images on ne retrouve pas le motif d'origine, ce n'est pas le principe des fractales ?
![]() "Imaginez un monde ou chacun est libre de s'exprimer à tout sujet..." Venez tous sur Freenet 0.7 ! Comment ? Pourquoi ? |
Dji-Bi
|
# Posté le 05/07/2007 à 10:19:38 |
![]() Groupe : Membres |
Salut,
vraiment excellent ce truc !!! Mais question, comment fait-on ? Ai je loupé la partie qui explique les base de la création de fractales ? J'ai trop envie d'essayer si quelqu'un sais expliquer comment débuter, ca serait cool
|
piRpav
|
# Posté le 05/07/2007 à 10:27:51 |
|
Groupe : Membres |
Bonjour à tous !
Une des images m'as attiré l'oeil et j'ai don été obligé de la faire
Le rendu J'ai fais ça avec le language que je maitrise le mieux : PHP (et GD ) mais comme je ne savais pas comment faire, j'ai fais comme je pouvais, et c'est probablement pas du tout obptimisé (1min30 sur mon ordi (qui date de 2000) pour le rendu )... Code : PHP <?php /* Script créé par piRpav le 05/07/2007 en 1h15 Merci beaucoup à bluestorm pour son aide à l'optimisation */ // Le côté de l'image $cote = 800; // Pour éviter de le calculer tout le temps $unquartcote = $cote/4; $demicote = $unquartcote*2; $troisquartcote = $unquartcote*3; // On crée la map pixels par pixels $pixels = array(); for($x=0;$x<$cote;$x++) { $pixels[$x] = array(); for($y=0;$y<$cote;$y++) { // On met tout de suite les carrés de couleurs if($x>($cote/2)-1) { if($y>($cote/2)) { $pixels[$x][$y] = 0; }else{ $pixels[$x][$y] = 1; } }else{ if($y>($cote/2)) { $pixels[$x][$y] = 1; }else{ $pixels[$x][$y] = 0; } } } } for($i=1;$i<5;$i++) { // On fait 4 fois la boucle $rayon = $cote/(8*$i); // Calcul du rayon $rayon = $rayon * $rayon; // On met le rayon au carée $centrepetit = (2*pow(2, $i)-1)*$cote/(4*pow(2, $i)); // Ce centre x ou y , petite valeur $centregrand = $cote - $centrepetit; // Ce centre x ou y , grande valeur for($x=$unquartcote;$x<$troisquartcote;$x++) { for($y=$unquartcote;$y<$troisquartcote;$y++) { $equation1 = ($x-$centrepetit)*($x-$centrepetit)+($y-$demicote)*($y-$demicote)-$rayon; // Equation du cercle n°1 $equation2 = ($x-$demicote)*($x-$demicote)+($y-$centrepetit)*($y-$centrepetit)-$rayon; // Equation du cercle n°2 $equation3 = ($x-$centregrand)*($x-$centregrand)+($y-$demicote)*($y-$demicote)-$rayon; // Equation du cercle n°3 $equation4 = ($x-$demicote)*($x-$demicote)+($y-$centregrand)*($y-$centregrand)-$rayon; // Equation du cercle n°4 if ($equation1 * $equation2 * $equation3 * $equation4 < 0) { // Si le pixel en cours est sur un nombre impair de disques $pixels[$x][$y] = 1 - $pixels[$x][$y]; // On change la couleur du pixel } } } } $image = imagecreate($cote, $cote); // On crée l'image aux dimentions voulues $couleur0 = imagecolorallocate($image, 255, 255, 255); // On définie la premiere couleur (blanc) $couleur1 = imagecolorallocate($image, 0, 0, 0); // On définie la seconde couleur (noir) for($x=0;$x<$cote;$x++) { // Et pour chaque pixel for($y=0;$y<$cote;$y++) { ImageSetPixel ($image, $x, $y, ${'couleur'.$pixels[$x][$y]}); // On pose le pixel à la couleur voulue } } imagepng($image, 'fract/image.png'); // On enregistre l'image echo 'Image générée !'; ?> Enjoy !
Edit 1 : un bug corrigé Edit 2 : merci bluestorm c'est bien trouvé
Edit 3 : merci bluestorm c'est très bien trouvé
Edit 4 : optimisation : pour les cercles, entre $cote/4 et 3*$cote/4, et non plus entre 0 et $cote
Édité
le 05/07/2007 à 13:14:29
par piRpav
|
bluestorm
|
# Posté le 05/07/2007 à 10:31:03 |
dont ask to ask![]() Groupe : Membres |
Dji-Bi >
Le problème, c'est que toutes les fractales sont différentes. Certaines sont simples à générer, d'autres plus compliquées. Tu peux par exemple essayer de commencer par le triangle de Sierpinski, il est assez simple à faire, et il existe tout un tas de méthodes différentes pour le générer. Il n'est pas forcément aussi joli que les fractales plus "aléatoires" comme Mandelbrot ou Julia, mais c'est un bon début. Comment faire ? Regarde bien l'image, essaie de l'imaginer comme une superposition de "blocs", et regarde comment tu pourrais les dessiner, en partant du plus gros, et en dessinant les plus petits au fur et à mesure : si tu continues à l'infini, tu obtiens le triangle; pour des raisons matérielles tu risque de t'arrêter , et tu auras alors un triangle approché.
Et surtout, ne vous focalisez pas sur les fractales ! Il existe de nombreuses idées, parfois très simples, permettant de dessiner des images surprenantes. pipRav > Code : PHP if($pixels[$x][$y]==0) {
$pixels[$x][$y] = 1; }else{ $pixels[$x][$y] = 0; } Tu peux faire plus léger : Code : PHP $pixels[$x][$y] = 1 - $pixels[$x][$y];
edit : pipRav > par ailleurs, je pense que tes quatre 'if' peuvent se ré-écrire ainsi : Code : PHP if ($equation1 * $equation2 * $equation3 * $equation4 < 0)
$pixels[$x][$y] = 1 - $pixels[$x][$y];
Édité
le 05/07/2007 à 10:57:21
par bluestorm
|
anonyme
|
# Posté le 05/07/2007 à 10:59:21 |
|
Groupe : |
Bonne chance, c'est une très bonne idée !
|
bluestorm
|
# Posté le 05/07/2007 à 11:00:09 |
dont ask to ask![]() Groupe : Membres |
Voici une deuxième fractale, encore en PHP
(venez pas croire que j'aime le PHP, mais c'est un langage que plein de zéros connaissent, alors s'ils sont timides ça les poussera peut-être à participer !) C'est une méthode particulière pour produire le triangle de Sierpinski, qui se base sur le triangle de Pascal. N'ayez pas peur, c'est tout simple ! La propriété utilisée c'est que si l'on regarde la parité (le fait qu'ils soient pairs ou impairs) des nombres du triangle de pascal, on obtient le triangle de sierpinksy (en gros). Ce n'est pas la plus simple manière de générer un triangle de Sierpinsky, mais j'avais envie d'essayer
Voilà le rendu :
Et voilà le code : Code : PHP <?php
function construire($taille) { $pascal = array(); for ($i = 0; $i < $taille; ++$i) { $ligne = array(); $ligne[0] = 1; for ($j = 1; $j < $i; ++$j) $ligne[$j] = $pascal[$i - 1][$j - 1] + $pascal[$i - 1][$j]; $pascal[$i] = $ligne; } return $pascal; } function dessiner($triangle) { $len = count($triangle); $max_side = 400; $side = $max_side / $len; $img = imagecreate($max_side, $max_side); $noir = imagecolorallocate($img, 0, 0, 0); $blanc = imagecolorallocate($img, 255, 255, 255); foreach ($triangle as $i => $ligne) foreach ($ligne as $j => $case) { $x = $i * $side; $y = (($len - $i) / 2 + $j) * $side; imagefilledrectangle($img, $y, $x, $y + $side, $x + $side, $case % 2 == 0 ? $noir : $blanc); } return $img; } $taille = 100; $triangle = construire($taille); $image = dessiner($triangle); header("Content-type: image/png"); imagepng($image); ?> Il faut savoir qu'en modifiant un seul paramètre, le "% 2" au moment du dessin, on peut obtenir d'autres triangles assez différents. Un exemple :
Mystère ! |
SouCaline
|
# Posté le 05/07/2007 à 11:03:48 |
Utilisateur Mac OS X.4.11![]() Groupe : Membres |
Je me suis permis de transformer le code de delroth qui est en language C en PHP.
Tout d'abord voici le résultat que j'obtiens en php:
Et maintenant le code que j'ai transformé en php: Code : PHP <?php header ("Content-type: image/png"); $w = '300'; // Taille en pixel de la largeur de l'image $h = '250'; // Taille en pixel de la hauteur de l'image $image = imagecreate($w, $h); // On crée l'image aux dimentions voulues $couleur0 = imagecolorallocate($image, 255, 255, 255); // On définie la premiere couleur (blanc) $couleur1 = imagecolorallocate($image, 0, 0, 0); // On définie la seconde couleur (noir) $x = rand(0, $w); // On défini un chiffre aléatoirement entre 0 et ce que vaut $w $y = rand(0, $h); // On défini un chiffre aléatoirement entre 0 et ce que vaut $h $i=0; while($i < 10000) { $n = rand(0, 1000); // A chaque boucle on défini un chiffre aléatoirement entre 0 et 1000 if($n <= '333') { $x /= 2; $y /= 2; } elseif($n > '333' && $n <= '666') { $x = ($x + $w / 2) / 2; $y = ($y + $h) / 2; } else { $x = ($x + $w) / 2; $y = ($y + $h / 2) / 2; } ImageSetPixel ($image, $x, $y, $couleur1); // On écrit le pixel au coordonnée obtenue $i++; } imagepng($image); // On affiche l'image ?>
Édité
le 05/07/2007 à 11:05:39
par SouCaline
|
zulon
|
# Posté le 05/07/2007 à 11:07:07 |
The shrieker shrieks.![]() Groupe : Membres |
Je viens de faire un triangle de sierpinski basique en ocaml
:
Code : Ocaml Graphics.open_graph " 400x400";;
let rec sierpinski (a1, a2) (b1, b2) (c1, c2) = let draw_triangle (a1, a2) (b1, b2) (c1, c2) = Graphics.moveto a1 a2; Graphics.lineto b1 b2; Graphics.lineto c1 c2; Graphics.lineto a1 a2; in function | 0 -> () | iter -> ( draw_triangle (a1, a2) (b1, b2) (c1, c2); sierpinski (a1, a2) ((a1+b1)/2, (a2+b2)/2) ((a1+c1)/2, (a2+c2)/2) (iter-1); sierpinski (b1, b2) ((b1+a1)/2, (b2+a2)/2) ((b1+c1)/2, (b2+c2)/2) (iter-1); sierpinski (c1, c2) ((c1+a1)/2, (c2+a2)/2) ((b1+c1)/2, (b2+c2)/2) (iter-1); ) ;; sierpinski (0,0) (200,400) (400,0) 5;; Voici le rendu:
Édité
le 05/07/2007 à 11:09:45
par zulon
|
Linktim
|
# Posté le 05/07/2007 à 11:09:32 |
The Other Side![]() Groupe : Membres |
Bon c'est ma première faite avec C et SDL
Je sais pas trop si c'est ce que vous attendez mais un fractale c'est simplement une image généré par ordinateur ou alors elle doit suivre un modèle du genre les triangles de Sierpinski ? Edit : A la demande de bluestorm le code : C'est une simple reprise des cours de M@téo21 sur SDL->Degradés mais ce qui fait la différence c'est les paramètres que l'on va mettre à i Code : C #include <stdlib.h>
#include <stdio.h> #include <SDL/SDL.h> int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL, *lignes[151] = {NULL}; SDL_Rect position; SDL_Event event; int i = 0; int continuer = 1; SDL_Init(SDL_INIT_VIDEO); ecran = SDL_SetVideoMode(300, 130, 32, SDL_HWSURFACE); for (i = 0 ; i <= 150 ; i++) { lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0); } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); for (i = 0 ; i <= 150 ; i++) { position.x = 0; position.y = i; SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, (i*2), (i/2), (i*i))); // Paramètre qui font la différence SDL_BlitSurface(lignes[i], NULL, ecran, &position); } SDL_Flip(ecran); while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; } } for (i = 0 ; i <= 255 ; i++) SDL_FreeSurface(lignes[i]); SDL_Quit(); return EXIT_SUCCESS; }
Édité
le 05/07/2007 à 11:22:23
par Linktim
|
tOm'
|
# Posté le 05/07/2007 à 11:10:36 |
[ 26.457239] Kernel Panic![]() Groupe : Membres |
Ma foi c'est un très bon sujet, je vais m'y mettre de ce pas, j'ai enfin trouvé une motivation à apprendre le Python cet été !
Thomas "NeoChaotic" . Blog. |
bluestorm
|
# Posté le 05/07/2007 à 11:12:38 |
dont ask to ask![]() Groupe : Membres |
Bon, par contre, si l'atelier continue à marcher aussi bien (ce qui n'est pas gagné), on risque d'avoir un problème d'encombrement du topic.
Organisation du topic
Je propose que vous postiez ici les réalisations complètement terminées, et que si vous voulez améliorer la création de quelqu'un, ou poser des questions dessus, ou que vous essayez de faire la même chose dans un autre langage, etc..., vous créiez un nouveau topic sur le forum, en pensant bien à rajouter "[Cod'Art]" au début du titre. Master Linktim > toutes les images générées informatiquement, du moment que tu les trouves jolies, sont acceptées. Par ailleurs, si tu pouvais donner ton code, ou un lien vers ton code, ce serait parfait
Édité
le 05/07/2007 à 11:38:42
par bluestorm
|
SouCaline
|
# Posté le 05/07/2007 à 11:14:40 |
Utilisateur Mac OS X.4.11![]() Groupe : Membres |
Citation : Master Linktim
Bon c'est ma première faite avec C et SDL
Je sais pas trop si c'est ce que vous attendez mais un fractale c'est simplement une image généré par ordinateur ou alors elle doit suivre un modèle du genre les triangles de Sierpinski ? C'est déjà pas mal =) Si tu as besoin d'infos sur les fractales tu as wikipedia: Fractales |
bluestorm
|
# Posté le 05/07/2007 à 12:07:17 |
dont ask to ask![]() Groupe : Membres |
Pour changer des fractales, je vous propose maintenant une réalisation un peu différente.
Vous connaissez l'opérateur "modulo", en informatique ? Il s'écrit '%' en C ou PHP. a modulo b, c'est le reste de la division (euclidienne) de a par b. Par exemple, 9 modulo 6 = 3, et 4 modulo 2 = 0. L'idée de mon nouveau dessin est la suivante : pour un nombre N donné, on représente sur un cercle les nombres de 0 à N-1. À chaque fois qu'on prend deux nombres x et y sur le cercle, on peut les multiplier et regarder si le résultat vaut 1, modulo N (si (x * y) modulo N = 1). Si c'est le cas, on trace un trait entre les deux nombres. Vous comprendrez peut-être plus facilement sur dessin :
L'idée de base est très simple, mais je n'avais aucune idée de ce que ça allait donner sur de grands nombres ! Ce qui est amusant, c'est essayer, explorer. Vous jugerez par vous-même, mais je trouve pour ma part que le résultat est satisfaisant. Au départ, les résultats obtenus sont très simples :
Cependant, très vite, on voit des choses surprenantes apparaître : ![]()
On obtient finalement des choses assez jolies : ![]() ![]() Vous pouvez lire le code source ici : http://bluestorm.info/mathdraw/mathdraw.ml.html Il contient environ 60 lignes de code, en OCaml, et utilise la librairie de rendu cairo (j'avais envie d'essayer).
Édité
le 05/07/2007 à 12:12:12
par bluestorm
|
asmanur
|
# Posté le 05/07/2007 à 12:12:38 |
![]() ![]() |
Hop, moi j'ai fait le Tapis_de_Sierpiński
Petit aperçu : ici Et le code, en OCaml : Code : Ocaml open Graphics;; open_graph " 10000x1000";; let s = 200;; let color n = let coef = ((-n+s)*200/s) in rgb coef coef coef;; let square x y size = set_color (color size); fill_rect (x-size/2) (y-size/2) size size;; let rec tapis x y size n = let call x y = tapis x y (size/3) (n-1) in let rec next (a,b) = call (x+a*size) (y+b*size); match (a,b) with (-1, 0) -> next (-1, 1) | (-1, 1) -> next (0, 1) | (0 , 1) -> next (1, 1) | (1, 1) -> next (1,0) | (1, 0) -> next (1,-1) | (1, -1) -> next (0, -1) | (0, -1) -> next (-1, -1) | (-1, -1) -> () in match n with 0 -> () | n -> square x y size; next (-1, 0);; tapis 500 500 s 8
Édité
le 05/07/2007 à 12:14:22
par asmanur
![]() Metzgermeister ɛστι παιδοφονος |
Grimtork
|
# Posté le 05/07/2007 à 12:12:51 |
je hais les citations ; )![]() Groupe : Membres |
Voici ma fractale que j ai faite avec Qbiom:
voici la formule F(z)=z^1+1+e^z C' est une formule très simple qui donne un beau resultat. |
Nanoc
|
# Posté le 05/07/2007 à 12:51:08 |
Apprenez à utiliser la STL !!![]() Groupe : Membres |
Je vous propose une image qui diffère des fractales, la spirale d'Ulam (bon c'est vrai c'est moins impressionnant...)
(On voit pas grand chose sur la miniature) L'algorithme est tout simple, je génère un tableau de nombre premiers ordonnés en spirale puis, je colorie les pixels correspondant aux nombres premiers avec une couleur proportionnelle la distance au centre. Le code source est là (C++): Spirale de Ulam J'utilise la SDL uniquement.
Édité
le 05/07/2007 à 14:08:09
par Nanoc
Exercices de C++ pour tous les niveaux ! Mes tutos: Tri de Shell --- [C++] Gestion des exceptions --- [C++] Manipulateurs de flux --- [C++] Notions avancées (suite du cours de M@teo21) (nouveaux chapitres !) |
bluestorm
|
# Posté le 05/07/2007 à 12:57:21 |
dont ask to ask![]() Groupe : Membres |
Pourquoi ne pas utiliser un Crible d'Ératosthène pour trouver les nombres premiers ? C'est beaucoup plus adapté dans ce cas.
|
Nanoc
|
# Posté le 05/07/2007 à 13:01:03 |
Apprenez à utiliser la STL !!![]() Groupe : Membres |
C'est bien ce que je fais. Je construis le crible, puis je colorie.
Exercices de C++ pour tous les niveaux ! Mes tutos: Tri de Shell --- [C++] Gestion des exceptions --- [C++] Manipulateurs de flux --- [C++] Notions avancées (suite du cours de M@teo21) (nouveaux chapitres !) |
bluestorm
|
# Posté le 05/07/2007 à 13:10:01 |
dont ask to ask![]() Groupe : Membres |
Code : C
bool estPremier(unsigned int n)
{ if (n % 2 == 0) //Si le nombre est pair { if (n != 2) return false; } else { //Sinon const double borneMax(sqrt((double) n)); for (int i(3); i <= borneMax; i += 2) { if (n % i == 0) return false; } } return true; } Fake
|
Nanoc
|
# Posté le 05/07/2007 à 13:22:20 |
Apprenez à utiliser la STL !!![]() Groupe : Membres |
Ben oui, il faut bien tester quelque part si les nombres sont premiers
EDIT: ah non, je viens de comprendre. En effet je n'utilise pas le crible, cela me semblait trop compliqué de parcourir un tableau en spirale.
Édité
le 05/07/2007 à 13:24:43
par Nanoc
Exercices de C++ pour tous les niveaux ! Mes tutos: Tri de Shell --- [C++] Gestion des exceptions --- [C++] Manipulateurs de flux --- [C++] Notions avancées (suite du cours de M@teo21) (nouveaux chapitres !) |
asmanur
|
# Posté le 05/07/2007 à 13:28:24 |
![]() ![]() |
Et hop, mandlebrot en une demie heure §
Le code est plus long cette fois ci, donc je ne le mettrais pas (c'est toujours de l'OCaml). Juste une screenshot et une autre edit: Le code suite à une pression de bluestorm
ici
Édité
le 05/07/2007 à 14:06:31
par asmanur
![]() Metzgermeister ɛστι παιδοφονος |
Tix.
|
# Posté le 05/07/2007 à 14:03:20 |
For ever G33K![]() Groupe : Membres |
Haha ! voilà un post qui va me plaire
voila mes réalisations (OpenGL) : ![]() ![]()
et, on peu tres certainement le faire avec une multitude d'autre couleurs ... oops voilà mon code :
Code : C /******************************************************************************* Titre : Effet graphique en C avec OpenGL Sous titre : BitMAP Logique By Tix. tixlegeek@gamil.com http://www.tixlegeek.sup.fr (c) TRANSISTERIX 2007 *******************************************************************************/ #include <SDL/SDL.h> #include <GL/gl.h> #include <GL/glu.h> #define pi 3.14159265358979323846 #include <math.h> typedef struct COLOR { GLbyte r; GLbyte v; GLbyte b; } COLOR ; /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: This function converts decimal degrees to radians :*/ /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ double deg2rad(double deg) { return (deg * pi / 180); } /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: This function converts radians to decimal degrees :*/ /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ double rad2deg(double rad) { return (rad * 180 / pi); } void assign(COLOR *variable, GLbyte r, GLbyte v, GLbyte b) { variable->r = r; variable->v = v; variable->b = b; } int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_WM_SetCaption("Fractal ?",NULL); SDL_SetVideoMode(255, 255, 32, SDL_OPENGL); // Definitions de l'environnement // gluOrtho2D( |
