小编Mar*_*rco的帖子

如何实时检测曲线中的"膝盖/肘部"(最大曲率)

在下面的曲线(蓝线)中,我试图检测应该位于x = 2.5附近的"膝盖/肘部"

在此输入图像描述

这是我正在使用的一组值:

x = {-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8 ,9,10}

y = {0,10,20,30,40,50,60,70,80,90,100,107,122,145,176,215,262,317,380,451,530,617}

我已经尝试了Kneedle算法图形曲率正式定义(带符号曲率).我对Kneedle算法的问题是在实时应用程序(嵌入式系统)中我不知道哪个是y轴的最大值,所以我不能正确地对点进行归一化,也找不到斜率值适用于所有情况.当使用图形曲率的形式定义时,我尝试用5阶多项式(绿线)拟合曲线,然后得到导数的值来计算曲率.然而,该方法在x = -2附近找到曲率,因为由于多项式,该点周围存在曲率.

在此输入图像描述

有人可以建议我检测膝盖/肘部的方法吗?

algorithm curve polynomials

6
推荐指数
1
解决办法
1559
查看次数

C++ map::erase() 不擦除数据

我正在尝试map::erase()使用以下代码测试 C++ :

//file user.h
#include <string>
#include <fstream>
#include <cstring>

using namespace std;

class User {
    string name;
    int id;
public:
    User(const string& name, int id) : name(name), id(id) {}
    int getID() const {return id;}
    ~User(){}
};

//file main.cpp
#include "user.h"
using namespace std;

typedef map<string, User*> Dict;

int main()
{
    Dict dict;
    dict["Smith"] = new User("Smith", 666); //Id = 666
    dict["Adams"] = new User("Adams", 314); //Id = 314


    auto it = dict.find("Adams"); //look for user 'Adams' …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary erase

3
推荐指数
1
解决办法
957
查看次数

如何在SystemC中声明析构函数?

我正在SystemC中编写一个模块,其中在构造函数中有一个变量初始化为new

SC_CTOR(MY_MODULE)
{
    ...
    ...
    my_matrix = new unsigned char [a*b];
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

模拟结束时如何声明析构函数以释放内存?

c++ destructor systemc

3
推荐指数
1
解决办法
394
查看次数

C++程序不进入for循环

我是C++的新手,我正在尝试执行以下操作:

1)我创建了一类名为Objects的对象,它包含对象的名称和一个用于标识它们的数字.

2)我创建了一个继承自list的类Group,如下所示:

#include "objects.h"
#include <list>
#include <iostream>
#include <string> using namespace std;

class Group : public std::list<Objects*> { private:
    string groupname;

public:
    Group(string groupname);
    virtual ~Group() {} //destructor

    virtual string getGroupName() const;
    virtual void showlist(ostream & sl) const; };
Run Code Online (Sandbox Code Playgroud)

3)然后,我实现了方法showlist如下:

void Groupe::showlist(ostream & sl) const{
        printf("I'm here 1\n");

        for(auto it = this->begin(); it != this->end(); it++){
             printf("I'm here 2\n");

             sl << this->getGroupName() << "test" << "test\n" << endl;
             std::cout << "I'm alive";
    } }
Run Code Online (Sandbox Code Playgroud)

getGroupName方法如下:

string Group::getGroupName() const{ …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop list

2
推荐指数
1
解决办法
171
查看次数

C++ 中的智能指针和地图

我正在尝试使用智能指针执行该程序:

\n\n
//File user.h\n#include <list>\n#include <iostream>\n#include <string>\n#include <fstream>\n#include <sstream>\n#include <memory>\n#include <map>\n\nusing namespace std;\n\nclass User {\n    string name;\n    int id;\npublic:\n    User(const string& name, int id) : name(name), id(id) {}\n    int getID() const {return id;}\n    ~User(){}\n};\n\n//File main.c\n#include "user.h"\nusing namespace std;\ntypedef std::shared_ptr<User> UserPtr;\ntypedef map<string, UserPtr> Dict;\n\nint main()\n{\n    Dict dict;\n    dict = new User("Adams", 666);\n    auto it = dict.find("Adams");\n\n    if (it == dict.end())\n        cout << "not found!" << endl;\n\n    else\n        cout << "id3: " << it->second->getID() << endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我之前用原始指针(*)测试过它并且它有效。尽管如此,当使用智能指针时,我收到以下错误:

\n\n
main.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary smart-pointers

-2
推荐指数
1
解决办法
6193
查看次数