megadrive_test2

annotate tools/tunnel.c @ 5:ea70f3da150f

color cycling tunnel
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 20 Jun 2017 06:08:58 +0300
parents 72ab63f262bf
children
rev   line source
nuclear@4 1 #include <stdio.h>
nuclear@4 2 #include <stdlib.h>
nuclear@4 3 #include <math.h>
nuclear@4 4
nuclear@5 5 #define XSZ 320
nuclear@5 6 #define YSZ 240
nuclear@4 7
nuclear@4 8 int main(void)
nuclear@4 9 {
nuclear@4 10 int i, j;
nuclear@4 11 unsigned char *pixels, *pptr;
nuclear@5 12 float aspect = (float)XSZ / (float)YSZ;
nuclear@4 13
nuclear@4 14 pixels = malloc(XSZ * YSZ);
nuclear@4 15 pptr = pixels;
nuclear@4 16
nuclear@4 17 for(i=0; i<YSZ; i++) {
nuclear@4 18 float y = 2.0 * (float)i / (float)YSZ - 1.0;
nuclear@4 19 for(j=0; j<XSZ; j++) {
nuclear@5 20 float x = aspect * (2.0 * (float)j / (float)XSZ - 1.0);
nuclear@4 21 float tu = atan2(y, x) / M_PI * 0.5 + 0.5;
nuclear@4 22 float d = sqrt(x * x + y * y);
nuclear@5 23 float tv = d == 0.0 ? 0.0 : 0.5 / d;
nuclear@4 24
nuclear@5 25 int ty = (int)(tv * 64.0) % 14 + 1;
nuclear@4 26 int tx = (int)(tu * 256.0) & 0xf;
nuclear@4 27
nuclear@5 28 if(d < 0.2) {
nuclear@5 29 *pptr++ = 0;
nuclear@5 30 } else {
nuclear@5 31 *pptr++ = tx ? ty : 0xf;
nuclear@5 32 }
nuclear@4 33 }
nuclear@4 34 }
nuclear@4 35
nuclear@4 36 pptr = pixels;
nuclear@4 37 printf("P6\n%d %d\n15\n", XSZ, YSZ);
nuclear@4 38
nuclear@4 39 for(i=0; i<YSZ; i++) {
nuclear@4 40 for(j=0; j<XSZ; j++) {
nuclear@4 41 unsigned char c = *pptr++;
nuclear@4 42 putchar(c);
nuclear@4 43 putchar(c);
nuclear@4 44 putchar(c);
nuclear@4 45 }
nuclear@4 46 }
nuclear@4 47 fflush(stdout);
nuclear@4 48
nuclear@4 49 return 0;
nuclear@4 50 }