⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imath.cpp

📁 liu7788414
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  Name     : IMath from IMath.cpp
*  Part of  : Game
*  Created  : 2004-09-17 by Chen Yong
*  Implementation notes:
*
*     Modifyed from the interger math  form highgear.     
*  Version  :
*  Copyright: Gameloft S.A.
* ============================================================================
*/
#include "Sysdef.h"
#include "imath.h"
#include "fsqrt.h"


const int TSIN[ANGLE2PI] = {
	0,50,100,150,201,251,301,351,402,452,502,552,603,653,703,753,
	803,854,904,954,1004,1054,1105,1155,1205,1255,1305,1355,1405,1455,1505,1555,
	1605,1655,1705,1755,1805,1855,1905,1955,2005,2055,2105,2155,2204,2254,2304,2354,
	2404,2453,2503,2553,2602,2652,2701,2751,2801,2850,2900,2949,2998,3048,3097,3147,
	3196,3245,3294,3344,3393,3442,3491,3540,3589,3638,3687,3736,3785,3834,3883,3932,
	3980,4029,4078,4127,4175,4224,4272,4321,4369,4418,4466,4514,4563,4611,4659,4707,
	4756,4804,4852,4900,4948,4995,5043,5091,5139,5187,5234,5282,5329,5377,5424,5472,
	5519,5566,5614,5661,5708,5755,5802,5849,5896,5943,5990,6036,6083,6130,6176,6223,
	6269,6316,6362,6408,6455,6501,6547,6593,6639,6685,6731,6777,6822,6868,6914,6959,
	7005,7050,7095,7141,7186,7231,7276,7321,7366,7411,7456,7500,7545,7590,7634,7678,
	7723,7767,7811,7856,7900,7944,7988,8031,8075,8119,8162,8206,8249,8293,8336,8379,
	8423,8466,8509,8552,8594,8637,8680,8722,8765,8807,8850,8892,8934,8976,9018,9060,
	9102,9144,9185,9227,9268,9310,9351,9392,9434,9475,9516,9556,9597,9638,9679,9719,
	9759,9800,9840,9880,9920,9960,10000,10040,10079,10119,10159,10198,10237,10276,10315,10354,
	10393,10432,10471,10510,10548,10586,10625,10663,10701,10739,10777,10815,10853,10890,10928,10965,
	11002,11040,11077,11114,11150,11187,11224,11260,11297,11333,11370,11406,11442,11478,11513,11549,
	11585,11620,11656,11691,11726,11761,11796,11831,11866,11900,11935,11969,12003,12037,12072,12105,
	12139,12173,12207,12240,12273,12307,12340,12373,12406,12438,12471,12504,12536,12568,12600,12633,
	12665,12696,12728,12760,12791,12822,12854,12885,12916,12947,12977,13008,13038,13069,13099,13129,
	13159,13189,13219,13249,13278,13307,13337,13366,13395,13424,13452,13481,13510,13538,13566,13594,
	13622,13650,13678,13705,13733,13760,13788,13815,13842,13868,13895,13922,13948,13974,14001,14027,
	14053,14078,14104,14129,14155,14180,14205,14230,14255,14280,14304,14329,14353,14377,14401,14425,
	14449,14473,14496,14519,14543,14566,14589,14611,14634,14657,14679,14701,14723,14745,14767,14789,
	14810,14832,14853,14874,14895,14916,14937,14957,14978,14998,15018,15038,15058,15078,15098,15117,
	15136,15156,15175,15193,15212,15231,15249,15267,15286,15304,15322,15339,15357,15374,15392,15409,
	15426,15443,15459,15476,15492,15509,15525,15541,15557,15572,15588,15603,15618,15634,15649,15663,
	15678,15693,15707,15721,15735,15749,15763,15777,15790,15803,15817,15830,15842,15855,15868,15880,
	15892,15905,15917,15928,15940,15952,15963,15974,15985,15996,16007,16018,16028,16039,16049,16059,
	16069,16078,16088,16097,16107,16116,16125,16134,16142,16151,16159,16167,16175,16183,16191,16199,
	16206,16213,16221,16228,16234,16241,16248,16254,16260,16266,16272,16278,16284,16289,16294,16300,
	16305,16309,16314,16319,16323,16327,16331,16335,16339,16343,16346,16350,16353,16356,16359,16361,
	16364,16366,16368,16370,16372,16374,16376,16377,16379,16380,16381,16382,16382,16383,16383,16383,
	16384,16383,16383,16383,16382,16382,16381,16380,16379,16377,16376,16374,16372,16370,16368,16366,
	16364,16361,16359,16356,16353,16350,16346,16343,16339,16335,16331,16327,16323,16319,16314,16309,
	16305,16300,16294,16289,16284,16278,16272,16266,16260,16254,16248,16241,16234,16228,16221,16213,
	16206,16199,16191,16183,16175,16167,16159,16151,16142,16134,16125,16116,16107,16097,16088,16078,
	16069,16059,16049,16039,16028,16018,16007,15996,15985,15974,15963,15952,15940,15928,15917,15905,
	15892,15880,15868,15855,15842,15830,15817,15803,15790,15777,15763,15749,15735,15721,15707,15693,
	15678,15663,15649,15634,15618,15603,15588,15572,15557,15541,15525,15509,15492,15476,15459,15443,
	15426,15409,15392,15374,15357,15339,15322,15304,15286,15267,15249,15231,15212,15193,15175,15156,
	15136,15117,15098,15078,15058,15038,15018,14998,14978,14957,14937,14916,14895,14874,14853,14832,
	14810,14789,14767,14745,14723,14701,14679,14657,14634,14611,14589,14566,14543,14519,14496,14473,
	14449,14425,14401,14377,14353,14329,14304,14280,14255,14230,14205,14180,14155,14129,14104,14078,
	14053,14027,14001,13974,13948,13922,13895,13868,13842,13815,13788,13760,13733,13705,13678,13650,
	13622,13594,13566,13538,13510,13481,13452,13424,13395,13366,13337,13307,13278,13249,13219,13189,
	13159,13129,13099,13069,13038,13008,12977,12947,12916,12885,12854,12822,12791,12760,12728,12696,
	12665,12633,12600,12568,12536,12504,12471,12438,12406,12373,12340,12307,12273,12240,12207,12173,
	12139,12105,12072,12037,12003,11969,11935,11900,11866,11831,11796,11761,11726,11691,11656,11620,
	11585,11549,11513,11478,11442,11406,11370,11333,11297,11260,11224,11187,11150,11114,11077,11040,
	11002,10965,10928,10890,10853,10815,10777,10739,10701,10663,10625,10586,10548,10510,10471,10432,
	10393,10354,10315,10276,10237,10198,10159,10119,10079,10040,10000,9960,9920,9880,9840,9800,
	9759,9719,9679,9638,9597,9556,9516,9475,9434,9392,9351,9310,9268,9227,9185,9144,
	9102,9060,9018,8976,8934,8892,8850,8807,8765,8722,8680,8637,8594,8552,8509,8466,
	8423,8379,8336,8293,8249,8206,8162,8119,8075,8031,7988,7944,7900,7856,7811,7767,
	7723,7678,7634,7590,7545,7500,7456,7411,7366,7321,7276,7231,7186,7141,7095,7050,
	7005,6959,6914,6868,6822,6777,6731,6685,6639,6593,6547,6501,6455,6408,6362,6316,
	6269,6223,6176,6130,6083,6036,5990,5943,5896,5849,5802,5755,5708,5661,5614,5566,
	5519,5472,5424,5377,5329,5282,5234,5187,5139,5091,5043,4995,4948,4900,4852,4804,
	4756,4707,4659,4611,4563,4514,4466,4418,4369,4321,4272,4224,4175,4127,4078,4029,
	3980,3932,3883,3834,3785,3736,3687,3638,3589,3540,3491,3442,3393,3344,3294,3245,
	3196,3147,3097,3048,2998,2949,2900,2850,2801,2751,2701,2652,2602,2553,2503,2453,
	2404,2354,2304,2254,2204,2155,2105,2055,2005,1955,1905,1855,1805,1755,1705,1655,
	1605,1555,1505,1455,1405,1355,1305,1255,1205,1155,1105,1054,1004,954,904,854,
	803,753,703,653,603,552,502,452,402,351,301,251,201,150,100,50,
	0,-50,-100,-150,-201,-251,-301,-351,-402,-452,-502,-552,-603,-653,-703,-753,
	-803,-854,-904,-954,-1004,-1054,-1105,-1155,-1205,-1255,-1305,-1355,-1405,-1455,-1505,-1555,
	-1605,-1655,-1705,-1755,-1805,-1855,-1905,-1955,-2005,-2055,-2105,-2155,-2204,-2254,-2304,-2354,
	-2404,-2453,-2503,-2553,-2602,-2652,-2701,-2751,-2801,-2850,-2900,-2949,-2998,-3048,-3097,-3147,
	-3196,-3245,-3294,-3344,-3393,-3442,-3491,-3540,-3589,-3638,-3687,-3736,-3785,-3834,-3883,-3932,
	-3980,-4029,-4078,-4127,-4175,-4224,-4272,-4321,-4369,-4418,-4466,-4514,-4563,-4611,-4659,-4707,
	-4756,-4804,-4852,-4900,-4948,-4995,-5043,-5091,-5139,-5187,-5234,-5282,-5329,-5377,-5424,-5472,
	-5519,-5566,-5614,-5661,-5708,-5755,-5802,-5849,-5896,-5943,-5990,-6036,-6083,-6130,-6176,-6223,
	-6269,-6316,-6362,-6408,-6455,-6501,-6547,-6593,-6639,-6685,-6731,-6777,-6822,-6868,-6914,-6959,
	-7005,-7050,-7095,-7141,-7186,-7231,-7276,-7321,-7366,-7411,-7456,-7500,-7545,-7590,-7634,-7678,
	-7723,-7767,-7811,-7856,-7900,-7944,-7988,-8031,-8075,-8119,-8162,-8206,-8249,-8293,-8336,-8379,
	-8423,-8466,-8509,-8552,-8594,-8637,-8680,-8722,-8765,-8807,-8850,-8892,-8934,-8976,-9018,-9060,
	-9102,-9144,-9185,-9227,-9268,-9310,-9351,-9392,-9434,-9475,-9516,-9556,-9597,-9638,-9679,-9719,
	-9759,-9800,-9840,-9880,-9920,-9960,-10000,-10040,-10079,-10119,-10159,-10198,-10237,-10276,-10315,-10354,
	-10393,-10432,-10471,-10510,-10548,-10586,-10625,-10663,-10701,-10739,-10777,-10815,-10853,-10890,-10928,-10965,
	-11002,-11040,-11077,-11114,-11150,-11187,-11224,-11260,-11297,-11333,-11370,-11406,-11442,-11478,-11513,-11549,
	-11585,-11620,-11656,-11691,-11726,-11761,-11796,-11831,-11866,-11900,-11935,-11969,-12003,-12037,-12072,-12105,
	-12139,-12173,-12207,-12240,-12273,-12307,-12340,-12373,-12406,-12438,-12471,-12504,-12536,-12568,-12600,-12633,
	-12665,-12696,-12728,-12760,-12791,-12822,-12854,-12885,-12916,-12947,-12977,-13008,-13038,-13069,-13099,-13129,
	-13159,-13189,-13219,-13249,-13278,-13307,-13337,-13366,-13395,-13424,-13452,-13481,-13510,-13538,-13566,-13594,
	-13622,-13650,-13678,-13705,-13733,-13760,-13788,-13815,-13842,-13868,-13895,-13922,-13948,-13974,-14001,-14027,
	-14053,-14078,-14104,-14129,-14155,-14180,-14205,-14230,-14255,-14280,-14304,-14329,-14353,-14377,-14401,-14425,
	-14449,-14473,-14496,-14519,-14543,-14566,-14589,-14611,-14634,-14657,-14679,-14701,-14723,-14745,-14767,-14789,
	-14810,-14832,-14853,-14874,-14895,-14916,-14937,-14957,-14978,-14998,-15018,-15038,-15058,-15078,-15098,-15117,
	-15136,-15156,-15175,-15193,-15212,-15231,-15249,-15267,-15286,-15304,-15322,-15339,-15357,-15374,-15392,-15409,
	-15426,-15443,-15459,-15476,-15492,-15509,-15525,-15541,-15557,-15572,-15588,-15603,-15618,-15634,-15649,-15663,
	-15678,-15693,-15707,-15721,-15735,-15749,-15763,-15777,-15790,-15803,-15817,-15830,-15842,-15855,-15868,-15880,
	-15892,-15905,-15917,-15928,-15940,-15952,-15963,-15974,-15985,-15996,-16007,-16018,-16028,-16039,-16049,-16059,
	-16069,-16078,-16088,-16097,-16107,-16116,-16125,-16134,-16142,-16151,-16159,-16167,-16175,-16183,-16191,-16199,
	-16206,-16213,-16221,-16228,-16234,-16241,-16248,-16254,-16260,-16266,-16272,-16278,-16284,-16289,-16294,-16300,
	-16305,-16309,-16314,-16319,-16323,-16327,-16331,-16335,-16339,-16343,-16346,-16350,-16353,-16356,-16359,-16361,
	-16364,-16366,-16368,-16370,-16372,-16374,-16376,-16377,-16379,-16380,-16381,-16382,-16382,-16383,-16383,-16383,
	-16384,-16383,-16383,-16383,-16382,-16382,-16381,-16380,-16379,-16377,-16376,-16374,-16372,-16370,-16368,-16366,
	-16364,-16361,-16359,-16356,-16353,-16350,-16346,-16343,-16339,-16335,-16331,-16327,-16323,-16319,-16314,-16309,
	-16305,-16300,-16294,-16289,-16284,-16278,-16272,-16266,-16260,-16254,-16248,-16241,-16234,-16228,-16221,-16213,
	-16206,-16199,-16191,-16183,-16175,-16167,-16159,-16151,-16142,-16134,-16125,-16116,-16107,-16097,-16088,-16078,
	-16069,-16059,-16049,-16039,-16028,-16018,-16007,-15996,-15985,-15974,-15963,-15952,-15940,-15928,-15917,-15905,
	-15892,-15880,-15868,-15855,-15842,-15830,-15817,-15803,-15790,-15777,-15763,-15749,-15735,-15721,-15707,-15693,
	-15678,-15663,-15649,-15634,-15618,-15603,-15588,-15572,-15557,-15541,-15525,-15509,-15492,-15476,-15459,-15443,
	-15426,-15409,-15392,-15374,-15357,-15339,-15322,-15304,-15286,-15267,-15249,-15231,-15212,-15193,-15175,-15156,
	-15136,-15117,-15098,-15078,-15058,-15038,-15018,-14998,-14978,-14957,-14937,-14916,-14895,-14874,-14853,-14832,
	-14810,-14789,-14767,-14745,-14723,-14701,-14679,-14657,-14634,-14611,-14589,-14566,-14543,-14519,-14496,-14473,
	-14449,-14425,-14401,-14377,-14353,-14329,-14304,-14280,-14255,-14230,-14205,-14180,-14155,-14129,-14104,-14078,
	-14053,-14027,-14001,-13974,-13948,-13922,-13895,-13868,-13842,-13815,-13788,-13760,-13733,-13705,-13678,-13650,
	-13622,-13594,-13566,-13538,-13510,-13481,-13452,-13424,-13395,-13366,-13337,-13307,-13278,-13249,-13219,-13189,
	-13159,-13129,-13099,-13069,-13038,-13008,-12977,-12947,-12916,-12885,-12854,-12822,-12791,-12760,-12728,-12696,
	-12665,-12633,-12600,-12568,-12536,-12504,-12471,-12438,-12406,-12373,-12340,-12307,-12273,-12240,-12207,-12173,
	-12139,-12105,-12072,-12037,-12003,-11969,-11935,-11900,-11866,-11831,-11796,-11761,-11726,-11691,-11656,-11620,
	-11585,-11549,-11513,-11478,-11442,-11406,-11370,-11333,-11297,-11260,-11224,-11187,-11150,-11114,-11077,-11040,
	-11002,-10965,-10928,-10890,-10853,-10815,-10777,-10739,-10701,-10663,-10625,-10586,-10548,-10510,-10471,-10432,
	-10393,-10354,-10315,-10276,-10237,-10198,-10159,-10119,-10079,-10040,-10000,-9960,-9920,-9880,-9840,-9800,
	-9759,-9719,-9679,-9638,-9597,-9556,-9516,-9475,-9434,-9392,-9351,-9310,-9268,-9227,-9185,-9144,
	-9102,-9060,-9018,-8976,-8934,-8892,-8850,-8807,-8765,-8722,-8680,-8637,-8594,-8552,-8509,-8466,
	-8423,-8379,-8336,-8293,-8249,-8206,-8162,-8119,-8075,-8031,-7988,-7944,-7900,-7856,-7811,-7767,
	-7723,-7678,-7634,-7590,-7545,-7500,-7456,-7411,-7366,-7321,-7276,-7231,-7186,-7141,-7095,-7050,
	-7005,-6959,-6914,-6868,-6822,-6777,-6731,-6685,-6639,-6593,-6547,-6501,-6455,-6408,-6362,-6316,
	-6269,-6223,-6176,-6130,-6083,-6036,-5990,-5943,-5896,-5849,-5802,-5755,-5708,-5661,-5614,-5566,
	-5519,-5472,-5424,-5377,-5329,-5282,-5234,-5187,-5139,-5091,-5043,-4995,-4948,-4900,-4852,-4804,
	-4756,-4707,-4659,-4611,-4563,-4514,-4466,-4418,-4369,-4321,-4272,-4224,-4175,-4127,-4078,-4029,
	-3980,-3932,-3883,-3834,-3785,-3736,-3687,-3638,-3589,-3540,-3491,-3442,-3393,-3344,-3294,-3245,
	-3196,-3147,-3097,-3048,-2998,-2949,-2900,-2850,-2801,-2751,-2701,-2652,-2602,-2553,-2503,-2453,
	-2404,-2354,-2304,-2254,-2204,-2155,-2105,-2055,-2005,-1955,-1905,-1855,-1805,-1755,-1705,-1655,
	-1605,-1555,-1505,-1455,-1405,-1355,-1305,-1255,-1205,-1155,-1105,-1054,-1004,-954,-904,-854,
	-803,-753,-703,-653,-603,-552,-502,-452,-402,-351,-301,-251,-201,-150,-100,-50
};

const int AtanTab[ATAN_SIZE + 1]={
	0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 
		10, 10, 11, 12, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 
		20, 20, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 
		30, 31, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 38, 39, 39, 
		40, 41, 41, 42, 43, 43, 44, 44, 45, 46, 46, 47, 48, 48, 49, 49, 
		50, 51, 51, 52, 53, 53, 54, 54, 55, 56, 56, 57, 57, 58, 59, 59, 
		60, 61, 61, 62, 62, 63, 64, 64, 65, 65, 66, 67, 67, 68, 68, 69, 
		70, 70, 71, 72, 72, 73, 73, 74, 75, 75, 76, 76, 77, 78, 78, 79, 
		79, 80, 81, 81, 82, 82, 83, 84, 84, 85, 85, 86, 87, 87, 88, 88, 
		89, 89, 90, 91, 91, 92, 92, 93, 94, 94, 95, 95, 96, 96, 97, 98, 
		98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 104, 105, 105, 106, 106, 107, 
		107, 108, 109, 109, 110, 110, 111, 111, 112, 113, 113, 114, 114, 115, 115, 116, 
		116, 117, 118, 118, 119, 119, 120, 120, 121, 121, 122, 123, 123, 124, 124, 125, 
		125, 126, 126, 127, 127, 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 
		134, 134, 135, 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 
		142, 143, 143, 144, 144, 145, 145, 146, 147, 147, 148, 148, 149, 149, 150, 150, 
		151, 151, 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, 158, 
		159, 159, 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, 166, 
		167, 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, 
		174, 175, 175, 176, 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 
		182, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, 187, 187, 187, 188, 188, 
		189, 189, 190, 190, 191, 191, 191, 192, 192, 193, 193, 194, 194, 195, 195, 195, 
		196, 196, 197, 197, 198, 198, 198, 199, 199, 200, 200, 201, 201, 201, 202, 202, 
		203, 203, 203, 204, 204, 205, 205, 206, 206, 206, 207, 207, 208, 208, 208, 209, 
		209, 210, 210, 210, 211, 211, 212, 212, 212, 213, 213, 214, 214, 214, 215, 215, 
		216, 216, 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, 
		222, 222, 223, 223, 223, 224, 224, 225, 225, 225, 226, 226, 226, 227, 227, 228, 
		228, 228, 229, 229, 229, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, 233, 
		234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 
		239, 240, 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 
		245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 
		250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255, 255, 255, 
		256
};

// inverse trigo
#define ATN_ADJUST 0                 // round value to adjust (0 to disable, 1 to enable)
int Atan2i(int x, int y)
{
  if (x == 0)
  {
    if (y>=0) 
      return ANGLE2PI/4;
    else
      return ANGLE2PI*3/4;
  }

  int Index;
  if (x>0)
  {
    if (y>=0)
    {
      if (x>=y)
      {
        Index = (y*ATAN_SIZE)/x;
        return AtanTab[Index];
      }
      else
      {
        Index = (x*ATAN_SIZE)/y;
        return ANGLE2PI/4 - AtanTab[Index];
      }
    }
    else
    {
      y = -y;
      if (x>=y)
      {
        Index = (y*ATAN_SIZE)/x;
        return ANGLE2PI - AtanTab[Index];
      }
      else
      {
        Index = (x*ATAN_SIZE)/y;
        return ANGLE2PI*3/4 + AtanTab[Index];
      }
    }
  }
  else
  {
    x = -x;
    if (y>=0)
    {
      if (x>=y)
      {
        Index = (y*ATAN_SIZE)/x;
        return ANGLE2PI/2 - AtanTab[Index];
      }
      else
      {
        Index = (x*ATAN_SIZE)/y;
        return ANGLE2PI/4 + AtanTab[Index];
      }
    }
    else
    {
      y = -y;
      if (x>=y)
      {
        Index = (y*ATAN_SIZE)/x;
        return ANGLE2PI/2 + AtanTab[Index];
      }
      else
      {
        Index = (x*ATAN_SIZE)/y;
        return ANGLE2PI*3/4 - AtanTab[Index];
      }
    }
  }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -