[rrt_algorithm03]基于easyx的交互界面实现(代码片段)

AIplusX AIplusX     2023-02-14     427

关键词:

写在前面

这篇文章分享的主要是交互界面的实现,因为我是基于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);
	

基于easyx的扫雷游戏(代码片段)

基于EasyX的扫雷游戏一、预备知识1.使用EasyX必须要知道的一些基础函数2.选择结构if,switch3.循环结构for,while4.多维数组arr1[N],arr2[N][N],arr3[N][N][N]5.函数封装二、游戏逻辑想要写出推箱子,首先要知道推箱子... 查看详情

基于easyx的五子棋小游戏。(代码片段)

EasyX下载地址EasyX下载地址//五子棋.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<graphics.h>#include<conio.h>#include<stdio.h>#include<windows.h>#include<time.h>#include< 查看详情

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

  一、 头文件的包含#include<stdio.h>#include<graphics.h>//easyx图形库的头文件包含#include<string.h>#include<conio.h>#include<time.h>#include<stdlib.h> 二、自定义数据类型的创建   在这里我们需要对我们所需要的游 查看详情

[rrt_algorithm02]rrt算法实现

...1a;路径探索下边界绿色圆点:代表算法开始运行实现[rrt_algorithm02]rrt算法实现 查看详情

[rrt_algorithm]rrt算法以及伪代码

写在前面这个系列的文章将会分享rrt算法的实现结果以及伪代码思路。rrt算法是基于采样的路径规划算法,与A*算法的基于搜索是不同的。算法实现过程中遇到了一些困难,类似距离计算公式写错等低级错误,也有路... 查看详情

c++基于easyx图形库实现推箱子游戏(代码片段)

学习编程语言时,看视频看书的时候不是看看就过去了,编程毕竟是门一门手艺活,孰能生巧。建议一边看,一边将视频中的示例或者小项目教学自己也实现一下,刚开始不会可以照着敲,比只看不动手强... 查看详情

[rrt_algorithm05]技术文档_rrtgraph(代码片段)

...);voidinit_obs_start_end();private:rrtPara*rrt_graph_para=newrrtPara;;[rrt_algorithm05]技术文档_rrtGraph 查看详情

[rrt_algorithm07]技术文档_rrt(代码片段)

...#xff0c;在此不再赘述,请移步浏览remarks:无voidRRT::rrt_algorithm() srand((unsigned)time(NULL)); setlinecolor(GREEN); setlinestyle(PS_SOLID,rrt_user_para.rrt_line_width); intmin_dist_random_idx=0; Point*search_p=newPoint(start->x,start-> 查看详情

easyx库的安装(代码片段)

EasyX是什么?EasyXGraphicsLibrary是针对VisualC++的免费绘图库,支持VC6.0~VC2019,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将EasyX应用在教学当中。官网地址:https://easyx.cn/点击跳转官网根据你的情... 查看详情

只把easyx拷贝进项目里,方便发给没有安装easyx的人编译(以vs2022为例)(代码片段)

当你想把自己用EasyX 编写的代码发给别人时,也许对方因为没安装EasyX 导致无法编译。这时候,你可以只把EasyX 拷贝进项目里,然后随着项目一起打包发给别人,方便其他人编译。本文以VS2022为例,详细讲... 查看详情

easyx绘制多边形

引言:在Easyx中,专门给了一个函数绘制多边形——polygon函数一、打印较简单的多边形像长方形、正方形、三角形、梯形这些多边形较容易打印,因为他们的顶点坐标较容易求出。比如三角形#include<easyx.h>#include<stdio.h>in... 查看详情

你知道easyx吗(代码片段)

关于C++控制台上的图形界面,你知道一个东西叫做EasyX吗?作为一个退役的OI选手(WTF?(3^2-3^1)年级退役?),在退役之后总想找点事情做。开发个游戏?(我只会控制台)学下人工智能?(脑子不够用)学一下Py?(爱我C++)好... 查看详情

[rrt_algorithm06]技术文档_rrt(代码片段)

...nePIacos(-1)classRRTpublic: RRT()srand((unsigned)time(NULL));; ~RRT(); voidrrt_algorithm(); voidgetPath(constPoint*); voidtestAtan2Radian(); voidgetAtan2Node(Point*,constPoint*node,float&); voiddelayMs(constint&); 查看详情

easyx库进行图片绘制函数

引用函数:loadimage参数://从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)voidloadimage( IMAGE*pDstImg, //保存图像的IMAGE对象指针 LPCTSTRpImgFile, //图片文件名 intnWidth=0, //图片的拉伸宽度 intnHeight=0, //图片的拉伸高度 boolbResize=false //是否调整 查看详情

easyx的安装与使用

...ff0c;开始写一些东西吧,把以前做的东西做些梳理。1.EasyX是一个轻量级的简单的C++图形库,可以用来做些简单的演示2d类游戏,没有cocos2d-x那样重量级,学习起来也比较简单,相关API很少;其次关于... 查看详情

[a*算法01]c++绘图神器-easyx(代码片段)

...了,今天就给大家介绍一个香喷喷的开源图形库——EasyX。效果展示只需要一段简单的程序就可以进行图形绘制,结果如下图所示:程序如下图所示(以下源码来自EasyX官方文档,感谢技术大大们的 查看详情

dev-cpp/code::block/mingw下使用easyx

众所周知,EasyX是个很香的东西,但EasyX目前只支持VisualStudio,那么如果要在MinGW(Dev-Cpp和Code::Block均使用这个编译器)上使用EasyX怎么办呢?这篇文章就教大家如何在MinGW下搭建EasyX。如果要在MinGW上使用EasyX,则需要把EasyX里面的... 查看详情

只把easyx拷贝进项目里,方便发给没有安装easyx的人编译(以vs2022为例)(代码片段)

当你想把自己用EasyX 编写的代码发给别人时,也许对方因为没安装EasyX 导致无法编译。这时候,你可以只把EasyX 拷贝进项目里,然后随着项目一起打包发给别人,方便其他人编译。本文以VS2022为例,详细讲... 查看详情