已知三点坐标,求平面方程

使用的是向量法,先求出平面的法向量,再写出平面的点法式方程

#include <iostream>
using namespace std;

//定义一个结构体表示三维坐标
struct Point {
  double x;
  double y;
  double z;
};

//定义一个函数计算两个点之间的向量
Point vector(Point p1, Point p2) {
  Point v;
  v.x = p2.x - p1.x;
  v.y = p2.y - p1.y;
  v.z = p2.z - p1.z;
  return v;
}

//定义一个函数计算两个向量的叉积
Point crossProduct(Point v1, Point v2) {
  Point n; //法向量
  n.x = v1.y * v2.z - v1.z * v2.y;
  n.y = v1.z * v2.x - v1.x * v2.z;
  n.z = v1.x * v2.y - v1.y * v2.x;
  return n;
}

//定义一个函数输出平面方程
void planeEquation(Point a, Point b, Point c) {
  //求出两个向量ab和ac
  Point ab = vector(a,b);
  Point ac = vector(a,c);
  
  //求出法向量n
  Point n = crossProduct(ab,ac);
  
  //用点法式表示平面方程:n*(x-a)=0
  cout << "The equation of the plane is: " << endl;
  
   if (n.x !=0) { //如果n的x分量不为0,就把x移到右边,否则保持不变
    cout << n.x << "x";
    if (a.x !=0) { //如果a的x坐标不为0,就把它移到右边,并加上符号,否则忽略它
      if (a.x >0) {
        cout << "-" << a.x; 
      }
      else {
        cout << "+" << -a.x; 
      }
    }
    cout << " ";
   }
   
   if (n.y !=0) { //如果n的y分量不为0,就把y移到右边,并加上符号,否则保持不变
    if (n.y >0) {
      cout << "+";
    }
    else {
      cout << "-";
    }
    cout << abs(n.y) << "y"; //取绝对值避免重复负号
    
    if (a.y !=0) { //如果a的y坐标不为0,就把它移到右边,并加上符号,否则忽略它
      if (a.y >0) {
        cout << "-" << a.y; 
      }
      else {
        cout << "+" << -a.y; 
      }
    }
    
     cout <<" ";
   }

   if (n.z !=0) { //如果n的z分量不为0,就把z移到右边,并加上符号,否则保持不变
   
     if (n.z >0) {
       cout<<"+";
     } 
     else{
       cout<<"-";
     } 
     
     cout<<abs(n.z)<< "z"; //取绝对值避免重复负号
     
     if(a.z!=0){ //如果a的z坐标不为0,就把它移到右边,并加上符号,否则忽略它
     
       if(a.z>0){
         cout<<"-"<<a.z; 
       } 
       else{
         cout<<"+"<<-a.z; 
       } 
       
     } 
    
     cout<<" ";
     
   }

   //最后等于零   
   cout<<"= "<< "0"<<"\n"; 

}

int main() {

//输入三个
//输入三个点的坐标
  Point p1, p2, p3;
  cout << "Enter the coordinates of point 1: " << endl;
  cin >> p1.x >> p1.y >> p1.z;
  cout << "Enter the coordinates of point 2: " << endl;
  cin >> p2.x >> p2.y >> p2.z;
  cout << "Enter the coordinates of point 3: " << endl;
  cin >> p3.x >> p3.y >> p3.z;

//调用函数输出平面方程
  planeEquation(p1,p2,p3);

//结束程序
  return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值