21xrx.com
2024-12-27 19:19:07 Friday
登录
文章检索 我的文章 写文章
C++计算夹角的三种方法
2023-07-09 05:00:52 深夜i     --     --
C++ 计算 夹角 方法

C++是一种高级编程语言,被广泛用于科学计算、程序设计等领域。在程序设计中,有时需要计算两个向量之间的夹角,这里介绍三种计算夹角的方法。

第一种方法是利用标准库函数acos(),例如:


#include <cmath>

#include <iostream>

using namespace std;

int main(){

  double x1 = 1, y1 = 0, x2 = 0, y2 = 1; //定义两个向量

  double dotp = x1*x2 + y1*y2; //计算向量点积

  double len1 = sqrt(x1*x1 + y1*y1); //计算向量长度

  double len2 = sqrt(x2*x2 + y2*y2);

  double angle = acos(dotp / (len1 * len2)); //计算夹角(弧度制)

  cout << angle << endl; //输出夹角

  return 0;

}

该程序的输出为1.5708,即90度的弧度制表示。

第二种方法是使用向量的行列式,通过行列式的值来计算夹角。这个方法可以用来计算任意维的向量夹角,例如:


#include <cmath>

#include <iostream>

using namespace std;

double angle(double x1, double y1, double x2, double y2){

  double dotp = x1*x2 + y1*y2; //计算向量点积

  double det = x1*y2 - x2*y1; //计算向量行列式

  double angle = atan2(det, dotp); //计算夹角(弧度制)

  return angle;

}

int main(){

  double x1 = 1, y1 = 0, x2 = 0, y2 = 1; //定义两个向量

  double angle_rad = angle(x1, y1, x2, y2); //计算夹角(弧度制)

  double angle_deg = angle_rad * 180 / M_PI; //将弧度制转换为角度制

  cout << angle_deg << endl; //输出夹角

  return 0;

}

该程序的输出为90,即夹角为90度。

第三种方法是使用向量的长度和夹角公式,通过向量的长度和夹角公式(cosθ = a·b / |a|·|b|)来计算夹角。例如:


#include <cmath>

#include <iostream>

using namespace std;

double angle(double x1, double y1, double x2, double y2){

  double dotp = x1*x2 + y1*y2; //计算向量点积

  double len1 = sqrt(x1*x1 + y1*y1); //计算向量长度

  double len2 = sqrt(x2*x2 + y2*y2);

  double cos_theta = dotp / (len1 * len2); //计算夹角的余弦值

  double angle_rad = acos(cos_theta); //计算夹角(弧度制)

  return angle_rad;

}

int main(){

  double x1 = 1, y1 = 0, x2 = 0, y2 = 1; //定义两个向量

  double angle_rad = angle(x1, y1, x2, y2); //计算夹角(弧度制)

  double angle_deg = angle_rad * 180 / M_PI; //将弧度制转换为角度制

  cout << angle_deg << endl; //输出夹角

  return 0;

}

该程序的输出和第二种方法一样,也是90度。

总之,这三种方法都可以计算向量夹角,具体使用需要根据实际情况确定。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复