Bài 30.5. Quản Lý Đồ Họa 3D: Tính Tâm Khối Lượng - [Độ khó: Khá]
Bài 30.5. Quản Lý Đồ Họa 3D: Tính Tâm Khối Lượng - [Độ khó: Khá]
Trong lĩnh vực đồ họa 3D, các vật thể được tạo thành từ hàng nghìn điểm (vertices) trong không gian 3 chiều. Để thực hiện các phép toán như xoay hay di chuyển vật thể một cách mượt mà, người ta thường cần biết "tâm khối lượng" (center of mass) của vật thể đó. Tâm khối lượng được tính bằng cách lấy trung bình cộng các tọa độ (x, y, z) của tất cả các điểm. Bạn cần viết một chương trình để đọc các tọa độ điểm và tính tâm khối lượng của một vật thể, sử dụng cấu trúc và cấp phát bộ nhớ động.
INPUT FORMAT
Đầu vào gồm:
- Dòng 1: Một số nguyên
N
(0 <=N
<= 1000), là số lượng điểm (vertices) của vật thể. N
dòng tiếp theo: Mỗi dòng chứa ba số thựcx y z
, cách nhau bởi dấu cách, đại diện cho tọa độ của một điểm. Các tọa độ nằm trong khoảng [-1000.0, 1000.0].
OUTPUT FORMAT
Nếu N = 0
, in ra: Khong co diem de tinh tam khoi luong.
Nếu N > 0
, đầu ra là một dòng chứa tọa độ x_avg y_avg z_avg
của tâm khối lượng, mỗi tọa độ được in ra với 2 chữ số thập phân.
Ví dụ:
Input:
3
1.0 1.0 1.0
2.0 2.0 2.0
3.0 3.0 3.0
Output:
Tam khoi luong: 2.00 2.00 2.00
Giải thích:
- Bạn cần định nghĩa một
struct Point3D
với ba thành viênx
,y
,z
kiểudouble
. - Cấp phát động một mảng các
Point3D
(ví dụ:Point3D* vertices = new Point3D[N];
) để lưu trữN
điểm. - Đọc
N
bộ tọa độ vào mảng động này. - Tính tổng các tọa độ
x
,y
,z
riêng biệt. - Chia tổng cho
N
để tìm giá trị trung bình (x_avg = sum_x / N
, tương tự choy_avg
,z_avg
). - Đảm bảo giải phóng bộ nhớ đã cấp phát động (
delete[] vertices;
). - Xử lý trường hợp
N=0
để tránh chia cho 0.
Comments