Path: chuka.playstation.co.uk!chuka.playstation.co.uk!news1.scei.co.jp!usenet From: "K.Tamura" Newsgroups: playstation.ny.test Subject: =?iso-2022-jp?B?GyRCJCokXiQxJTMhPCVKITwbKEo=?= Date: Sat, 27 Sep 1997 21:55:52 +0900 Organization: PlayStation Net Yarouze Lines: 82 Message-ID: <60ivvi$g44@news1.scei.co.jp> Reply-To: kouzou@ymg.urban.or.jp NNTP-Posting-Host: 202.231.136.59 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-WWWns-ID: <342D0253.77AF@ymg.urban.or.jp> X-Mailer: Mozilla 3.01 [ja] (Macintosh; I; PPC)  暇な人は関数ポインタのテーブル使う方式に  直して遊んでください(笑)  atanのテーブルは自分で作るべし。 int GetAngle( long dx, long dy ){ unsigned int index = 0; int angle; int distance; if ( dx == 0 ){ if ( dy < 0 ){ return (192); }else{ return (64); } } if ( dy == 0 ){ if ( dx < 0 ){ return (128); }else{ return (0); } } if ( dy < 0 ){ index |= 4; dy = - dy; } if ( dx < 0 ){ index |= 2; dx = -dx; } if ( dx < dy ) index |= 1; switch ( index ){ case 0:{ angle = atan_tbl[ (dy<<8)/dx ]; /* 0 */ break; } case 1:{ angle = 64 - atan_tbl[ (dx<<8)/dy ]; /* 1 */ break; } case 2:{ angle = 128 - atan_tbl[ (dy<<8)/dx ]; /* 3 */ break; } case 3:{ angle = 64 + atan_tbl[ (dx<<8)/dy ]; /* 2 */ break; } case 4:{ angle = 256 - atan_tbl[ (dy<<8)/dx ]; /* 7 */ break; } case 5:{ angle = 192 + atan_tbl[ (dx<<8)/dy ]; /* 6 */ break; } case 6:{ angle = 128 + atan_tbl[ (dy<<8)/dx ]; /* 4 */ break; } case 7:{ angle = 192 - atan_tbl[ (dx<<8)/dy ]; /* 5 */ break; } } return ( angle ); }