如何将数学曲线变为机器人轨迹-花式show爱心代码-turtlesim篇

news2024/11/22 8:43:09

 


第一步:找到曲线数学描述的网址。

阅读后了解曲线所对应的x+y函数。

不要选太复杂的,毕竟先复现出来最重要的。

 

第二步,这个函数转为C++代码。

    //Love
    goal_x=5.5+4.0*pow(sin(curve_t/200.0),3);
    goal_y=5.5+((13.0*cos(curve_t/200.0)-5.0*cos(curve_t/100.0)-2.0*cos(3.0*curve_t/200.0)-cos(curve_t/50.0))/4.0);

 

代码解释:

数值:5.5。对应如下

[ INFO] [1671081347.479062900]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]  

 

公式中的:t,代码中对应curve_t/200.0。

连续时间函数t,转为计算机离散的量,仅此而已。

公式中所绘制心形太大,代码中按比例缩小到25%。

完成后,需要将代码编译。

第三步,修改CMakelist:

add_executable(love tutorials/love.cpp)
target_link_libraries(love ${catkin_LIBRARIES})
add_dependencies(love turtlesim_gencpp)

 使用catkin_make:

Scanning dependencies of target love                                                                                    

Building CXX object turtlesim/CMakeFiles/love.dir/tutorials/love.cpp.obj                                         love.cpp                                                                                                                

Linking CXX executable D:\ros1\cocube\devel\lib\turtlesim\love.exe 

第四步,测试:

如果出现卡顿,重启全部。

 

同样,换一个数学模型,就可以绘制更多的轨迹。 

如果觉得心形绘制不够美丽,修改参数或者函数可以获得更多类型,总有一款适合。

 


视频全程录制:

如何将数学曲线变为机器人轨迹-花式show爱心代码-

 


 

 

有许多数学曲线可以产生心形,其中一些在上面进行了说明。“第零”曲线是由极性方程给出的旋转心形(其名称的意思是“心形”)



通过取心脏表面的y=0横截面并将z坐标重新标记为y,得到第一条心脏曲线,给出6阶代数方程



第二条心脏曲线由参数方程给出

 
其中t在[-1,1]中(H.Dascanio,pers.comm.,2003年6月21日)。
第三条心脏曲线由下式给出

 
(P.Kuriscak,个人通讯,2006年2月12日)。该心脏曲线的每一半是6阶代数曲线的一部分。
HeartCurve5

 

第四条曲线是极曲线


由于匿名来源,2010年2月初从Wolfram|Alpha的日志文件中获得。该心脏曲线的每一半是12阶代数曲线的一部分,因此整个曲线是24阶代数曲线。
第五心脏曲线可以参数化地定义为


第六条心脏曲线由以下简单表达式给出

 
(由J.Schroeder于2021 10月16日在贺卡上注明)。当用比例参数a和b适当地进行无量纲化时,曲线变为

 
它可以写成x和y中的六分方程。
这些心脏的区域是

 
其中A_4可以作为超几何函数、反切线和伽马函数的复杂组合以封闭形式给出。

 

邦尼投影
Bonne投影是一种将球体表面映射到心形区域的地图投影,如上图所示。


♥心形曲线:

mathworld.wolfram.com/HeartCurve.html

扩展阅读:

优美的曲线(含蝴蝶线)-CoCube


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络工程师备考6章

6.1 OSI参考模型概述 计算机的整套理论是图灵提出来的,自此创办图灵奖(计算机类最高奖项)。科学远远比技术更重要。 OSI七层模型就是科学,就是理论,所以非常重要! 注:ISO是一个机构,OSI是一个协议:分别七层 6.2 OSI参考模型 注:在传输层中,什么是端到端,例如A,…

jsp+ssm计算机毕业设计ssm校园贫困补助系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

使用vite构建vue3项目与官网构建区别

使用vite构建vue3项目 一、vue3官网文档的 https://www.javascriptc.com/vue3js/guide/installation.html#命令行工具-cli npm init vite-app cd npm installnpm run dev 二、vite官网文档的 https://cn.vitejs.dev/guide/#trying-vite-online 1 对应路径cmd 输入 npm create…

Grad-CAM简介-网络 热力图分析

论文名称:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization 论文下载地址:https://arxiv.org/abs/1610.02391 推荐代码(Pytorch):https://github.com/jacobgil/pytorch-grad-cam bi…

流媒体开源服务 MediaSoup 初识

目录 前言 正文 一、简单介绍 二、关键特色 1. 超强 SFU 功能 2. Node.js 模块 3. 客户端 SDK 三、架构组成 1. 关键实例 2. 重要模块 四、发展现状 前言 最近收看了一期微软(中国)关于云原生、大数据、AI 领域的开源服务创新的线上圆桌论坛&…

垃圾回收算法

1.种类 垃圾回收算法通常意义上有两种: 引用计数式垃圾收集追踪式垃圾收集 追踪式垃圾收齐又称“间接垃圾收集”,现在有很多算法大都遵循了分代收集理论,而分代收集理论的基础,却是以下俩个分代假说: 强分代假说&am…

MyPerf4J一个高性能、无侵入的Java性能监控和统计工具,有点东西!

背景 随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。 于是公司开始全面推进服务化进程,把团队内的大部分工程…

软件测试之移动app测试框架有哪些?

一、适用于Android的移动app测试框架 1.Espresso 十分流行的一款谷歌开发的Android测试框架,具备高性能性。可以创建非常简单直接的测试,而不必担心app的基础架构。此外,它是开源的,这使开发人员能够自定义框架。 2.Selendroid…

DOM算法系列003-获取节点A相对于节点B 的位置

UID: 20221214170009 aliases: tags: source: cssclass: created: 2022-12-14 1. 节点位置关系 两个节点A、B之间的位置关系总共有几种?我们第一时间能想到的: 节点A在节点B之后节点A在节点B之前节点A包含节点B节点A被节点B包含 除此之外,…

【python绘制地图——使用folium制作地图,可解决多数问题】

Python使用folium制作地图并生成png图片 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 使用folium制作地图 第二章 使用Html2Image生成png图片 第三章 使用reportlab制作pdf报告 提示:写完文章后,目录…

JavaWeb:Mysql(数据库管理系统)、Navicat(Mysql的图形化工具)

MyBatis是对JDBC的简化 以后的升级框架,基本都是围绕 JavaWeb程序 所做的升级 Mysql就是一个数据库管理系统,在系统里可以创建一个个数据库,即DBMS中创建一个个DB Mysqul官网https://downloads.mysql.com/archives/community/ 选择5.7.2…

PCB设计—AD20和立创EDA设计(1)创建项目

(1)纯新手建议先利用立创EDA画一个PCB,对PCB有一个简单的了解再学习AD20。 (2)立创EDA教程:立创EDA极速入门(1)——熟悉PCB和立创EDA基本操作;立创EDA极速入门&#xff0…

《纳瓦尔宝典》笔记二——停止出卖时间后,如何才能有收入

目录 一、引言 二、经典观点 1、没有捷径成功,所以不要抱走捷径心态 2、书的价值 3、一种杠杆-资产(公司、股票、实业)或被动收入(媒体或代码) 4、薪水与财富的区别 5、把自己产品化 6、共事的人和工作的内容比…

C# .net 接口接收不同类型参数

public ActionResult ccbwx_notifyurl() { #region 请求参数 Hashtable has new Hashtable(); System.Collections.Specialized.NameValueCollection collection; //if (this.HttpContext.Request.HttpMethod.ToUppe…

前端基础(八)_盒子模型(标准盒子模型和怪异盒子模型)

盒子模型 什么是盒子模型 网页设计中常听的属性名:内容(content)、内边距(padding)、边框(border)、外边距(margin), CSS盒子模型都具备这些属性。这些属性我们可以用日常生活中的常见事物——盒子作一个比喻来理解,所以叫它盒子模型。CSS盒…

Jenkins 解决GIT部署出现连续SCM部署的问题

背景 最近在工作中用Jenkins部署项目代码,但是每当我选择好了Gittag参数进行部署时会出现两个Job 其中一个Job是由我本人创建的,还有一个Job是由SCM自动创建的,而且由SCM自动创建的Gittag参数是默认值。 我想关闭这个SCM构建,但是…

模板方法模式(Template Method)

参考: 模板方法设计模式 (refactoringguru.cn) design-patterns-cpp/TemplateMethod.cpp at master JakubVojvoda/design-patterns-cpp GitHubhttps://github.com/JakubVojvoda/design-patterns-cpp/blob/master/state/State.cpp) 文章目录一、什么是模板方法模…

41_STM32CAN外设简介

目录 STM32的CAN外设简介 CAN控制内核 工作模式 位时序及波特率 CAN发送邮箱 CAN接收FIFO 验收筛选器 筛选器设置举例 STM32的CAN外设简介 STM32的芯片中具有bxCAN控制器(Basic Extended CAN),它支持CAN协议2.0A和2.0B标准。 该CAN控制器支持最高的通讯速率为1Mb/s;可…

汉字风格迁移篇--KAGAN:一种中国诗歌风格转换的方法

🚀针对问题: 以往的方法都是针对单字图像,容易忽略了中文句子或一张图像中包含的多个字符。 🚀提出的方法: Constancy Loss, Smooth L1 loss;TV loss ,key-attention mechanism GAN;多通道鉴别器 🚀使用的指标 L1 Loss ,SSIM, PSNR, LPIPS 已有工作 字符风…

LiveGBS国标流媒体平台-海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

GB/T28181国标流媒体平台海康大华宇视华为等硬件NVR摄像机注册到LiveGBS国标平台看不到设备的时候如何抓包及排查1、设备注册后查看不到1.1、是否是自带物联网卡的摄像头1.2、关闭萤石云1.3、防火墙排查1.4、端口排查1.5、IP地址排查1.6、设备TCP/IP配置排查1.7、设备多网卡排查…