const int32_t sin_ang[360]={ 0, 4, 9, 13, 18, 22, 27, 31, 36, 40, 44, 49, 53, 58, 62, 66, 71, 75, 79, 83, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 139, 143, 147, 150, 154, 158, 161, 165, 168, 171, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 204, 207, 210, 212, 215, 217, 219, 222, 224, 226, 228, 230, 232, 234, 236, 237, 239, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 254, 255, 255, 255, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 254, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 243, 242, 241, 239, 237, 236, 234, 232, 230, 228, 226, 224, 222, 219, 217, 215, 212, 210, 207, 204, 202, 199, 196, 193, 190, 187, 184, 181, 178, 175, 171, 168, 165, 161, 158, 154, 150, 147, 143, 139, 136, 132, 128, 124, 120, 116, 112, 108, 104, 100, 96, 92, 88, 83, 79, 75, 71, 66, 62, 58, 53, 49, 44, 40, 36, 31, 27, 22, 18, 13, 9, 4, 0, -4, -9, -13, -18, -22, -27, -31, -36, -40, -44, -49, -53, -58, -62, -66, -71, -75, -79, -83, -88, -92, -96, -100, -104, -108, -112, -116, -120, -124, -128, -132, -136, -139, -143, -147, -150, -154, -158, -161, -165, -168, -171, -175, -178, -181, -184, -187, -190, -193, -196, -199, -202, -204, -207, -210, -212, -215, -217, -219, -222, -224, -226, -228, -230, -232, -234, -236, -237, -239, -241, -242, -243, -245, -246, -247, -248, -249, -250, -251, -252, -253, -254, -254, -255, -255, -255, -256, -256, -256, -256, -256, -256, -256, -255, -255, -255, -254, -254, -253, -252, -251, -250, -249, -248, -247, -246, -245, -243, -242, -241, -239, -237, -236, -234, -232, -230, -228, -226, -224, -222, -219, -217, -215, -212, -210, -207, -204, -202, -199, -196, -193, -190, -187, -184, -181, -178, -175, -171, -168, -165, -161, -158, -154, -150, -147, -143, -139, -136, -132, -128, -124, -120, -116, -112, -108, -104, -100, -96, -92, -88, -83, -79, -75, -71, -66, -62, -58, -53, -49, -44, -40, -36, -31, -27, -22, -18, -13, -9, -4, }; const int32_t cos_ang[360]={ 256, 256, 256, 256, 255, 255, 255, 254, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 243, 242, 241, 239, 237, 236, 234, 232, 230, 228, 226, 224, 222, 219, 217, 215, 212, 210, 207, 204, 202, 199, 196, 193, 190, 187, 184, 181, 178, 175, 171, 168, 165, 161, 158, 154, 150, 147, 143, 139, 136, 132, 128, 124, 120, 116, 112, 108, 104, 100, 96, 92, 88, 83, 79, 75, 71, 66, 62, 58, 53, 49, 44, 40, 36, 31, 27, 22, 18, 13, 9, 4, 0, -4, -9, -13, -18, -22, -27, -31, -36, -40, -44, -49, -53, -58, -62, -66, -71, -75, -79, -83, -88, -92, -96, -100, -104, -108, -112, -116, -120, -124, -128, -132, -136, -139, -143, -147, -150, -154, -158, -161, -165, -168, -171, -175, -178, -181, -184, -187, -190, -193, -196, -199, -202, -204, -207, -210, -212, -215, -217, -219, -222, -224, -226, -228, -230, -232, -234, -236, -237, -239, -241, -242, -243, -245, -246, -247, -248, -249, -250, -251, -252, -253, -254, -254, -255, -255, -255, -256, -256, -256, -256, -256, -256, -256, -255, -255, -255, -254, -254, -253, -252, -251, -250, -249, -248, -247, -246, -245, -243, -242, -241, -239, -237, -236, -234, -232, -230, -228, -226, -224, -222, -219, -217, -215, -212, -210, -207, -204, -202, -199, -196, -193, -190, -187, -184, -181, -178, -175, -171, -168, -165, -161, -158, -154, -150, -147, -143, -139, -136, -132, -128, -124, -120, -116, -112, -108, -104, -100, -96, -92, -88, -83, -79, -75, -71, -66, -62, -58, -53, -49, -44, -40, -36, -31, -27, -22, -18, -13, -9, -4, 0, 4, 9, 13, 18, 22, 27, 31, 36, 40, 44, 49, 53, 58, 62, 66, 71, 75, 79, 83, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 139, 143, 147, 150, 154, 158, 161, 165, 168, 171, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 204, 207, 210, 212, 215, 217, 219, 222, 224, 226, 228, 230, 232, 234, 236, 237, 239, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 254, 255, 255, 255, 256, 256, 256, }; // sin_tab=sin(2*PI*i/N)*pow(2,15) const int32_t cos_tab[1024]={ 32768,32767,32766,32762,32758,32753,32746,32738,32729,32718,32706,32693,32679,32664,32647,32629, 32610,32590,32568,32546,32522,32496,32470,32442,32413,32383,32352,32319,32286,32251,32214,32177, 32138,32099,32058,32015,31972,31927,31881,31834,31786,31737,31686,31634,31581,31527,31471,31415, 31357,31298,31238,31177,31114,31050,30986,30920,30853,30784,30715,30644,30572,30499,30425,30350, 30274,30196,30118,30038,29957,29875,29792,29707,29622,29535,29448,29359,29269,29178,29086,28993, 28899,28803,28707,28610,28511,28411,28311,28209,28106,28002,27897,27791,27684,27576,27467,27357, 27246,27133,27020,26906,26791,26674,26557,26439,26320,26199,26078,25956,25833,25708,25583,25457, 25330,25202,25073,24943,24812,24680,24548,24414,24279,24144,24008,23870,23732,23593,23453,23312, 23170,23028,22884,22740,22595,22449,22302,22154,22006,21856,21706,21555,21403,21251,21097,20943, 20788,20632,20475,20318,20160,20001,19841,19681,19520,19358,19195,19032,18868,18703,18538,18372, 18205,18037,17869,17700,17531,17361,17190,17018,16846,16673,16500,16326,16151,15976,15800,15624, 15447,15269,15091,14912,14733,14553,14373,14192,14010,13828,13646,13463,13279,13095,12910,12725, 12540,12354,12167,11980,11793,11605,11417,11228,11039,10850,10660,10469,10279,10088,9896,9704, 9512,9319,9127,8933,8740,8546,8351,8157,7962,7767,7571,7376,7180,6983,6787,6590, 6393,6195,5998,5800,5602,5404,5205,5007,4808,4609,4410,4211,4011,3812,3612,3412, 3212,3012,2811,2611,2411,2210,2009,1809,1608,1407,1206,1005,804,603,402,201, 0,-201,-402,-603,-804,-1005,-1206,-1407,-1608,-1809,-2009,-2210,-2411,-2611,-2811,-3012, -3212,-3412,-3612,-3812,-4011,-4211,-4410,-4609,-4808,-5007,-5205,-5404,-5602,-5800,-5998,-6195, -6393,-6590,-6787,-6983,-7180,-7376,-7571,-7767,-7962,-8157,-8351,-8546,-8740,-8933,-9127,-9319, -9512,-9704,-9896,-10088,-10279,-10469,-10660,-10850,-11039,-11228,-11417,-11605,-11793,-11980,-12167,-12354, -12540,-12725,-12910,-13095,-13279,-13463,-13646,-13828,-14010,-14192,-14373,-14553,-14733,-14912,-15091,-15269, -15447,-15624,-15800,-15976,-16151,-16326,-16500,-16673,-16846,-17018,-17190,-17361,-17531,-17700,-17869,-18037, -18205,-18372,-18538,-18703,-18868,-19032,-19195,-19358,-19520,-19681,-19841,-20001,-20160,-20318,-20475,-20632, -20788,-20943,-21097,-21251,-21403,-21555,-21706,-21856,-22006,-22154,-22302,-22449,-22595,-22740,-22884,-23028, -23170,-23312,-23453,-23593,-23732,-23870,-24008,-24144,-24279,-24414,-24548,-24680,-24812,-24943,-25073,-25202, -25330,-25457,-25583,-25708,-25833,-25956,-26078,-26199,-26320,-26439,-26557,-26674,-26791,-26906,-27020,-27133, -27246,-27357,-27467,-27576,-27684,-27791,-27897,-28002,-28106,-28209,-28311,-28411,-28511,-28610,-28707,-28803, -28899,-28993,-29086,-29178,-29269,-29359,-29448,-29535,-29622,-29707,-29792,-29875,-29957,-30038,-30118,-30196, -30274,-30350,-30425,-30499,-30572,-30644,-30715,-30784,-30853,-30920,-30986,-31050,-31114,-31177,-31238,-31298, -31357,-31415,-31471,-31527,-31581,-31634,-31686,-31737,-31786,-31834,-31881,-31927,-31972,-32015,-32058,-32099, -32138,-32177,-32214,-32251,-32286,-32319,-32352,-32383,-32413,-32442,-32470,-32496,-32522,-32546,-32568,-32590, -32610,-32629,-32647,-32664,-32679,-32693,-32706,-32718,-32729,-32738,-32746,-32753,-32758,-32762,-32766,-32767, -32768,-32767,-32766,-32762,-32758,-32753,-32746,-32738,-32729,-32718,-32706,-32693,-32679,-32664,-32647,-32629, -32610,-32590,-32568,-32546,-32522,-32496,-32470,-32442,-32413,-32383,-32352,-32319,-32286,-32251,-32214,-32177, -32138,-32099,-32058,-32015,-31972,-31927,-31881,-31834,-31786,-31737,-31686,-31634,-31581,-31527,-31471,-31415, -31357,-31298,-31238,-31177,-31114,-31050,-30986,-30920,-30853,-30784,-30715,-30644,-30572,-30499,-30425,-30350, -30274,-30196,-30118,-30038,-29957,-29875,-29792,-29707,-29622,-29535,-29448,-29359,-29269,-29178,-29086,-28993, -28899,-28803,-28707,-28610,-28511,-28411,-28311,-28209,-28106,-28002,-27897,-27791,-27684,-27576,-27467,-27357, -27246,-27133,-27020,-26906,-26791,-26674,-26557,-26439,-26320,-26199,-26078,-25956,-25833,-25708,-25583,-25457, -25330,-25202,-25073,-24943,-24812,-24680,-24548,-24414,-24279,-24144,-24008,-23870,-23732,-23593,-23453,-23312, -23170,-23028,-22884,-22740,-22595,-22449,-22302,-22154,-22006,-21856,-21706,-21555,-21403,-21251,-21097,-20943, -20788,-20632,-20475,-20318,-20160,-20001,-19841,-19681,-19520,-19358,-19195,-19032,-18868,-18703,-18538,-18372, -18205,-18037,-17869,-17700,-17531,-17361,-17190,-17018,-16846,-16673,-16500,-16326,-16151,-15976,-15800,-15624, -15447,-15269,-15091,-14912,-14733,-14553,-14373,-14192,-14010,-13828,-13646,-13463,-13279,-13095,-12910,-12725, -12540,-12354,-12167,-11980,-11793,-11605,-11417,-11228,-11039,-10850,-10660,-10469,-10279,-10088,-9896,-9704, -9512,-9319,-9127,-8933,-8740,-8546,-8351,-8157,-7962,-7767,-7571,-7376,-7180,-6983,-6787,-6590, -6393,-6195,-5998,-5800,-5602,-5404,-5205,-5007,-4808,-4609,-4410,-4211,-4011,-3812,-3612,-3412, -3212,-3012,-2811,-2611,-2411,-2210,-2009,-1809,-1608,-1407,-1206,-1005,-804,-603,-402,-201, 0,201,402,603,804,1005,1206,1407,1608,1809,2009,2210,2411,2611,2811,3012, 3212,3412,3612,3812,4011,4211,4410,4609,4808,5007,5205,5404,5602,5800,5998,6195, 6393,6590,6787,6983,7180,7376,7571,7767,7962,8157,8351,8546,8740,8933,9127,9319, 9512,9704,9896,10088,10279,10469,10660,10850,11039,11228,11417,11605,11793,11980,12167,12354, 12540,12725,12910,13095,13279,13463,13646,13828,14010,14192,14373,14553,14733,14912,15091,15269, 15447,15624,15800,15976,16151,16326,16500,16673,16846,17018,17190,17361,17531,17700,17869,18037, 18205,18372,18538,18703,18868,19032,19195,19358,19520,19681,19841,20001,20160,20318,20475,20632, 20788,20943,21097,21251,21403,21555,21706,21856,22006,22154,22302,22449,22595,22740,22884,23028, 23170,23312,23453,23593,23732,23870,24008,24144,24279,24414,24548,24680,24812,24943,25073,25202, 25330,25457,25583,25708,25833,25956,26078,26199,26320,26439,26557,26674,26791,26906,27020,27133, 27246,27357,27467,27576,27684,27791,27897,28002,28106,28209,28311,28411,28511,28610,28707,28803, 28899,28993,29086,29178,29269,29359,29448,29535,29622,29707,29792,29875,29957,30038,30118,30196, 30274,30350,30425,30499,30572,30644,30715,30784,30853,30920,30986,31050,31114,31177,31238,31298, 31357,31415,31471,31527,31581,31634,31686,31737,31786,31834,31881,31927,31972,32015,32058,32099, 32138,32177,32214,32251,32286,32319,32352,32383,32413,32442,32470,32496,32522,32546,32568,32590, 32610,32629,32647,32664,32679,32693,32706,32718,32729,32738,32746,32753,32758,32762,32766,32767, }; const int32_t sin_tab[1024]={ 0, 201,402, 603,804, 1005,1206,1407,1608,1809,2009,2210,2411,2611,2811,3012, 3212,3412,3612,3812,4011,4211,4410,4609,4808,5007,5205,5404,5602,5800,5998,6195, 6393,6590,6787,6983,7180,7376,7571,7767,7962,8157,8351,8546,8740,8933,9127,9319, 9512,9704,9896,10088,10279,10469,10660,10850,11039,11228,11417,11605,11793,11980,12167,12354, 12540,12725,12910,13095,13279,13463,13646,13828,14010,14192,14373,14553,14733,14912,15091,15269, 15447,15624,15800,15976,16151,16326,16500,16673,16846,17018,17190,17361,17531,17700,17869,18037, 18205,18372,18538,18703,18868,19032,19195,19358,19520,19681,19841,20001,20160,20318,20475,20632, 20788,20943,21097,21251,21403,21555,21706,21856,22006,22154,22302,22449,22595,22740,22884,23028, 23170,23312,23453,23593,23732,23870,24008,24144,24279,24414,24548,24680,24812,24943,25073,25202, 25330,25457,25583,25708,25833,25956,26078,26199,26320,26439,26557,26674,26791,26906,27020,27133, 27246,27357,27467,27576,27684,27791,27897,28002,28106,28209,28311,28411,28511,28610,28707,28803, 28899,28993,29086,29178,29269,29359,29448,29535,29622,29707,29792,29875,29957,30038,30118,30196, 30274,30350,30425,30499,30572,30644,30715,30784,30853,30920,30986,31050,31114,31177,31238,31298, 31357,31415,31471,31527,31581,31634,31686,31737,31786,31834,31881,31927,31972,32015,32058,32099, 32138,32177,32214,32251,32286,32319,32352,32383,32413,32442,32470,32496,32522,32546,32568,32590, 32610,32629,32647,32664,32679,32693,32706,32718,32729,32738,32746,32753,32758,32762,32766,32767, 32768,32767,32766,32762,32758,32753,32746,32738,32729,32718,32706,32693,32679,32664,32647,32629, 32610,32590,32568,32546,32522,32496,32470,32442,32413,32383,32352,32319,32286,32251,32214,32177, 32138,32099,32058,32015,31972,31927,31881,31834,31786,31737,31686,31634,31581,31527,31471,31415, 31357,31298,31238,31177,31114,31050,30986,30920,30853,30784,30715,30644,30572,30499,30425,30350, 30274,30196,30118,30038,29957,29875,29792,29707,29622,29535,29448,29359,29269,29178,29086,28993, 28899,28803,28707,28610,28511,28411,28311,28209,28106,28002,27897,27791,27684,27576,27467,27357, 27246,27133,27020,26906,26791,26674,26557,26439,26320,26199,26078,25956,25833,25708,25583,25457, 25330,25202,25073,24943,24812,24680,24548,24414,24279,24144,24008,23870,23732,23593,23453,23312, 23170,23028,22884,22740,22595,22449,22302,22154,22006,21856,21706,21555,21403,21251,21097,20943, 20788,20632,20475,20318,20160,20001,19841,19681,19520,19358,19195,19032,18868,18703,18538,18372, 18205,18037,17869,17700,17531,17361,17190,17018,16846,16673,16500,16326,16151,15976,15800,15624, 15447,15269,15091,14912,14733,14553,14373,14192,14010,13828,13646,13463,13279,13095,12910,12725, 12540,12354,12167,11980,11793,11605,11417,11228,11039,10850,10660,10469,10279,10088,9896,9704, 9512,9319,9127,8933,8740,8546,8351,8157,7962,7767,7571,7376,7180,6983,6787,6590, 6393,6195,5998,5800,5602,5404,5205,5007,4808,4609,4410,4211,4011,3812,3612,3412, 3212,3012,2811,2611,2411,2210,2009,1809,1608,1407,1206,1005,804,603,402,201, 0,-201,-402,-603,-804,-1005,-1206,-1407,-1608,-1809,-2009,-2210,-2411,-2611,-2811,-3012, -3212,-3412,-3612,-3812,-4011,-4211,-4410,-4609,-4808,-5007,-5205,-5404,-5602,-5800,-5998,-6195, -6393,-6590,-6787,-6983,-7180,-7376,-7571,-7767,-7962,-8157,-8351,-8546,-8740,-8933,-9127,-9319, -9512,-9704,-9896,-10088,-10279,-10469,-10660,-10850,-11039,-11228,-11417,-11605,-11793,-11980,-12167,-12354, -12540,-12725,-12910,-13095,-13279,-13463,-13646,-13828,-14010,-14192,-14373,-14553,-14733,-14912,-15091,-15269, -15447,-15624,-15800,-15976,-16151,-16326,-16500,-16673,-16846,-17018,-17190,-17361,-17531,-17700,-17869,-18037, -18205,-18372,-18538,-18703,-18868,-19032,-19195,-19358,-19520,-19681,-19841,-20001,-20160,-20318,-20475,-20632, -20788,-20943,-21097,-21251,-21403,-21555,-21706,-21856,-22006,-22154,-22302,-22449,-22595,-22740,-22884,-23028, -23170,-23312,-23453,-23593,-23732,-23870,-24008,-24144,-24279,-24414,-24548,-24680,-24812,-24943,-25073,-25202, -25330,-25457,-25583,-25708,-25833,-25956,-26078,-26199,-26320,-26439,-26557,-26674,-26791,-26906,-27020,-27133, -27246,-27357,-27467,-27576,-27684,-27791,-27897,-28002,-28106,-28209,-28311,-28411,-28511,-28610,-28707,-28803, -28899,-28993,-29086,-29178,-29269,-29359,-29448,-29535,-29622,-29707,-29792,-29875,-29957,-30038,-30118,-30196, -30274,-30350,-30425,-30499,-30572,-30644,-30715,-30784,-30853,-30920,-30986,-31050,-31114,-31177,-31238,-31298, -31357,-31415,-31471,-31527,-31581,-31634,-31686,-31737,-31786,-31834,-31881,-31927,-31972,-32015,-32058,-32099, -32138,-32177,-32214,-32251,-32286,-32319,-32352,-32383,-32413,-32442,-32470,-32496,-32522,-32546,-32568,-32590, -32610,-32629,-32647,-32664,-32679,-32693,-32706,-32718,-32729,-32738,-32746,-32753,-32758,-32762,-32766,-32767, -32768,-32767,-32766,-32762,-32758,-32753,-32746,-32738,-32729,-32718,-32706,-32693,-32679,-32664,-32647,-32629, -32610,-32590,-32568,-32546,-32522,-32496,-32470,-32442,-32413,-32383,-32352,-32319,-32286,-32251,-32214,-32177, -32138,-32099,-32058,-32015,-31972,-31927,-31881,-31834,-31786,-31737,-31686,-31634,-31581,-31527,-31471,-31415, -31357,-31298,-31238,-31177,-31114,-31050,-30986,-30920,-30853,-30784,-30715,-30644,-30572,-30499,-30425,-30350, -30274,-30196,-30118,-30038,-29957,-29875,-29792,-29707,-29622,-29535,-29448,-29359,-29269,-29178,-29086,-28993, -28899,-28803,-28707,-28610,-28511,-28411,-28311,-28209,-28106,-28002,-27897,-27791,-27684,-27576,-27467,-27357, -27246,-27133,-27020,-26906,-26791,-26674,-26557,-26439,-26320,-26199,-26078,-25956,-25833,-25708,-25583,-25457, -25330,-25202,-25073,-24943,-24812,-24680,-24548,-24414,-24279,-24144,-24008,-23870,-23732,-23593,-23453,-23312, -23170,-23028,-22884,-22740,-22595,-22449,-22302,-22154,-22006,-21856,-21706,-21555,-21403,-21251,-21097,-20943, -20788,-20632,-20475,-20318,-20160,-20001,-19841,-19681,-19520,-19358,-19195,-19032,-18868,-18703,-18538,-18372, -18205,-18037,-17869,-17700,-17531,-17361,-17190,-17018,-16846,-16673,-16500,-16326,-16151,-15976,-15800,-15624, -15447,-15269,-15091,-14912,-14733,-14553,-14373,-14192,-14010,-13828,-13646,-13463,-13279,-13095,-12910,-12725, -12540,-12354,-12167,-11980,-11793,-11605,-11417,-11228,-11039,-10850,-10660,-10469,-10279,-10088,-9896,-9704, -9512,-9319,-9127,-8933,-8740,-8546,-8351,-8157,-7962,-7767,-7571,-7376,-7180,-6983,-6787,-6590, -6393,-6195,-5998,-5800,-5602,-5404,-5205,-5007,-4808,-4609,-4410,-4211,-4011,-3812,-3612,-3412, -3212,-3012,-2811,-2611,-2411,-2210,-2009,-1809,-1608,-1407,-1206,-1005,-804,-603,-402,-201, };