Các hàm tính lượng giác trong Arduino: acos(arcos), asin(arcsin), atan(arctan), atan2, cosh, sinh, tanh

Mô tả dự án: 

Bài viết này tiếp tục bổ xung các tập lệnh quan trọng trong tính toán lượng giác: acos(arcos), asin( arcsin), atan(arctan), atan2, cosh, sinh, tanh. 

Tóm tắt kiến thức liên quan.

Bảng giá trị lượng giác

Biểu thức của các hàm hyperbolic

MACRO

Các góc đặc biệt được định nghĩa :

Macro
Giá trị
PI (số pi)
3,141592653589793..
TWO_PI
2*Pi=2x3,141592653589793..
HALF_PI Pi/2=1.57079632679489661923

Ví dụ

double x = PI;
void setup()
{
    Serial.begin(9600);
    Serial.println(x, 10); // lấy 10 số phần thập phân
    //x=3.1415927410
}
void loop() {}

Hàm asin( x)

Cấu trúc

double asin(double x)
  • Trả về arcsin của x (giá trị radian)
  • Kiểu tham trị x : double hoặc float
  • Kiểu trả về: double.

Ví dụ

double Goc;
double Sin = 0.86602; //  Sin(Goc)=(căn 3)/2
void setup()
{
    Serial.begin(9600);
    Goc = asin(Sin);
    Serial.println(Goc, 5); // lấy 5 số phần thập phân
    //Goc=1.04719
}
void loop() {}

Hàm acos(x)

Cấu trúc

double acos(double x)
  • Trả về arcos của x (giá trị radian)
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.

Ví dụ

double Goc;
double Cos = 0.86602; //  cos(Goc)=(căn 3)/2
void setup()
{
    Serial.begin(9600);
    Goc = acos(Cos);
    Serial.println(Goc, 5); // lấy 5 số phần thập phân
    //Goc=0.52361
}
void loop() { }

 

Hàm atan(x)

Cấu trúc

double atan(double x)
  • Trả về arctan của x (giá trị radian)
  • Kiểu tham trị x: double.
  • Kiểu trả về: double.

Ví dụ

double Goc;
double Tan = 1.732050; //  Tan(Goc)=Sin(Goc)/Cos(Goc)=(căn 3)
void setup()
{
    Serial.begin(9600);
    Goc = atan(Tan);
    Serial.println(Goc, 5); // lấy 5 số phần thập phân
    //Goc=1.04720
}
void loop() {}

 

Hàm atan2(x, y)

Cấu trúc

double atan2(double x , double y)
  • Trả về arctan của x/y (giá trị radian)
  • Kiểu tham trị x, y: double.
  • Kiểu trả về: double.

Ví dụ

double Goc;
float x = 0.86602540; // =(Căn 3)/2.
float y = 0.5; // =1/2.

void setup()
{
    Serial.begin(9600);
    Goc = atan2(x, y); // tính arctan(x/y)
    Serial.println(Goc, 5); // lấy 5 số phần thập phân
    //Goc=1.04720
}
void loop() {}

 

 

Hàm arccot(x/y)

 

Thư viện không hỗ trợ biểu thức này, tuy nhiên ta có thể suy ra từ công thức tính arctan.

Cụ thể:

 arccot(x/y) = arctan(y/x)

Như vậy : 

arccot(x,y)= atan(y/x)=atan2(y,x); 

 

Hàm cosh(x)

Cấu trúc

 double cosh(double x)

Trả về cosh (hàm hyperbolic cosin) của x (giá trị radian) trong phép tính:

  • Kiểu tham trị x: double.
  • Kiểu trả về: double

Ví dụ

float x = 1.2345;
double Cosh;
void setup()
{
    Serial.begin(9600);
    Cosh = cosh(x);
    Serial.println(Cosh, 5); // lấy 5 số phần thập phân
    //Cosh=1.86382
}
void loop() {}

Hàm sinh(x)

Cấu trúc

double sinh(double x)

Trả về sinh (hàm hyperbolic sin) của x (giá trị radian) trong phép tính:

Kiểu tham trị x: double.

Kiểu trả về: double

Ví dụ

float x = 1.2345;
double Sinh;
void setup()
{
    Serial.begin(9600);
    Sinh = sinh(x);
    Serial.println(Sinh, 5); // lấy 5 số phần thập phân
    //Sinh=1.57284
}
void loop() {}

Hàm tanh(x)

Cấu trúc

double tanh(double x)

Trả về tanh (hàm hyperbolic tan) của x (giá trị radian) trong phép tính:

Kiểu tham trị x: double.

Kiểu trả về: double.

Mối quan hệ của Sinh, Cosh và Tanh

 

Ví dụ

float x = 1.2345;
double Tanh;
void setup()
{
    Serial.begin(9600);
    Tanh = tanh(x);
    Serial.println(Tanh, 5); // lấy 5 số phần thập phân
    //Tanh=0.84388
}
void loop() {}
lên
4 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

GAME-ST7565-LÀM GAME FLAPPY BIRD VỚI ARDUINO

Nói tới Game này thì ai cũng biết, là một trong số những Game của người Việt có tiếng vang lớn trong vài năm  trước, cách chơi đơn giản,đồ họa 2D basic... vậy còn lập trình nó với ARDUINO thì sao nhỉ ?

lên
9 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Điều khiển pin bằng ngôn ngữ chính thống

Xin chào các bạn, việc điều khiển nhập/ xuất trên arduino bằng digitalRead/ Write hẳn đã quá quen thuộc . Hài lòng với tốc độ hiện có, vậy bạn có muốn tăng tốc độ đọc/ ghi lên gấp 14 lần,  điều khiển cả 8 pin cùng lúc chỉ với một dòng lệnh không. Hãy đọc ngay bài viết này.

lên
30 thành viên đã đánh giá bài viết này hữu ích.