Gå til innhold

Eksempler til TinyPTC?


Anbefalte innlegg

Videoannonse
Annonse

jeg har laget en raytracer og en fraktalviewer

ikke så veldig vanskelig

hvis du vil ha et eksempel kan du se på fraktalkoden her

//
// TinyPTC by Gaffer
// www.gaffer.org/tinyptc
//

#include "tinyptc.h"

#include <math.h>
#include <stdio.h>

#define WIDTH 640
#define HEIGHT 480
#define SIZE WIDTH*HEIGHT

#define MAXIT 256 /* maximum number of iterations */
  

static int pixel[SIZE];

typedef struct _cmplx {
double real, imaginary;
} cmplx;

typedef struct _step {
double x, y;
} step;

cmplx add(cmplx* a, cmplx* b)
{
cmplx tmp;
tmp.real = a->real + b->real;
tmp.imaginary = a->imaginary + b->imaginary;
return tmp;
}

cmplx mul(cmplx* a, cmplx* b)
{
cmplx tmp;
tmp.real = (a->real * b->real) - (a->imaginary * b->imaginary);
tmp.imaginary = (a->imaginary * b->real) + (a->real * b->imaginary);
return tmp;
}

double modulus(cmplx* a)
{
return sqrt((a->real * a->real) + (a->imaginary * a->imaginary));
}

int is_in_set(cmplx* c) 
{
int iterations = 0;  
cmplx z = *c;
cmplx t;
while(iterations < MAXIT) {
 t = mul(&z, &z);
 z = add(&t, c);
 if(modulus(&z) > 2.0) return iterations;
 iterations++;
}
return 0;
}

step make_grid(double xmin, double xmax, double ymin, double ymax)
{
step tmp;
double deltax = xmax - xmin;
double deltay = ymax - ymin;
tmp.x = deltax/WIDTH;
tmp.y = deltay/HEIGHT;
return tmp;
}

int main()
{
int index, x, y;
int color = 0x00;
int background = 0xffffffff;
cmplx point;
int iters;
step stp = make_grid(-1.5, 0.5, -1.0, 1.0); 
if (!ptc_open("mandelbrot",WIDTH,HEIGHT)) return 1;
   while (1) {
       for(x=0; x < WIDTH; ++x) {
 	for(y = 0; y < HEIGHT; ++y) {
   point.real = -1.5;
   point.imaginary = 1.0;
   point.real += x * stp.x;
   point.imaginary -= y * stp.y;
   iters = is_in_set(&point);
   if(iters == 0) pixel[y * WIDTH + x] = color;
   else {
   	pixel[y * WIDTH + x] = background;
   }
 	}
 }
       ptc_update(pixel);
   }
}

 

denne plotter mandelbrotsettet z = z^2 + c hvor z og c er komplekse tall.

jeg har dog ikke lagt til noe tøffe fargegreier men det er rimelig greit når du vet hvor mange iterasjoner det tar før et punkt "slipper unna". det er også rimelig lett å zoome seg inn, men det har jeg heller ikke giddet å lagt til. lagde den på et par timer bare siden jeg ville lære meg komplekse tall

Endret av saboi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...