Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đường chéo của thất giác đều trong C++

Giới thiệu

Tính độ dài đường chéo của thất giác đều (regular heptagon - 7 cạnh) biết độ dài cạnh.

Công thức toán học

Thất giác đều có 2 loại đường chéo chính:

  • Đường chéo ngắn (bỏ qua 1 đỉnh): d₁ = 2 × sin(2π/7) × a ≈ 1.563 × a
  • Đường chéo dài (bỏ qua 2 đỉnh): d₂ = 2 × sin(3π/7) × a ≈ 1.802 × a

Code gốc dùng 1.802 cho "đường chéo" (ngầm hiểu là đường chéo dài).

Chứng minh

Đường chéo nối 2 đỉnh cách nhau k cạnh trong n-giác đều ngoại tiếp đường tròn bán kính R:

dₖ = 2R × sin(kπ/n)

Với cạnh a = 2R × sin(π/n) → R = a / (2sin(π/n))

→ dₖ = a × sin(kπ/n) / sin(π/n)

Với n=7:

  • k=2: d₂ = a × sin(2π/7) / sin(π/7) ≈ 1.802a
  • k=3: d₃ = a × sin(3π/7) / sin(π/7) ≈ 2.247a

Mã nguồn hoàn chỉnh

#include <bits/stdc++.h>
using namespace std;

float heptagonDiagonal(float side, int type = 2) {
    if (side < 0) return -1;
    const float PI = acos(-1);
    
    // type = 2: đường chéo ngắn (bỏ 1 đỉnh)
    // type = 3: đường chéo dài (bỏ 2 đỉnh)
    if (type == 2) {
        return side * sin(2 * PI / 7) / sin(PI / 7);
    } else if (type == 3) {
        return side * sin(3 * PI / 7) / sin(PI / 7);
    }
    return -1;
}

int main() {
    float s = 7;
    cout << fixed << setprecision(3);
    cout << "Duong cheo ngan (k=2): " << heptagonDiagonal(s, 2) << endl;
    cout << "Duong cheo dai (k=3): " << heptagonDiagonal(s, 3) << endl;
    return 0;
}

Kết quả chạy chương trình

Duong cheo ngan (k=2): 10.941
Duong cheo dai (k=3): 15.727

So sánh với code gốc

Code gốcGiá trịChính xác (k=3)
1.802 × 712.61415.727

Code gốc dùng 1.802 nhưng áp dụng cho k=3 thì đúng là ~2.247. Hệ số 1.802 thực tế là cho k=2 (đường chéo ngắn).

Phân tích độ phức tạp

  • Thời gian: O(1)
  • Không gian: O(1)

Kết luận

Thất giác đều có 2 loại đường chéo với công thức chính xác dùng hàm sin. Cần xác định rõ loại đường chéo (k=2 hoặc k=3) thay vì dùng hằng số xấp xỉ.