Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

มุมระหว่างสองระนาบใน 3D ด้วย C++


เพื่อหามุมระหว่างสองระนาบใน 3 มิติ ต้องเข้าใจระนาบและมุม:

  • ระนาบ (Plane) — พื้นผิว 2 มิติที่ขยายไปจนถึงอนันต์
  • มุม (Angle) — ช่วงระหว่างสองเส้นหรือพื้นผิวที่ตัดกันที่จุดหนึ่ง วัดเป็นองศา

มุมระหว่างสองระนาบ 3D คือมุมระหว่างเวกเตอร์ปกติ (normal vectors) ของทั้งสองระนาบ

กำหนดระนาบสองระนาบ:

p1: ax + by + cz + d = 0
p2: hx + iy + jz + k = 0

ทิศทางของเวกเตอร์ปกติคือ (a,b,c) และ (h,i,j)

สูตรคำนวณมุมระหว่างเวกเตอร์ปกติ:

Cos θ = {(a×h) + (b×i) + (c×j)} / [√(a²+b²+c²) × √(h²+i²+j²)]
θ = Cos⁻¹({(a×h) + (b×i) + (c×j)} / [√(a²+b²+c²) × √(h²+i²+j²)])

ตัวอย่างโค้ด

#include <iostream>
#include <math.h>
using namespace std;

int main() {
    float a = 2, b = 2, c = -1, d = -5;
    float h = 3, i = -3, j = 5, k = -3;
    float s = (a*h + b*i + c*j);
    float t = sqrt(a*a + b*b + c*c);
    float u = sqrt(h*h + i*i + j*j);
    s = s / (t * u);
    float pi = 3.14159;
    float A = (180 / pi) * (acos(s));
    cout<<"Angle is "<<A<<" degree";
    return 0;
}

ผลลัพธ์

Angle is 104.724 degree