前提条件:两向量起点在同一个点

设两向量分别为OA⃗\vec{OA}OA和OB⃗\vec{OB}OB,起点均在OOO点。

主要思想:

将OA⃗\vec{OA}OA和OB⃗\vec{OB}OB单位化,假设求得单位向量分别为:a⃗\vec{a}a和b⃗\vec{b}b。则a⃗\vec{a}a + b⃗\vec{b}b即为角平分线所在向量。

主要代码:

注意:函数最后返回的是角平分线所在向量,起点在中心点O(center)位置,不在原点(0,0),所以使用OpenGL绘制角平分线的代码时起点是O(center),终点是角平分线所在向量上的任一点
//数据结构point,用来存储点和向量的信息
struct point {GLfloat x;GLfloat y;
};//函数传入的是点A(left), O(center), B(right)的坐标
point Angle_bisector(point left, point center, point right) {//角平分线:将左右两向量单位化,然后相加求得的就是角平分线所在方向//a是左边向量point a;a.x = (left.x - center.x);a.y = (left.y - center.y);//b是右边向量point b;b.x = (right.x - center.x);b.y = (right.y - center.y);//求a,b的模长分别为ad和bdGLfloat ad, bd;ad = sqrt(pow(a.x, 2) + pow(a.y, 2));bd = sqrt(pow(b.x, 2) + pow(b.y, 2));//将 a, b单位化a.x = a.x / ad;a.y /= ad;b.x /= bd;b.y /= bd;//abs用来存储角平分线所在向量point abs;abs.x = a.x + b.x;abs.y = a.y + b.y;cout << "a + b = " << "(" << abs.x << "," << abs.y << ")" << endl;return abs;
}

完整代码:

注意:我是用GLUT库写的代码,大家可以直接看上面的主要代码。还有一个就是下面的代码是找出一个正方形(只要满足简单凸多边形应该都可以,大家可以自己改一下试试)各顶点的角平分线向量
#include <GL/glut.h>
#include <GL/GL.h>
#include <iostream>
#include <math.h>using namespace std;struct point {GLfloat x;GLfloat y;
};point Points[4] = { {20, -20}, {20, 20}, {-20, 20}, {-20, -20} };    //用来存储多边形的顶点,一个正方形
point Abs[4];   //用来存储每个顶点的角平分线向量//计算每个顶点的角平分线向量
point Angle_bisector(point left, point center, point right) {//角平分线:将左右两向量单位化,然后相加求得的就是角平分线所在方向point a;a.x = (left.x - center.x);a.y = (left.y - center.y);point b;b.x = (right.x - center.x);b.y = (right.y - center.y);GLfloat ad, bd;ad = sqrt(pow(a.x, 2) + pow(a.y, 2));bd = sqrt(pow(b.x, 2) + pow(b.y, 2));a.x = a.x / ad;a.y /= ad;b.x /= bd;b.y /= bd;point abs;abs.x = a.x + b.x;abs.y = a.y + b.y;cout << "a + b = " << "(" << abs.x << "," << abs.y << ")" << endl;return abs;
}void display(void) {point abs;glClearColor(1.0f, 1.0f, 1.0f, 1.0f);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLineWidth(2.0f);glColor3f(0.0f, 0.0f, 0.0f);glBegin(GL_LINE_LOOP);for (int i = 0; i < 4; i++) {glVertex3f(Points[i].x, Points[i].y, 0);if (i == 0) {abs = Angle_bisector(Points[4 - 1], Points[0], Points[1]);}else if (i == 4 - 1) {abs = Angle_bisector(Points[4 - 2], Points[4 - 1], Points[0]);}else {abs = Angle_bisector(Points[i - 1], Points[i], Points[i + 1]);}Abs[i] = abs;}glEnd();glLineWidth(2.0f);glBegin(GL_LINES);glColor3f(0.0, 1.0, 0.0);for (int i = 0; i < 4; i++) {//cout << Abs[i].x <<","<< Abs[i].y << endl;glVertex3f(Points[i].x, Points[i].y, 0);//*10是为了放大向量,以便于查看绘画效果//原先这里写的是glVertex3f(10 * Abs[i].x, 10 * Abs[i].y, 0);,这样写不对,因为Abs向量的起点不在原点glVertex3f(Points[i].x + 10 * Abs[i].x, Points[i].y + 10 * Abs[i].y, 0);}glEnd();glutSwapBuffers();
}void reshpae(int w, int h) {glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-100, 100, -100, 100, 10.0, -10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}int main(int argc, char* argv[]) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);glutInitWindowPosition(100, 100);glutInitWindowSize(500, 500);glutCreateWindow("求简单凸多边形各顶点角平分线向量");glutDisplayFunc(display);glutReshapeFunc(reshpae);glutMainLoop();return 0;
}

运行效果

参考资料:

怎么求两向量的角平分线向量

OpenGL(C++):求两向量角平分线相关推荐

  1. matlab求两向量夹角_高中数学《平面向量的数量积》说课稿

    高中数学<平面向量的数量积>说课稿 作为一位无私奉献的人民教师,有必要进行细致的说课稿准备工作,借助说课稿可以让教学工作更科学化.那么写说课稿需要注意哪些问题呢?以下是小编为大家收集的高中 ...

  2. matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...

    ↑ 点击上方"红色笔记"关注我们 高中各科解题技巧下载  回复数字:800009 高考数学解题技巧:专题24 数列求和方法高中数学黄金解题模板 高考数学解题技巧:专题26 含参不等 ...

  3. matlab求两向量夹角_初学讲义之高中数学十四:向量的数量积

    上篇讲了向量的基本概念和简单的加减运算,这部分的数学运算与几何图形变换之间的联系是非常直观的,理解起来非常容易 本篇讲的内容在数学运算与几何图形变换之间的联系不那么直观,需要花功夫反复琢磨运算的数学意 ...

  4. 求两向量在0~360度之间的角度值及实际应用

    问题 先从实际问题出发,这样可以更好的理解问题. 项目需要控制角色在地图中随意移动,角色素材是8方向的. 那问题就是 如何根据点击的鼠标位置来决定使用哪个方向的图集? 分解问题 首先8方向图集 360 ...

  5. matlab求两向量夹角_【求精干货】高中数学知识点总结归纳高一学生必须掌握

    高中数学高考知识点总结高一必高中数学高一的学生离高考还有两年的时间,别看这两年感觉很长,其实时间一晃就过了,高中数学学习成绩不太好的同学该加油好好学习了.别等到最后一年累死累活的搞,还不一定有效果,今 ...

  6. matlab求两向量夹角_Matlab-自动化控制系统设计4频域分析

    本文内容:系统的频域分析 操作环境:matlab2019b 简单说一下频域法,时域分析法可以用来测试控制系统的性能,但是高阶系统的时域特性很难确定,科学家们就通过频率特性间接研究系统的动态响应,避免了 ...

  7. matlab求两向量夹角_高等数学之向量代数与空间解析几何知识点与题型总结

    向量代数与空间解析几何知识点: (1)向量代数知识点 (2)两平面夹角与两直线夹角公式 两平面夹角和两直线夹角公式 (3)点到直线的距离公式 点到直线的距离 (4)常见二次曲线 常见二次曲线 题型一: ...

  8. matlab求两向量夹角_MATLAB教程-台大郭彦甫-第十二节,含练习答案

    12-线性方程式与线性系统 一.Linear equation(线性方程式) (一)Linear equation 1.Suppose you are given linear equations: ...

  9. matlab求两向量夹角_MATLAB教程-台大郭彦甫-第十节,含练习答案

    10-数值微积分 一.Polynomial differentiation and integration(多项式微分与积分) (一)Differentiation(微分) 1.The derivat ...

最新文章

  1. ISE和Modelsim联合仿真
  2. 求1/2+1/4+...+1/n
  3. [别被脱库]—数据库的初恋~
  4. hadoop中如何控制map的数量
  5. python支持gui编程_Python GUI编程完整示例
  6. 工作流实战_07_flowable 流程定义查看流程图和xml
  7. 实践 | Sentinel 扩展性设计 1
  8. mysql弱口令msf_Metasploit扫描Mysql弱口令
  9. 音视频学习系列第(四)篇---视频的采集预览
  10. redis 命令大全
  11. 本地事务、分布式事务以及解决方案
  12. bing 搜索引擎 无法访问 bug
  13. python源码文件的后缀名_Python 源代码程序编译后的文件扩展名为_________。_学小易找答案...
  14. 怎么上传云班课的计算机作业,云班课作业怎么提交_作业提交方法_咖绿茵手游站...
  15. nexus 仓库类型_Nexus仓库构建
  16. 小复习1 Python求解一元二次方程解(自定义函数)
  17. oracle 手工创建数据库
  18. arm-linux东东之nand之一:nand 初始化
  19. cad缩小了怎么还原_CAD无法进一步缩小怎么办?CAD不能进一步缩小的解决方法
  20. 服务器:bash:./xxx:无法执行二进制文件报错

热门文章

  1. Java动态代理(以现实中我们熟悉的中介代理租房、卖房模式理解)(附案例详解)
  2. excel根据条件列转行_“Excel怎样将列转为行 Excel列转行方法“excel有条件转置
  3. Python序列练习题【第十二周】
  4. Android-PickerView框架的简单使用
  5. 关于互联网域名注册管理机构审批情况的公示(截至2018年06月)
  6. webService的一些记录
  7. Animoca Brands 和 Cube 娱乐的合资公司 Anicube 将进行 K-pop NFT 空投
  8. 【3GPP】下行同步歪解
  9. InkScape绘制抖音LOGO的教程
  10. python re 筛选数据 求和_python求和函数sum()详解