C语言求向量夹角的程序部分看不懂 高手帮看看分析 红字部分不懂

C语言求向量夹角的程序部分看不懂 高手帮看看分析 红字部分不懂,第1张

vectorProduct 这个函数写的有问题, 看函数的实现, length应该是指数组vecB和vecB中的数据个数, 但是在函数里明明已经写了是3, 这个参数就是多余的, 它只能等于3.

另外, 这个程序为了表示是3维向量, 定义了一个常数#define VECSIZE 3

但是在这里又直接写3, 不一致.

这样虽然不会出错, 但是给理解造成困惑.

vectorNorm 也一样.

double x[VECSIZE] = {0.0,1.0,0.0}

这个是这里作为示例, 求两个向量的夹角的第一个向量的变量,

变量名是x, 而不是X轴, 而这个向量是y轴的,

这样同样是容易让人困惑, 下面的y同理.

这样, 整个程序的含义是:

函数 vectorProduct求两个向量的点积

函数 vectorNorm 求向量的模(长度)

main函数是示例:

定义了x和y两个向量,

用vectorNorm分别求出两个向量的模, xNorm, yNorm

用vectorProduct求出两个向量的叉积, 然后除以两个向量的模, 得到夹角的余弦值, cos_phi

用acos反余弦求出两个向量的夹角(单位弧度), 然后换算成角度为单位, cos_phi

楼主你好,希望对你有帮助

#include<iostream>

#include<cmath>

using namespace std

#define PI 3.141592653

int main()

{

double a[4]

double b[4]

double t

cout<<"请输入第一个向量的起点坐标:"<<endl

cin>>a[0]>>a[1]

cout<<"请输入第一个向量的终点坐标:"<<endl

cin>>a[2]>>a[3]

cout<<"请输入第二个向量的起点坐标:"<<endl

cin>>b[0]>>b[1]

cout<<"请输入第二个向量的终点坐标:"<<endl

cin>>b[2]>>b[3]

t=((a[0]-a[2])*(b[0]-b[2])+(a[1]-a[3])*(b[1]-b[3]))/(sqrt(pow(a[0]-a[2],2)+pow(a[1]-a[3],2))*sqrt(pow(b[0]-b[2],2)+pow(b[1]-b[3],2)))

cout<<"这两个向量的夹角为:"<<acos(t)*(180/PI)<<"度"<<endl

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7956620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存