dos33fsprogs/graphics/gr/plasmagoria/sines/sine_dup.c
2023-09-03 23:32:26 -04:00

134 lines
6.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846264338327950
static int sin1[256]={
0x2E,0x30,0x32,0x34,0x35,0x36,0x38,0x3A,
0x3C,0x3C,0x3E,0x40,0x41,0x42,0x44,0x45,
0x47,0x47,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,
0x4F,0x50,0x51,0x52,0x53,0x53,0x54,0x54,
0x55,0x55,0x56,0x57,0x57,0x58,0x58,0x57,
0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,
0x58,0x57,0x57,0x57,0x56,0x56,0x55,0x54,
0x55,0x54,0x53,0x52,0x52,0x51,0x50,0x4F,
0x4E,0x4E,0x4D,0x4C,0x4B,0x4B,0x4A,0x49,
0x48,0x47,0x46,0x45,0x45,0x44,0x42,0x42,
0x41,0x41,0x3F,0x3F,0x3D,0x3D,0x3C,0x3B,
0x3B,0x39,0x39,0x39,0x38,0x38,0x37,0x36,
0x36,0x35,0x35,0x34,0x34,0x33,0x32,0x32,
0x32,0x31,0x31,0x31,0x30,0x31,0x30,0x30,
0x30,0x30,0x2F,0x2F,0x30,0x2F,0x2F,0x2F,
0x2F,0x2F,0x2F,0x2F,0x2E,0x2F,0x2F,0x2F,
0x2E,0x2F,0x2F,0x2F,0x2F,0x2E,0x2F,0x2F,
0x2F,0x2E,0x2F,0x2F,0x2E,0x2E,0x2F,0x2E,
0x2E,0x2D,0x2E,0x2D,0x2D,0x2D,0x2C,0x2C,
0x2C,0x2B,0x2B,0x2B,0x2A,0x2A,0x29,0x28,
0x28,0x27,0x27,0x26,0x26,0x25,0x25,0x23,
0x23,0x22,0x21,0x21,0x20,0x1F,0x1F,0x1D,
0x1D,0x1C,0x1B,0x1A,0x19,0x19,0x17,0x16,
0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,
0x0F,0x0F,0x0E,0x0D,0x0C,0x0C,0x0B,0x0A,
0x09,0x09,0x08,0x08,0x08,0x07,0x06,0x07,
0x06,0x06,0x06,0x06,0x05,0x06,0x05,0x05,
0x06,0x05,0x06,0x06,0x07,0x07,0x08,0x08,
0x09,0x09,0x0A,0x0B,0x0B,0x0C,0x0C,0x0D,
0x0F,0x0F,0x10,0x12,0x12,0x14,0x15,0x16,
0x17,0x19,0x1A,0x1B,0x1D,0x1E,0x20,0x21,
0x22,0x24,0x26,0x27,0x28,0x2A,0x2C,0x2E,
};
static int sin2[256]={
0x2E,0x33,0x38,0x3C,0x40,0x43,0x47,0x4B,0x4E,0x51,0x54,0x56,0x59,0x5A,0x5C,0x5D,0x5D,0x5E,0x5E,0x5D,0x5C,0x5A,0x59,0x57,0x55,0x53,0x4F,0x4C,0x49,0x46,0x42,0x3E,
0x3A,0x36,0x32,0x2E,0x2A,0x26,0x23,0x1F,0x1C,0x18,0x15,0x12,0x10,0x0E,0x0C,0x0A,0x09,0x08,0x07,0x07,0x07,0x07,0x09,0x0A,0x0B,0x0D,0x0F,0x11,0x13,0x16,0x19,0x1C,
0x1F,0x22,0x26,0x29,0x2C,0x2F,0x32,0x36,0x38,0x3B,0x3E,0x3F,0x42,0x44,0x46,0x47,0x48,0x49,0x4B,0x4B,0x4B,0x4A,0x4A,0x49,0x49,0x48,0x46,0x44,0x43,0x41,0x3F,0x3C,
0x3A,0x38,0x35,0x33,0x30,0x2E,0x2C,0x2A,0x28,0x26,0x24,0x22,0x21,0x20,0x1F,0x1F,0x1E,0x1E,0x1D,0x1D,0x1E,0x1E,0x1F,0x20,0x21,0x22,0x24,0x25,0x27,0x29,0x2B,0x2D,
0x2E,0x30,0x33,0x35,0x37,0x38,0x3A,0x3C,0x3D,0x3E,0x3F,0x3F,0x40,0x40,0x41,0x40,0x40,0x3F,0x3F,0x3E,0x3D,0x3B,0x3A,0x38,0x36,0x34,0x31,0x2F,0x2D,0x2B,0x29,0x25,
0x23,0x21,0x1F,0x1D,0x1B,0x19,0x18,0x16,0x15,0x14,0x14,0x13,0x13,0x13,0x13,0x14,0x16,0x17,0x18,0x1A,0x1C,0x1D,0x20,0x23,0x26,0x28,0x2C,0x2E,0x32,0x35,0x38,0x3B,
0x3E,0x41,0x45,0x48,0x4B,0x4C,0x4F,0x51,0x53,0x54,0x55,0x55,0x57,0x57,0x57,0x56,0x55,0x53,0x52,0x50,0x4E,0x4B,0x49,0x45,0x42,0x3F,0x3B,0x37,0x34,0x30,0x2C,0x27,
0x23,0x1F,0x1C,0x18,0x14,0x11,0x0E,0x0B,0x09,0x07,0x05,0x03,0x02,0x01,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x07,0x0A,0x0D,0x10,0x13,0x17,0x1A,0x1E,0x22,0x26,0x2A,
};
static int sin3[256]={
0x26,0x2C,0x31,0x35,0x39,0x3D,0x40,0x42,0x44,0x45,0x45,0x46,0x45,0x43,0x42,0x40,0x3C,0x3A,0x38,0x36,0x33,0x31,0x30,0x2F,0x2F,0x2E,0x2F,0x2F,0x30,0x33,0x33,0x36,
0x37,0x3A,0x3C,0x3C,0x3E,0x3E,0x3D,0x3D,0x3B,0x39,0x36,0x34,0x30,0x2B,0x28,0x23,0x1D,0x19,0x14,0x11,0x0C,0x09,0x07,0x04,0x03,0x03,0x03,0x03,0x04,0x07,0x09,0x0C,
0x0F,0x13,0x16,0x18,0x1B,0x1E,0x20,0x22,0x22,0x23,0x24,0x24,0x23,0x22,0x21,0x20,0x1D,0x1C,0x1B,0x1A,0x19,0x19,0x19,0x1A,0x1C,0x1E,0x20,0x23,0x27,0x2B,0x2F,0x33,
0x37,0x3D,0x40,0x44,0x47,0x4A,0x4C,0x4D,0x4E,0x4E,0x4D,0x4C,0x4A,0x47,0x45,0x41,0x3C,0x39,0x35,0x32,0x2E,0x2B,0x28,0x26,0x25,0x23,0x23,0x22,0x22,0x24,0x24,0x25,
0x26,0x29,0x2A,0x2A,0x2B,0x2C,0x2B,0x2B,0x29,0x28,0x25,0x23,0x20,0x1C,0x19,0x15,0x10,0x0D,0x09,0x07,0x04,0x02,0x01,0x00,0x00,0x00,0x02,0x03,0x06,0x0A,0x0D,0x11,
0x15,0x1B,0x1F,0x23,0x27,0x2B,0x2D,0x30,0x32,0x33,0x34,0x35,0x35,0x33,0x33,0x32,0x30,0x2E,0x2D,0x2C,0x2B,0x2A,0x2A,0x2A,0x2B,0x2C,0x2E,0x30,0x32,0x36,0x38,0x3B,
0x3E,0x42,0x45,0x47,0x49,0x4B,0x4B,0x4B,0x4A,0x49,0x47,0x45,0x42,0x3D,0x3A,0x35,0x30,0x2B,0x26,0x22,0x1E,0x1A,0x17,0x14,0x13,0x11,0x10,0x10,0x10,0x12,0x12,0x14,
0x15,0x18,0x1A,0x1B,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0x1B,0x18,0x16,0x14,0x10,0x0E,0x0C,0x0B,0x09,0x08,0x08,0x09,0x0A,0x0C,0x0E,0x11,0x14,0x19,0x1D,0x22,
};
static int sin4[256]={
0x40,0x41,0x43,0x44,0x46,0x47,0x49,0x4A,0x4C,0x4D,0x4F,0x50,0x52,0x53,0x55,0x56,0x58,0x59,0x5B,0x5C,0x5D,0x5F,0x60,0x61,0x63,0x64,0x65,0x67,0x68,0x69,0x6A,0x6B,
0x6C,0x6D,0x6F,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x76,0x77,0x78,0x78,0x79,0x7A,0x7A,0x7B,0x7B,0x7C,0x7C,0x7D,0x7D,0x7D,0x7E,0x7E,0x7E,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7E,0x7E,0x7E,0x7D,0x7D,0x7D,0x7C,0x7C,0x7B,0x7B,0x7A,0x7A,0x79,0x78,0x78,0x77,0x76,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6F,0x6D,
0x6C,0x6B,0x6A,0x69,0x68,0x67,0x65,0x64,0x63,0x61,0x60,0x5F,0x5D,0x5C,0x5B,0x59,0x58,0x56,0x55,0x53,0x52,0x50,0x4F,0x4D,0x4C,0x4A,0x49,0x47,0x46,0x44,0x43,0x41,
0x3F,0x3E,0x3C,0x3B,0x39,0x38,0x36,0x35,0x33,0x32,0x30,0x2F,0x2D,0x2C,0x2A,0x29,0x27,0x26,0x24,0x23,0x22,0x20,0x1F,0x1E,0x1C,0x1B,0x1A,0x18,0x17,0x16,0x15,0x14,
0x13,0x12,0x10,0x0F,0x0E,0x0D,0x0C,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0C,0x0D,0x0E,0x0F,0x10,0x12,
0x13,0x14,0x15,0x16,0x17,0x18,0x1A,0x1B,0x1C,0x1E,0x1F,0x20,0x22,0x23,0x24,0x26,0x27,0x29,0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x33,0x35,0x36,0x38,0x39,0x3B,0x3C,0x3E,
};
int main(int argc, char **argv) {
int i;
int ours[256],current=0;
int diff=0;
int which=0;
if (argc>1) {
which=atoi(argv[1]);
}
for(i=0;i<256;i++) {
if (which==0) {
/* start 46, peak=88 */
ours[i]=round(47.0+
32.0*sin(i*(PI*2.0/256.0))+
16.0*sin(2.0*i*(PI*2.0/256.0)));
printf("%d: %d\n",i,sin1[i]-ours[i]);
current=sin1[i];
}
if (which==1) {
ours[i]=round(47.0+
32.0*sin(4.0*i*(PI*2.0/256.0))+
16.0*sin(3.0*i*(PI*2.0/256.0)));
printf("%d: %d\n",i,sin2[i]-ours[i]);
current=sin2[i];
}
if (which==2) {
ours[i]=round(38.0+
24.0*sin(3.0*i*(PI*2.0/256.0))+
16.0*sin(8.0*i*(PI*2.0/256.0)));
printf("%d: %d (%d %d)\n",i,
sin3[i]-ours[i],sin3[i],ours[i]);
current=sin3[i];
}
if (which==3) {
/* start 46, peak=88, 21 */
ours[i]=round(64.0+
64.0*sin(i*(PI*2.0/256.0)));
printf("%d: %d (%d %d)\n",
i,sin4[i]-ours[i],sin4[i],ours[i]);
current=sin4[i];
}
if (ours[i]!=current) {
diff++;
}
}
printf("Diff = %d\n",diff);
return 0;
}