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ốc | Giá trị | Chính xác (k=3) |
|---|---|---|
| 1.802 × 7 | 12.614 | 15.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ỉ.