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