三角関数のテーブル引きのプログラムです
table.cpp@0:0cf44de8ff17, 2017-03-21 (annotated)
- Committer:
- ssaattww
- Date:
- Tue Mar 21 02:04:02 2017 +0000
- Revision:
- 0:0cf44de8ff17
- Child:
- 1:c3f079780229
??????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ssaattww | 0:0cf44de8ff17 | 1 | #include "math.h" |
ssaattww | 0:0cf44de8ff17 | 2 | #include "mbed.h" |
ssaattww | 0:0cf44de8ff17 | 3 | |
ssaattww | 0:0cf44de8ff17 | 4 | class table{ |
ssaattww | 0:0cf44de8ff17 | 5 | public: |
ssaattww | 0:0cf44de8ff17 | 6 | table(int times); |
ssaattww | 0:0cf44de8ff17 | 7 | ~table(); |
ssaattww | 0:0cf44de8ff17 | 8 | void SIN_table(void); |
ssaattww | 0:0cf44de8ff17 | 9 | void COS_table(void); |
ssaattww | 0:0cf44de8ff17 | 10 | void make_table(double (*fnc)(int)); |
ssaattww | 0:0cf44de8ff17 | 11 | double show(int num); |
ssaattww | 0:0cf44de8ff17 | 12 | double deg(double degree); |
ssaattww | 0:0cf44de8ff17 | 13 | double rad(double radian); |
ssaattww | 0:0cf44de8ff17 | 14 | private: |
ssaattww | 0:0cf44de8ff17 | 15 | double *ans; |
ssaattww | 0:0cf44de8ff17 | 16 | int number; |
ssaattww | 0:0cf44de8ff17 | 17 | }; |
ssaattww | 0:0cf44de8ff17 | 18 | table::table(int times){ |
ssaattww | 0:0cf44de8ff17 | 19 | number = times; |
ssaattww | 0:0cf44de8ff17 | 20 | } |
ssaattww | 0:0cf44de8ff17 | 21 | table::~table(){ |
ssaattww | 0:0cf44de8ff17 | 22 | free(ans); |
ssaattww | 0:0cf44de8ff17 | 23 | } |
ssaattww | 0:0cf44de8ff17 | 24 | void table::SIN_table(void){ |
ssaattww | 0:0cf44de8ff17 | 25 | ans = (double*)malloc(sizeof(double)*number+1); |
ssaattww | 0:0cf44de8ff17 | 26 | //ans = new double[sizeof(double)*number+1]; |
ssaattww | 0:0cf44de8ff17 | 27 | if(ans == NULL) exit(1); |
ssaattww | 0:0cf44de8ff17 | 28 | for(int i=0;i<number+1;i++){//[0]~[number] |
ssaattww | 0:0cf44de8ff17 | 29 | ans[i] = sin(M_PI*i*2.0/number); |
ssaattww | 0:0cf44de8ff17 | 30 | } |
ssaattww | 0:0cf44de8ff17 | 31 | } |
ssaattww | 0:0cf44de8ff17 | 32 | void table::COS_table(void){ |
ssaattww | 0:0cf44de8ff17 | 33 | ans = (double*)malloc(sizeof(double)*number+1); |
ssaattww | 0:0cf44de8ff17 | 34 | for(int i=0;i<number+1;i++){ |
ssaattww | 0:0cf44de8ff17 | 35 | ans[i] = cos(M_PI*i*2.0/number); |
ssaattww | 0:0cf44de8ff17 | 36 | } |
ssaattww | 0:0cf44de8ff17 | 37 | } |
ssaattww | 0:0cf44de8ff17 | 38 | void table::make_table(double (*fnc)(int)){ |
ssaattww | 0:0cf44de8ff17 | 39 | ans = (double*)malloc(sizeof(double)*number+1); |
ssaattww | 0:0cf44de8ff17 | 40 | for(int i=0;i<number+1;i++){ |
ssaattww | 0:0cf44de8ff17 | 41 | ans[i] = fnc(i); |
ssaattww | 0:0cf44de8ff17 | 42 | } |
ssaattww | 0:0cf44de8ff17 | 43 | } |
ssaattww | 0:0cf44de8ff17 | 44 | double table::show(int num){ |
ssaattww | 0:0cf44de8ff17 | 45 | return ans[num]; |
ssaattww | 0:0cf44de8ff17 | 46 | } |
ssaattww | 0:0cf44de8ff17 | 47 | double table::deg(double degree){ |
ssaattww | 0:0cf44de8ff17 | 48 | double sa_db=0.0; |
ssaattww | 0:0cf44de8ff17 | 49 | int sa_int=0; |
ssaattww | 0:0cf44de8ff17 | 50 | double degree_abs =0.0; |
ssaattww | 0:0cf44de8ff17 | 51 | int degree_int=0; |
ssaattww | 0:0cf44de8ff17 | 52 | if(degree<0) degree_abs = labs(degree); |
ssaattww | 0:0cf44de8ff17 | 53 | else degree_abs = degree; |
ssaattww | 0:0cf44de8ff17 | 54 | if(degree_abs>360){ |
ssaattww | 0:0cf44de8ff17 | 55 | degree_int = degree/360; |
ssaattww | 0:0cf44de8ff17 | 56 | degree = degree - degree_int*360; |
ssaattww | 0:0cf44de8ff17 | 57 | } |
ssaattww | 0:0cf44de8ff17 | 58 | if(degree<0) degree = degree+360; |
ssaattww | 0:0cf44de8ff17 | 59 | sa_db = number*0.5*degree/180; |
ssaattww | 0:0cf44de8ff17 | 60 | sa_int = sa_db; |
ssaattww | 0:0cf44de8ff17 | 61 | return ans[sa_int]; |
ssaattww | 0:0cf44de8ff17 | 62 | //return ans[sa_int]; |
ssaattww | 0:0cf44de8ff17 | 63 | //return sa_db; |
ssaattww | 0:0cf44de8ff17 | 64 | } |
ssaattww | 0:0cf44de8ff17 | 65 | double table::rad(double radian){ |
ssaattww | 0:0cf44de8ff17 | 66 | double sa_db; |
ssaattww | 0:0cf44de8ff17 | 67 | int sa_int; |
ssaattww | 0:0cf44de8ff17 | 68 | double radian_abs; |
ssaattww | 0:0cf44de8ff17 | 69 | int radian_int; |
ssaattww | 0:0cf44de8ff17 | 70 | radian = radian/M_PI; |
ssaattww | 0:0cf44de8ff17 | 71 | |
ssaattww | 0:0cf44de8ff17 | 72 | if(radian<0) radian_abs = labs(radian); |
ssaattww | 0:0cf44de8ff17 | 73 | else radian_abs = radian; |
ssaattww | 0:0cf44de8ff17 | 74 | |
ssaattww | 0:0cf44de8ff17 | 75 | if(radian_abs>2.0){ |
ssaattww | 0:0cf44de8ff17 | 76 | radian_int = radian/2.0; |
ssaattww | 0:0cf44de8ff17 | 77 | radian = radian - radian_int*2.0; |
ssaattww | 0:0cf44de8ff17 | 78 | } |
ssaattww | 0:0cf44de8ff17 | 79 | |
ssaattww | 0:0cf44de8ff17 | 80 | if(radian<0) radian = radian+2.0; |
ssaattww | 0:0cf44de8ff17 | 81 | |
ssaattww | 0:0cf44de8ff17 | 82 | sa_db = number*radian*0.5; |
ssaattww | 0:0cf44de8ff17 | 83 | sa_int = sa_db; |
ssaattww | 0:0cf44de8ff17 | 84 | sa_db = ans[sa_int]; |
ssaattww | 0:0cf44de8ff17 | 85 | return sa_db; |
ssaattww | 0:0cf44de8ff17 | 86 | } |