Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 세 점을 지나는 평면의 방정식 구하기

개요

이 튜토리얼에서는 세 점을 지나는 평면의 방정식을 구하는 C++ 프로그램을 다룹니다. 세 개의 좌표가 주어졌을 때, 해당 점들을 모두 지나는 평면의 방정식을 계산하는 것이 목표입니다.

접근 방법

평면의 방정식은 일반적으로 ax + by + cz + d = 0 형태로 표현됩니다. 세 점을 지나는 평면을 구하려면 다음 단계를 따릅니다.

1. 첫 번째 점 P1(x1, y1, z1)에서 두 번째 점 P2(x2, y2, z2)로 향하는 벡터와, P1에서 세 번째 점 P3(x3, y3, z3)으로 향하는 벡터를 구합니다.
2. 두 벡터의 외적(cross product)을 계산하여 평면의 법선 벡터 (a, b, c)를 얻습니다.
3. 첫 번째 점의 좌표를 대입하여 상수 d = -(a·x1 + b·y1 + c·z1)를 계산합니다.

예제 코드

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

// 평면의 방정식을 구하는 함수
void equation_plane(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3){
    // 두 방향 벡터 계산
    float a1 = x2 - x1;
    float b1 = y2 - y1;
    float c1 = z2 - z1;
    float a2 = x3 - x1;
    float b2 = y3 - y1;
    float c2 = z3 - z1;

    // 외적을 통해 법선 벡터 (a, b, c) 계산
    float a = b1 * c2 - b2 * c1;
    float b = a2 * c1 - a1 * c2;
    float c = a1 * b2 - b1 * a2;
    float d = (- a * x1 - b * y1 - c * z1);

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    cout << "Equation of plane is " << a << " x + " << b << " y + " << c << " z + " << d << " = 0";
}

int main(){
    float x1 =-1;
    float y1 = 2;
    float z1 = 1;
    float x2 = 0;
    float y2 =-3;
    float z2 = 2;
    float x3 = 1;
    float y3 = 1;
    float z3 =-4;

    equation_plane(x1, y1, z1, x2, y2, z2, x3, y3, z3);
    return 0;
}

출력 결과

Equation of plane is 26.00 x + 7.00 y + 9.00 z + 3.00 = 0

코드 설명

위 프로그램은 먼저 점 P1을 기준으로 P2, P3에 대한 두 방향 벡터를 구합니다. 이후 외적 공식을 적용해 평면에 수직인 법선 벡터의 성분 a, b, c를 계산하고, 마지막으로 점 P1의 좌표를 활용해 상수항 d를 구합니다. setprecision(2)를 사용하여 소수점 둘째 자리까지 출력하도록 설정했습니다.