基于libsx库实现的模拟机器人运动

本文详细介绍了如何利用libsx库来实现机器人运动的模拟。通过解析库的API和示例代码,展示了设置机器人关节角度、进行动态模拟及获取运动轨迹的方法,帮助读者掌握在软件中复现机器人行为的技术要点。
摘要由CSDN通过智能技术生成
//widget.h
#ifndef WIDGETS
#define WIDGETS

#include "common.h"

void InitWidget(int argc, char **argv);

//前进
void Avance(const char *str);

//后退
void Recule(const char *str);

//左转
void Gauche(const char *str);

//右转
void Droite(const char *str);

//清除画面
void Nettoie();

//移动机器人
void Allera(const char *str);

//提笔
void LeveCrayon();

//落笔
void BaisseCrayon();

//隐藏机器人
void Cache();

//显示机器人
void Montre();

void Couleur(const char *str);

//操作机器人
void ManipRobot(const char *str);

#endif // WIDGETS
//Widgets.c
#include "widgets.h"
#include "common.h"
#include <string.h>
#include <stdio.h>
#include <math.h>

extern Widgets g_widgets;

void update(Widget w, int width, int height, void *data)
{
    UNUSED(w);
    UNUSED(width);
    UNUSED(height);
    UNUSED(data);
    ClearDrawArea();
    if (g_widgets.robotIsShow)
    {
        DrawFilledBox(g_widgets.x, g_widgets.y, UUNIT, UUNIT);
    }
    for (int i = 0; i < g_widgets.index / 2; i++)
    {
        DrawLine(g_widgets.point[i*2].x,
                 g_widgets.point[i*2].y + UUNIT / 2,
                 g_widgets.point[i*2+1].x,
                 g_widgets.point[i*2+1].y + UUNIT / 2);
    }

}

void Avance(const char *str)
{
    int n = 0;
    sscanf(str, "AVANCE %d", &n);
    if (g_widgets.x + UUNIT * n >= WIDTH)
        return;
    //左边旋转或者右边旋转 左边旋转为逆时针 右边旋转为顺时针
    if (g_widgets.angle < 0 || g_widgets.angle > 0)
    {
        int l = UUNIT * n;
        int y2 = g_widgets.y + l * sin(g_widgets.angle * M_PI / 180.0);
        int x2 = g_widgets.x + l * cos(g_widgets.angle 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值