【问题标题】:Plotting graphs in C++在 C++ 中绘制图形
【发布时间】:2020-08-31 08:20:33
【问题描述】:

我在python中使用matplotlib制作了下图。我还附上了我用来制作这个的代码。

竞技场代码

import matplotlib.pyplot as plt
import matplotlib.patches as patches

obs_boundary = [
            [0, 0, 10, 600],
            [0, 600, 900, 10],
            [10, 0, 900, 10],
            [900, 10, 10, 600]
        ]
obs_cir_own = [
    [50,500,10],
    [100,300,10],
    [240,240,10],
    [300,400,10],
    [190,50,10]

        ]
obs_cir_opp = [
            [700, 420, 10],
            [460, 200, 10],
            [550, 500, 10],
            [670, 70, 10],
            [800, 230, 10],
            [600,300,10]
        ]
fig, ax = plt.subplots()

for (ox, oy, w, h) in obs_boundary:
    print(ox, oy, w, h)        
    ax.add_patch(
                patches.Rectangle(
                    (ox, oy), w, h,
                    edgecolor='black',
                    facecolor='black',
                    fill=True
                )
            )

for (ox, oy,r) in obs_cir_own:
            ax.add_patch(
                patches.Circle(
                    (ox, oy), r,
                    edgecolor='black',
                    facecolor='green',
                    fill=True
                )
            )
for (ox, oy, r) in obs_cir_opp:
            ax.add_patch(
                patches.Circle(
                    (ox, oy), r,
                    edgecolor='black',
                    facecolor='red',
                    fill=True
                )
            )
 
plt.plot(50,50, "bs", linewidth=30)
plt.plot(870, 550, "ys", linewidth=30)           
name='arena'
plt.title(name)
plt.axis("equal")

所以,我想用 C++ 实现一个类似的竞技场,但我不知道该怎么做?我研究了一下,我又知道了一些关于 qtplot 我对 qt 不太了解。那么,qtplot 是唯一的方法还是有一些更简单的方法。请告诉我如何在 C++ 中实现它。

【问题讨论】:

  • 您在 C++ 中重新实现它有什么特别的原因吗?
  • 只要让你的 c++ 将数据转储到某个地方,然后让它调用 python 脚本。
  • @UnholySheep 我有一个路径规划算法来测试它在 C++ 中,所以我需要上面的 C++ 图表

标签: python c++ graph


【解决方案1】:

你可以试试https://github.com/lava/matplotlib-cpp,它看起来只是matplotlib的一个包装器,所以你最后仍然在调用/使用Python和matplotlib。有了这个,您可能可以将您的代码几乎逐字复制到“C++”。

【讨论】:

  • 实际上我会用它来测试 C++ 中的路径规划算法,所以我可以用它来达到我的目的吗?意味着我可以从 C++ 代码中调用它吗?
【解决方案2】:

ROOT 是一个出色的绘制图形的 C++ 库。它是由 CERN 为物理学家开发的。它还包括一个 C++ shell,以防您想通过交互式提示使用 C++。

您可以在https://root.cern/ 找到文档、下载链接和大量示例。

还有一个人试图绘制点的stackoverflow问题:CERN ROOT: Is is possible to plot pairs of x-y data points?

【讨论】:

    【解决方案3】:

    制作图表是 C++ 不像在 python 中那么容易。因此,如果您可以继续使用您的 python 代码。否则,您可以使用 OpenGL。这里有教程:http://www.opengl-tutorial.org/。我认为这就是你所需要的:https://en.wikibooks.org/wiki/OpenGL_Programming/Scientific_OpenGL_Tutorial_02

    【讨论】:

    • 虽然我很高兴你提到我写的科学 OpenGL 教程,但如果你只是想要一个简单的库来绘制图形,我认为这不是要走的路 :)
    • @G.Sliepen 你能推荐一种更简单的绘图方法吗?
    • 那么 plotutils 呢? gnu.org/software/plotutils 。它是一个官方的 C++ 库:en.cppreference.com/w/cpp/links/libs
    • @SHIVANSHUSAHOO 恐怕我自己没有一个好的答案。正如 Jan Crhistoph Terasa 所提到的,看起来 matplotlib-cpp 对您来说是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多