[rrt_algorithm03]基于easyX的交互界面实现

Posted AIplusX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[rrt_algorithm03]基于easyX的交互界面实现相关的知识,希望对你有一定的参考价值。

写在前面

这篇文章分享的主要是交互界面的实现,因为我是基于C++实现的,所以可视化界面需要第三方库,我选择的是easyX,然后这篇文章主要介绍atan2()的坐标转换测试的可视化以及rrt探索枝干的可视化。

程序效果


黑色:障碍物(可由鼠标绘制);
绿色线段:探索路径;
绿色方块:终点
红色方块:起点
棕色线段:最终路径
点划线:路径探索下边界
绿色圆点:代表算法开始运行

程序介绍

atan2()测试

首先是对于atan2()函数输出的测试,函数使用是比较简单的,输入就是dx和dy,输出就是atan的弧度值,但是算法应用的是相机坐标系,不知道atan2()输出的弧度值是什么坐标系的,我们需要进行测试,于是就有了这个测试的可视化程序。

角度转换完毕之后就得到下面的测试图结果:


测试方法就是在空白部分坐标点击一下,测试程序会生成一条从特定点到鼠标所在点的线段,并且在图中显示出此时的弧度值。

可以看到转换之后弧度数值已经正常了,y轴正方向是正的,y轴负方向是负的,此时就可以带入算法中进行运算了。

程序实现如下所示:

void RRT::changeAngle(float& angle)

	if (angle < -PI / 2 && angle > -PI)  angle = -3 * PI / 2 - angle; 
	else  angle = PI / 2 - angle; 


void RRT::testAtan2Radian()

	ExMessage mse;

	while (1) 
		mse = getmessage(EM_MOUSE);
		if (mse.message == WM_LBUTTONDOWN) 
			line(480, 240, mse.x, mse.y);
			float theta = atan2((mse.x - 480), (mse.y - 240));
			changeAngle(theta);
			TCHAR s1[5];
			_stprintf_s(s1, sizeof(s1), _T("%.4f"), theta);
			outtextxy(mse.x, mse.y, s1);
		
	

探索节点线段

rrt在搜索的时候会不断延伸节点探索环境,因此就涉及到了绘制rrt枝干的可视化问题,于是我就写了这个测试例程。

测试的方法就是,基于纠正出来的atan()2函数返回的弧度值进行线段绘制,线段起点是鼠标坐标,然后往终点方向延伸特定长度。

生成了线段之后,测试程序将会在分割线下面显示线段2个端点的坐标。

示意图如下:

程序实现如下所示:

void RRT::showParaBelow(const Point* search_end)

	ExMessage mse;

	while (1) 
		mse = getmessage(EM_MOUSE);

		wchar_t s1[7];
		_stprintf_s(s1, sizeof(s1), _T("(%d,"), mse.x);
		outtextxy(100, 500, s1);
		wchar_t s2[7];
		_stprintf_s(s2, sizeof(s2), _T("%d)"), mse.y);
		outtextxy(150, 500, s2);

		Point p(mse.x, mse.y);
		search_end = getRRTNode(&p);

		_stprintf_s(s1, sizeof(s1), _T("(%d,"), search_end->x);
		outtextxy(300, 500, s1);
		_stprintf_s(s2, sizeof(s2), _T("%d)"), search_end->y);
		outtextxy(350, 500, s2);

		if (mse.message == WM_LBUTTONDOWN)
			line(p.x, p.y, search_end->x, search_end->y);
	

以上是关于[rrt_algorithm03]基于easyX的交互界面实现的主要内容,如果未能解决你的问题,请参考以下文章

[rrt_algorithm]rrt算法以及伪代码

[rrt_algorithm02]rrt算法实现

基于EasyX的扫雷游戏

基于EasyX 的五子棋小游戏。

基于EasyX 的五子棋小游戏。

c语言基于Easyx实现的贪吃蛇