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

Góc giữa hai mặt phẳng trong không gian 3D bằng C++


Mặt phẳng (Plane) – Mặt phẳng 2D mở rộng vô hạn. Góc giữa hai mặt phẳng = góc giữa hai vectơ pháp tuyến của chúng.

Phương trình mặt phẳng

P1: ax + by + cz + d = 0  → Vectơ pháp tuyến n1 = (a, b, c)
P2: hx + iy + jz + k = 0  → Vectơ pháp tuyến n2 = (h, i, j)

Công thức góc

cos θ = |n1·n2| / (|n1| × |n2|) = |a×h + b×i + c×j| / √(a²+b²+c²)√(h²+i²+j²)

θ = arccos(...) × (180/π) (độ)

Chương trình C++

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a, b, c, d, h, i, j, k;
    cout << "Nhap he so mat phang 1 (a b c d): ";
    cin >> a >> b >> c >> d;
    cout << "Nhap he so mat phang 2 (h i j k): ";
    cin >> h >> i >> j >> k;
    
    double dot = a*h + b*i + c*j;
    double norm1 = sqrt(a*a + b*b + c*c);
    double norm2 = sqrt(h*h + i*i + j*j);
    double cos_theta = abs(dot) / (norm1 * norm2);
    
    // Giới hạn do sai số float
    if (cos_theta > 1) cos_theta = 1;
    
    double angle_rad = acos(cos_theta);
    double angle_deg = angle_rad * 180.0 / M_PI;
    
    cout << "Goc giua hai mat phang: " << angle_deg << " do";
    return 0;
}

Kết quả (ví dụ)

Nhap he so mat phang 1 (a b c d): 2 2 -1 -5
Nhap he so mat phang 2 (h i j k): 3 -3 5 -3
Goc giua hai mat phang: 104.724 do