三角関数のテーブル引きのプログラムです

Committer:
ssaattww
Date:
Tue Mar 21 02:44:35 2017 +0000
Revision:
2:c0175d45d388
Parent:
1:c3f079780229
????????????

Who changed what in which revision?

UserRevisionLine numberNew 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 }