在OpenGL中绘制具有指定弧度夹角的两个向量
解决OpenGL中绘制指定夹角向量的问题
你的代码里两个向量的终点坐标完全相同(都是(0, vectorYRScalingValue, 0)),所以它们会完全重叠,自然看不到夹角。要实现指定弧度的夹角,需要用三角函数计算第二个向量的终点坐标。
假设你要让两个向量的夹角为theta(单位:弧度),第一个向量沿Y轴正方向(和你当前的Vx一致),第二个向量的终点坐标可以通过以下方式计算:
- X坐标:
vectorLength * sin(theta) - Y坐标:
vectorLength * cos(theta) - Z坐标:保持0不变(2D平面向量场景)
修改后的代码示例:
#include <math.h> // 需包含数学库头文件 // 定义向量长度和指定夹角(示例为π/4,即45度) const float vectorLength = 5.0f; const float theta = M_PI / 4.0f; // 绘制第一个向量(沿Y轴) glBegin(GL_LINES); glColor4f(1, .5, 0, 1); glVertex3f(0, 0, 0); glVertex3f(0, vectorLength, 0); glEnd(); // 绘制第二个向量(与第一个夹角为theta) glBegin(GL_LINES); glColor4f(1, .5, 0, 1); glVertex3f(0, 0, 0); // 用三角函数计算终点坐标 glVertex3f(vectorLength * sin(theta), vectorLength * cos(theta), 0); glEnd();
如果你的坐标系是X轴向右、Y轴向上,上述计算逻辑成立。若需要调整向量朝向,只需修改三角函数的组合(比如交换sin和cos、添加符号)即可。
注意:使用GCC编译时需添加-lm参数链接数学库,否则会出现三角函数未定义的错误。
内容的提问来源于stack exchange,提问作者Paul C
相关产品推荐
相关产品推荐

